【问题标题】:Can I use JPEG compression for images in pdf files generated on iOS?我可以对 iOS 上生成的 pdf 文件中的图像使用 JPEG 压缩吗?
【发布时间】:2012-04-28 13:48:28
【问题描述】:

目前我正在处理的问题是我有很多 1024x768 图像的 pdf 文件,并正在尝试优化 pdf 的文件大小,但我认为目前唯一足够好的解决方案是使用 jpeg 压缩图像压缩。问题是我没有找到任何使用 iOS API 的方法。我错过了什么,有办法吗? 我欢迎就如何使用其他方式优化 pdf 提出建议(降低图像的分辨率对我来说不是一个好的解决方案)。

编辑:如果有人知道另一个用于在 iOS 上生成 pdf 的 API - 链接将不胜感激。

提前致谢。

【问题讨论】:

标签: iphone ios ipad pdf


【解决方案1】:

实际上你可以使用 UIImageJPEGRepresentation。但是还有一步,然后使用 JPEG 数据提供程序来绘制图像:

NSData *jpegData = UIImageJPEGRepresentation(sourceImage, 0.75);
CGDataProviderRef dp = CGDataProviderCreateWithCFData((__bridge CFDataRef)jpegData);
CGImageRef cgImage = CGImageCreateWithJPEGDataProvider(dp, NULL, true, kCGRenderingIntentDefault);
[[UIImage imageWithCGImage:cgImage] drawInRect:drawRect];

当绘制到 PDF 上下文时,这对我很有效。 0.75 的压缩质量将我的载有图像的 PDF 的大小减少了大约 75%,而且看起来仍然很好。

【讨论】:

  • 别忘了释放 - CGDataProviderRelease(dp); CGImageRelease(cgImage);
  • 非常适合我!
【解决方案2】:

如果有人感兴趣,我可以使用免费的 pdf 库 - libHaru 找到解决问题的方法。它为我提供了将 JPEG 压缩图像添加到生成的 pdf 文件所需的功能。

【讨论】:

  • 您介意给我们您的 libHaru 解决方案的代码 sn-p 吗?
【解决方案3】:

如果你想压缩图片,可以使用UIImageJPEGRepresentation

NSData * UIImageJPEGRepresentation (
   UIImage *image,
   CGFloat compressionQuality
);

您可以使用 jpeg 转换/压缩 PNG 图像

NSData *someImageData = UIImageJPEGRepresentation(pngImage, 0.6); // quality 0.6 (60%) (from 0.0-1.0).
UIImage *newCompressedJPG = [UIImage imageWithData:someImageData];

但我认为这不会减少您的 PDF 大小。因为当您将 UIImage 放置到您的 pdf 时,RAW 图像会被放置(据我所知)。

更新 1: 它的压缩率从 0.0 到 1.0 不等(感谢Leena

【讨论】:

  • 感谢您的评论,您是对的,当将图像绘制到 pdf 上下文中时,会绘制实际的 RAW 图像数据。我需要的是一种添加 jpeg 压缩图像的方法——这可能需要使用石英和 CGPDF 以外的东西。
猜你喜欢
  • 1970-01-01
  • 2012-02-05
  • 1970-01-01
  • 2020-01-05
  • 2021-07-03
  • 2013-02-22
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多