【问题标题】:Crash when I convert PDF pages to PNG images将 PDF 页面转换为 PNG 图像时崩溃
【发布时间】:2011-08-03 21:43:14
【问题描述】:

我需要将 PDF 文档的每一页都转换为 PNG 图像。然后这些图像显示在滚动视图中。我需要为每页创建两张图片:一张在屏幕尺寸,一张大 2.5 倍(在用户放大 scrollView 时使用)。

我的问题是我在创建大图像时有时会出现内存警告和崩溃。 我的做法众所周知:


    CGRect pageRect = CGPDFPageGetBoxRect(pdfPage, kCGPDFMediaBox);
    float pdfScale = 2.5*self.view.frame.size.height/pageRect.size.height;
    pageRect.size = CGSizeMake(pageRect.size.width*pdfScale, pageRect.size.height*pdfScale);    

    UIGraphicsBeginImageContext(pageRect.size); 
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(context, 1.0,1.0,1.0,1.0);
    CGContextFillRect(context,pageRect);    
    CGContextSaveGState(context);
    CGContextTranslateCTM(context, 0.0, pageRect.size.height);
    CGContextScaleCTM(context, pdfScale,-pdfScale); 
    CGContextDrawPDFPage(context, page);
    CGContextRestoreGState(context);

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

问题出现在 iPhone 3G/3GS 和 iPod Touch 上。 如何在缩放比例为 2.5 的同时限制内存消耗?

谢谢!

【问题讨论】:

  • 为什么需要为页面创建静态图像?为什么不在更高的缩放比例下根据需要重新渲染 PDF 页面?
  • 观察上面的代码,它没有正确处理页面裁剪框和旋转。请在此处查看更多详细信息:ipdfdev.com/2011/03/23/…。关于内存问题,一个字母大小的页面转换为 250% 缩放的图像,考虑到 100% 缩放的 96dpi 生成一个 2040x2640 像素的图像。在 32bpp(每像素 4 字节)时,图像大约需要 20MB。
  • @BradLarson 以更高的比例“实时”呈现 PDF 页面太长了。 @SorinNistor 感谢您的链接。

标签: iphone image ios pdf uiscrollview


【解决方案1】:

您可以考虑使用 webview 来显示 PDF,这可以解决缩放和内存问题。基本上将矢量格式 PDF 渲染为大尺寸的位图 PNG 可能不是最合适的设计决策。虽然不知道您对 PNG 的要求是什么,但很难发表评论。

【讨论】:

  • 感谢您的回答罗杰。我已经在 iPhone 3G 上使用 webview。但对于 iPhone 3GS 和其他新设备,我更喜欢使用 mu 自己的 PDF 阅读器。我对 PNG 图像没有任何特殊要求。它们仅用于显示在 iPhone 屏幕上。您认为转换为 JPEG 更相关吗?
猜你喜欢
  • 2021-08-15
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 2015-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
相关资源
最近更新 更多