【问题标题】:How do I get compression factor of JPEG image in Cocoa?如何在 Cocoa 中获取 JPEG 图像的压缩系数?
【发布时间】:2015-04-15 02:20:06
【问题描述】:

OSX 应用程序读取 JPEG 图像,进行一些处理并打算以原始图像的压缩系数保存图像。

我偶然发现了原始图像的压缩系数。 NSImage 类没有类似的东西。

NSBitmapImageRep 类有方便的方法:

- (void)getCompression:(NSTIFFCompression *)compressionfactor:(float *)factor

但是,如果我从使用 dataWithContentsOfFile 读取的 NSData 中获得 NSBitmapImageRep,我会得到零压缩因子。

任何想法,我如何在 Cocoa 中获得 JPEG 图像的压缩系数?

【问题讨论】:

  • 压缩系数对于 JPEG 来说是一个松散的概念。我认为没有标准定义,这取决于用于编码的软件。它只会间接影响写入文件的值,因此您无法从 JPEG 文件中提取任何值。
  • P.S.以下是微软针对 C# 的主题所说的话:support.microsoft.com/kb/324790
  • 嗯,微软的文章解释的很清楚。有一种方法可以检查或计算图像的压缩系数。确定 ImageMagick 套件的实用程序,其中键 -verbose 提供压缩系数。

标签: objective-c cocoa jpeg nsimage


【解决方案1】:

使用ImageMagick++ 库很容易:

Image magick_image([路径名 cStringUsingEncoding:NSUTF8StringEncoding]);
size_t 压缩因子 = magick_image.quality(); // 0..100

它是 Objective-C 和 C++ 的混合体,称为 Objective-C++。顾名思义,Magick++ 是 C++ 库,是 C 库 ImageMagick 的包装器。在上面的代码中,图像是来自 Magick++ 库的 C++ 类。 pathname 是 NSString Objective-C 类的对象。

【讨论】:

    【解决方案2】:

    你可以试试这个,但根据我的经验,它并不总是有效。

    NSNumber* factor = [imageRep valueForProperty:NSImageCompressionFactor];
    

    这是来自 NSBitmapImageRep 的该属性的 Apple 文档。

    NSImageCompressionFactor

    标识一个包含图像压缩系数的 NSNumber 对象。

    仅用于 JPEG 文件。不支持 TIFF 文件中的 JPEG 压缩,并且忽略该因素。该值是介于 0.0 和 1.0 之间的浮点数,其中 1.0 导致不压缩,而 0.0 导致可能的最大压缩。读入时设置,写出图像时使用。

    在 OS X v10.0 及更高版本中可用。

    【讨论】:

      猜你喜欢
      • 2010-12-18
      • 1970-01-01
      • 2013-02-22
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      • 2019-09-22
      • 2012-05-16
      相关资源
      最近更新 更多