我正在尝试使用以下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
答案 0 :(得分:2)
这是我使用ImageMagick 6.9.10.8 Q16和libpng 1.6.34通过PNG8输出处理图像的结果。
我注意到您输入的图像是调色板,这意味着它是每个像素8位颜色,而不是24位颜色。因此它已经是低质量的图像。
输入(〜16 KB):
水印图像(透明的白色-因此在这里不可见):
转换为24位PNG:
convert input.png watermark.png -gravity northwest -compose over -composite input_with_watermark.png
我看不到明显的可见质量损失,但是现在输出从16 KB增加到60 KB。但是您可以使用pngcrush之类的工具对其进行进一步压缩。
转换为8位PNG:
convert input.png watermark.png -gravity northwest -compose over -composite PNG8:input_with_watermark2.png
文件大小现在恢复到大约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
这要好一些,因为它现在使用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
这将产生具有227种颜色的8位输出,并且文件大小仍约为16 KB。因此,它的颜色比输入的颜色多一些,并且在视觉上看起来与输入的颜色相同。
如果您无法重现这些结果,那么也许您应该同时升级ImageMagick和libpng。