圆形图像转角GM ImageMagic,传递选项

时间:2016-10-22 10:57:02

标签: node.js imagemagick rounding

您好我想转换一些带圆角的图像。我发现如何使用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! ');
    })

})

2 个答案:

答案 0 :(得分:2)

假设您的原始图片是100x100的绿色正方形:

gm convert -size 100x100 xc:green input.png

Green Square

首先,创建遮罩:

gm convert -size 100x100 xc:none -fill black -draw "roundrectangle 0,0,99,99,10,10" mask.png

Mask with rounded corners

然后,将遮罩应用于输入图像:

gm composite -size 100x100 input.png xc:none mask.png output.png

Green square with rounded corners

思考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

enter image description here

convert -size 100x100 gradient:blue-yellow mask.png -compose copyopacity -composite result.png

enter image description here

另外,请注意,由于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

enter image description here