我可以对 iOS 上生成的 pdf 文件中的图像使用 JPEG 压缩吗?

Posted

技术标签:

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

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

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

提前致谢。

【问题讨论】:

没有任何开箱即用的解决方案可用于使用 iOS api 优化 pdf,sry! ***.com/questions/4362734/… blog.nitropdf.com/2008/02/… 只是为了了解减少 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 以外的东西。

以上是关于我可以对 iOS 上生成的 pdf 文件中的图像使用 JPEG 压缩吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS10 上生成的 GIF 图像不再在浏览器上永远循环

Beanstalk:如何将服务器上生成的文件同步回 beanstalk 存储库?

如何保证对我的服务器的请求是由我的 iOS 应用程序在真实设备上生成的?

如何在 Android 上使用 PdfDocument 设置 PDF 文件大小

Puttygen 和 NodeJS 上生成的 RSA 密钥的长度不同

在 iOS 中生成第一个 PDF 页面的图像