您好我想转换一些带圆角的图像。我发现如何使用ImageMagic在他们的网站上完成这项工作
convert thumbnail.gif \
\( +clone -crop 16x16+0+0 -fill white -colorize 100% \
-draw 'fill black circle 15,15 15,0' \
-background Red -alpha shape \
\( +clone -flip \) \( +clone -flop \) \( +clone -flip \) \
\) -flatten rounded_corners_red.png
http://www.imagemagick.org/Usage/thumbnails/#rounded问题是我不知道如何将所有这些选项传递给GM。我试过
gm.in("\( +clone -crop 16x16+0+0 -fill white -colorize 100%
-draw 'fill black circle 15,15 15,0'
-background Red -alpha shape
\( +clone -flip \) \( +clone -flop \) \( +clone -flip \)
\) -flatten")
但它没有用。这就是我调整图像大小的方法
var gm = require("gm").subClass({ imageMagick: true })
var _ = require("lodash")
var images = ['1b.jpg', '2b.jpg', '3b.jpg']
_.forEach(images, function(image, key) {
var img = gm( __dirname + '/' + image )
var dest = __dirname + '/' + key+'.jpg'
img.resize('100', '100', '^')
img.gravity('Center')
img.crop('100', '100')
img.in("\( +clone -crop 16x16+0+0 -fill white -colorize 100%
-draw 'fill black circle 15,15 15,0'
-background Red -alpha shape
\( +clone -flip \) \( +clone -flop \) \( +clone -flip \)
\) -flatten")
img.write( __dirname + '/' + key+'.jpg', function (err) {
if (!err) console.log(' image done! ');
})
})
答案 0 :(得分:2)
假设您的原始图片是100x100的绿色正方形:
gm convert -size 100x100 xc:green input.png
首先,创建遮罩:
gm convert -size 100x100 xc:none -fill black -draw "roundrectangle 0,0,99,99,10,10" mask.png
然后,将遮罩应用于输入图像:
gm composite -size 100x100 input.png xc:none mask.png output.png
思考composite
的参数的方式是,首先将input.png
堆叠在图像xc:none
的顶部(完全遮盖住),然后将mask.png
用于遮盖input.png
的区域,并在其下方显示xc:none
的一部分。
(请参见roundrect,以了解一个shell脚本,该脚本可处理任意大小的图像,而无需创建中间文件。)
答案 1 :(得分:1)
我不相信 GraphicsMagick 支持括号,这似乎是一种非常复杂的做事方式。我想我会制作一个alpha蒙版,显示我希望图片不透明/透明的位置并将其复制到图像中。
所以,具体而言:
convert -size 100x100 xc:none -draw "roundrectangle 0,0,99,99,12,12" mask.png
convert -size 100x100 gradient:blue-yellow mask.png -compose copyopacity -composite result.png
另外,请注意,由于JPEG不支持透明度,因此无法在JPEG输出文件中存储透明边角。
如果你想要红色角落,你可以这样做:
convert -size 100x100 xc:red -draw "roundrectangle 0,0,99,99,12,12" -transparent black mask.png
convert -size 100x100 gradient:blue-yellow mask.png -composite result.png