Objective c 如何使用objective C压缩图像(png、jpg等)

Objective c 如何使用objective C压缩图像(png、jpg等),objective-c,image-processing,compression,shrink,Objective C,Image Processing,Compression,Shrink,我想在OSX上收缩png或jpg。我只想缩小而不影响图像质量。 像 有推荐的图书馆吗?我只知道imagemagick。有没有一种方法可以在本地实现这一点?或者另一个库在不影响图像质量的情况下收缩/压缩图像 我的目标是缩小文件大小,例如: logo.png >> 476 k before shrink logo.png >> 50k after shrink 编辑:为了清楚起见,我想压缩文件的大小,而不是图像分辨率。通过使用图像量化工作-图像中的相似颜色转换为HSV或R

我想在OSX上收缩png或jpg。我只想缩小而不影响图像质量。

有推荐的图书馆吗?我只知道imagemagick。有没有一种方法可以在本地实现这一点?或者另一个库在不影响图像质量的情况下收缩/压缩图像

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

logo.png >> 476 k before shrink 
logo.png >> 50k after shrink
编辑:为了清楚起见,我想压缩文件的大小,而不是图像分辨率。

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

它是如何工作的?
……
当您上传PNG(便携式网络图形)文件时,图像中的类似颜色会组合在一起。这种技术称为“量化”
……
src:

这里的答案概括了这样做的方法:

关于这个问题,也有一些答案,请参阅如何在Mac OS上使用objective-c实现这一点:

有关更深入的指南,请参见维基百科:

使用图像量化-图像中的相似颜色转换为HSV或RGB模型,然后根据距离合并

它是如何工作的?
……
当您上传PNG(便携式网络图形)文件时,图像中的类似颜色会组合在一起。这种技术称为“量化”
……
src:

这里的答案概括了这样做的方法:

关于这个问题,也有一些答案,请参阅如何在Mac OS上使用objective-c实现这一点:

有关更深入的指南,请参见Wikipedia:

我的建议是使用它,它将提供比ImageMagick更好的结果,对于中给出的单个示例,它也会产生非常类似的输出。这是“最佳颜色量化的Kohonen神经网络”一文中提出的方法的微小C实现。因为您不再依赖于封闭的未知实现,所以仅此一项就更好了

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

使用ImageMagick,我能得到的最佳256色量化使用了Floyd Steinberg的实验室颜色空间和抖动:

convert input.png -quantize LAB -dither FloydSteinberg -colors 256 output.png
这将生成一个16 KB的png,但它包含更多的视觉构件:

我的建议是使用,它会比ImageMagick提供更好的结果,对于中给出的单个示例,它也会产生非常相似的输出。这是“最佳颜色量化的Kohonen神经网络”一文中提出的方法的微小C实现。因为您不再依赖于封闭的未知实现,所以仅此一项就更好了

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

使用ImageMagick,我能得到的最佳256色量化使用了Floyd Steinberg的实验室颜色空间和抖动:

convert input.png -quantize LAB -dither FloydSteinberg -colors 256 output.png
这将生成一个16 KB的png,但它包含更多的视觉构件:


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

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

这是一个非常彻底的

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

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

这里有一个非常彻底的

您需要弄清楚,您的意思是要减小图像的大小还是文件的大小?(请记住,任何文件压缩都必须使用阅读应用程序可以识别的算法完成。)你知道tinypng.org使用的方法吗?我的建议是首先了解要做什么,在任何语言/库中如何做,然后才开始考虑如何在objective-c中具体实现它。它执行某种形式的量化,但精确的细节在任何地方都不可用。这意味着,如果不将大量不同的png图像上传到服务并检查结果,我们也无法知道该方法是否会对某些给定的输入产生不良结果。最后,这种变换确实会影响图像质量。你不能执行没有的有损压缩。不,我不知道tinypng.org的方法。我只想压缩图像,而不会造成明显的图像质量损失。在tinypng.org上,我读到他们使用的方法在photoshop等软件中是不可用的。研究无损压缩和有损压缩,然后与我们联系。你需要弄清楚,你是想减小图像的大小还是文件的大小?(请记住,任何文件压缩都必须使用阅读应用程序可以识别的算法完成。)你知道tinypng.org使用的方法吗?我的建议是首先了解要做什么,在任何语言/库中如何做,然后才开始考虑如何在objective-c中具体实现它。它执行某种形式的量化,但精确的细节在任何地方都不可用。这意味着,如果不将大量不同的png图像上传到服务并检查结果,我们也无法知道该方法是否会对某些给定的输入产生不良结果。最后,这种变换确实会影响图像质量。你不能执行没有的有损压缩。不,我不知道tinypng.org的方法。我只想压缩图像,而不会造成明显的图像质量损失。在tinypng.org上,我读到他们使用的方法在photoshop等软件中是不可用的。研究无损压缩和有损压缩,然后与我们联系。为什么你认为它使用HSV?它也可以是实验室、HSB、HSI、YCbCr等,甚至RGB。当然,这些链接都不能说明tinypng.org是如何做到的。有太多的方法来执行量化,以试图猜测该服务到底做了什么。我访问过的大多数参考文献都提到使用HSV和RGB的算法,这就是我假设的原因。此外,是的,当然链接没有告诉tinypng实际上是如何做到的,我没有说他们做到了。为什么你认为它使用HSV?也可以