在图像上应用水印

时间:2018-07-30 15:46:20

标签: image-processing imagemagick

我正在尝试使用以下imagemagick命令在图像上应用水印

convert input.png watermark.png.png -gravity northwest -composite output.png

输入png文件的大小为16KB,水印文件的大小为900bytes,但是当我执行上述命令以应用水印时,输出png大小为61KB,几乎是原始输入png文件的4倍。在输出文件大小方面,是否有更好的方法将水印应用于图像文件,效果更好?

测试图像:https://res.cloudinary.com/deks86ilr/image/upload/v1533015495/1_rnpbye.png

测试水印:https://res.cloudinary.com/deks86ilr/image/upload/v1533015494/2_usmonh.png

1 个答案:

答案 0 :(得分:2)

这是我使用ImageMagick 6.9.10.8 Q16和libpng 1.6.34通过PNG8输出处理图像的结果。

我注意到您输入的图像是调色板,这意味着它是每个像素8位颜色,而不是24位颜色。因此它已经是低质量的图像。

输入(〜16 KB):

enter image description here

水印图像(透明的白色-因此在这里不可见):

enter image description here

转换为24位PNG:

convert input.png watermark.png -gravity northwest -compose over -composite input_with_watermark.png


enter image description here

我看不到明显的可见质量损失,但是现在输出从16 KB增加到60 KB。但是您可以使用pngcrush之类的工具对其进行进一步压缩。

转换为8位PNG:

convert input.png watermark.png -gravity northwest -compose over -composite PNG8:input_with_watermark2.png


enter image description here

文件大小现在恢复到大约16 KB。但是,正如您注意到的那样,质量稍差。这很可能是因为输入图像(8位,有217种颜色)首先被读回到24位,然后被加水印,其中包括新的白色阴影,然后量化回8位,但是仅包含84种颜色

另一种方法是将+ dither -colors 256添加到命令中(+ dither关闭了抖动):

convert 1_rnpbye.png 2_usmonh.png -gravity northwest -compose over -composite +dither -colors 256 PNG8:watermark3.png


enter image description here

这要好一些,因为它现在使用189种颜色,并且文件大小仍为16 KB。

最后一种方法是将输入中的颜色保存到色表图像中。然后使用-remap使用该颜色表为输出重新着色:

convert 1_rnpbye.png -unique-colors colortable.gif
convert 1_rnpbye.png 2_usmonh.png -gravity northwest -compose over -composite +dither -remap colortable.gif PNG8:watermark4.png


enter image description here

这将产生具有227种颜色的8位输出,并且文件大小仍约为16 KB。因此,它的颜色比输入的颜色多一些,并且在视觉上看起来与输入的颜色相同。

如果您无法重现这些结果,那么也许您应该同时升级ImageMagick和libpng。