我正在尝试以编程方式减少(有损)PNG和GIF文件的文件大小。作为其中的一部分,我需要减少图像中的颜色数量。我不想将所有图像缩小为单一颜色值,所以我正在做的是;得到图像中唯一颜色的数量,然后;将此数字除以2可将颜色数减少一半。
问题是这不起作用。使用ImageMagic它太慢了,并没有减小文件大小,除非图像有几百种独特的颜色。无论原始图像中有多少颜色,使用GraphicsMagick始终会产生低于255的唯一颜色值。 GraphicsMagick的另一个问题是如果图像中有任何透明像素,它会用透明的方式替换丢失的颜色。
欢迎任何帮助, 感谢。
答案 0 :(得分:1)
减少颜色数量仅在
时有用我认为在这些格式中你只能获得1位,4位,8位,2色,16色或256色。我想如果你要求更多,你只需要截断到256.如果你要求更少,它就不会使用整个调色板。
您是否考虑过转换为JPEG并使用质量设置进行播放?你最终会对损失进行更精细的控制。缺点是如果图像不是照片,但听起来它们有很多颜色,所以它们可能是。
也许选择1,4,8位,如果它接近你想要的和jpeg,如果它有很多颜色。
答案 1 :(得分:1)
我认为你所追求的ImageMagick工具可能是量化的:
答案 2 :(得分:0)
第一个问题,GraphicsMagick可以使用8位,16位或32位量子级进行编译。我的版本被编译成8位(默认值),这意味着可以分配给图像的最大颜色数是256种独特颜色(3 * 3 * 2,1除了蓝色位之一,因为人眼可以看得不好。显然,GraphicsMagick可以处理比这更多颜色的图像,但是当减少颜色时,它只能减少到256或更少的颜色。较大的像素量子会导致GraphicsMagick运行得更慢并需要更多内存。例如,使用16位像素量子会使GraphicsMagick比支持8位像素量子的速度慢15%到50%(并且占用两倍的内存)。
第二个问题; PNG图像中的透明度处理,我使用的是早期版本的GraphicsMagick(1.1我认为),无论如何,当我升级到1.3时,这个问题不再存在,这告诉我这是一个导致这个问题的GraphicsMagick 1.1中的错误。 p>