Node.js 圆形图像角GM ImageMagic,传递选项

Node.js 圆形图像角GM ImageMagic,传递选项,node.js,imagemagick,rounding,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

嗨,我想转换一些圆角图像。我在他们的网站上找到了如何使用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
问题是,我不知道如何将所有这些选项传递给通用汽车。我已经试过了

 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! ');
    })

})

我不相信GraphicsMagick支持括号,这似乎是一种非常复杂的处理方式。我想我会制作一个阿尔法遮罩,显示我希望图片不透明/透明的位置,并将其复制到图像中

因此,具体而言:

convert -size 100x100 xc:none -draw "roundrectangle 0,0,99,99,12,12" mask.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

假设您的原始图像是一个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

思考组合的参数的方法是首先将input.png堆叠在图像的顶部xc:none(完全遮住它),然后使用mask.png遮罩
input.png
的区域,并在下面显示部分
xc:none


(有关在不需要创建中间文件的情况下环绕任意大小图像的角的shell脚本,请参阅。)

要红色角还是透明角?您希望将圆角应用于所有相同大小的图像是否大致相同?如果是,大小是多少?因此,我尝试将此过程自动化,因此本例中的图像大小为100x100,但在某些点上可能不同。从上面的例子中可以看到,图像已经被调整大小和裁剪,因此在此之后,我希望使用圆角。关于背景,我更喜欢透明,但如果不可能,任何颜色都会更好。ImageMagick的最新版本都支持括号。请看@jondams我指的是GraphicsMagick不支持括号。我不知道GraphicsMagick,但op询问的是ImageMagick,而不是GM。我的观点是,op最初使用括号的解决方案在理论上仍然可行。。。你的答案有点让人困惑,因为你转而谈论通用汽车,它非常相似,但并不完全相同。我不是想说你错了或者没有错(我不是这两种工具的专家)——我只是想为未来的用户澄清一下,他们可能不知道通用汽车和即时通讯的区别。(甚至提醒我自己,因为我发现两者之间的差异也令人困惑。)
gm composite -size 100x100 input.png xc:none mask.png output.png