如何使用目标C压缩图像(png,jpg等)

时间:2013-02-08 22:05:27

标签: objective-c image-processing compression shrink

我想在OSX上缩小png或jpg。我只想缩小而不影响图像质量 比如tinypng.org

有推荐的图书馆吗?我只知道imagemagick。有没有办法本地做到这一点?或其他库来缩小/压缩图像而不影响图像质量?

我的目标是缩小文件大小,例如:

logo.png >> 476 k before shrink 
logo.png >> 50k after shrink

编辑:要清楚,我想压缩文件的大小,而不是图像分辨率。

3 个答案:

答案 0 :(得分:2)

TinyPNG.org通过使用图像量化来工作 - 图像中的相似颜色被转换为HSV或RGB模型,然后根据距离进行合并。

  

它是如何工作的?   
...
  上载PNG(可移植网络图形)文件时,会合并图像中的相似颜色。这种技术称为“量化”   
...
  src:http://tinypng.org

这里的答案概述了这样做的方法:https://stackoverflow.com/a/492230/556479

此问题也有一些答案,请参考 Mac OS使用objective-c How do I reduce a bitmap to a known set of RGB colours

有关更深入的指南,请参阅维基百科:http://en.wikipedia.org/wiki/Color_quantization

答案 1 :(得分:1)

我的建议是使用http://pngnq.sourceforge.net,它会比ImageMagick提供更好的结果,对于http://tinypng.org中给出的单个示例,它也会产生非常相似的输出。它是文章“用于最佳颜色量化的Kohonen神经网络”中存在的方法的微小C实现。仅此一点就好了,因为你不再依赖封闭的未知实现。

原文(57 KB),tinypng.org(16 KB),pngnq(17 KB):

enter image description here enter image description here enter image description here

使用ImageMagick,我可以获得256种颜色的最佳量化,使用LAB颜色空间和Floyd-Steinberg的抖动:

convert input.png -quantize LAB -dither FloydSteinberg -colors 256 output.png

这会产生16 KB的png,但它包含更多的视觉伪像:

enter image description here

答案 2 :(得分:1)

使用ImageMagick时遇到问题吗?它有一组丰富的量化函数,如

bool MagickQuantizeImage( MagickWand mgck_wnd, 
                          float number_colors, 
                          int colorspace_type, 
                          float treedepth, 
                          bool dither, 
                          bool measure_error )

这是一个非常彻底的guide to quantization using imageMagick