【问题标题】:Converting a normal PNG to iPhone Optimized format将普通 PNG 转换为 iPhone 优化格式
【发布时间】:2009-07-26 11:53:17
【问题描述】:

我有一个 iPhone 应用程序,它可以从 Internet 下载图像并保存它们以供以后显示。

用户可以从 UITableView 中选择要查看的图像,表格视图具有自定义单元格,可显示不同大小的原始图像的缩略图。

第一次下载大图像时,它会缩放为缩略图大小,并使用 UIImagePNGRepresentation 保存缩略图。

我想做的是以优化的 iPhone PNG 格式保存缩略图。我怎样才能做到这一点?只是将原始大图像加载到内存中并保存它会神奇地发生吗?保存之前是否需要对缩略图进行进一步处理?

【问题讨论】:

  • 好问题。我知道 XCode 在将 png 复制到您的应用程序时会这样做,但不知道您将如何动态地执行此操作。
  • 使用 UIImagePNGRepresentation 保存图像时,不是最有可能自动使用优化的 PNG 格式吗?
  • 我对此表示怀疑。 “优化”的 PNG 不符合标准,只能被 iPhone 图像解码器读取

标签: iphone cocoa-touch


【解决方案1】:

可能是 UIImagePNGRepresentation 不会创建图像,因为它们是不合规的 PNG,并且不能被其他任何东西读取。如果他们的 API 生成了无法读取的 PNG,我认为它会记录下来,并且任何从手机上传 PNG 的人都会注意到它们不起作用。

优化很有用,但大多数优化的 PNG 是 UI 的一部分,优化是作为构建过程的一部分完成的。执行优化的成本可能会抵消您从中获得的任何收益。

【讨论】:

  • 不是我的图片,它们来自网络,因此未针对设备进行优化。如果我可以以优化的格式保存图像,那么您提到的成本将是一次性的,并且用户已经处于“等待模式”。
  • 当然,但是有两点。首先,这将是很多工作。第二次优化的 PNG 比普通 PNG 更有效,这对于无损内容(如 UI)是必需的。很多网页内容是有损文件(JPG),文件大小的增加比解压缩的成本更高。请记住,设备闪存很慢,读取 60k 文件比 12k 文件需要更长的时间。如果您的原始来源有损仅使用 JPG。
【解决方案2】:

事实证明,优化格式中使用的 RGB565 颜色空间在 CGGraphicsContext 中根本不可用,CGGraphicsContext 是所有 UIwhatever 组件使用的渲染类。

因此,如果我在保存图像之前编写了一些代码来更改图像的色彩空间,我就无法将纹理恢复到 UI 类中。使用它的唯一方法是将其直接加载到 OpenGL 内部并在我的应用程序中使用 OpenGL。

【讨论】:

    【解决方案3】:

    不要担心“优化的 PNG”格式,因为它没有任何显着差异。

    does not affect rendering speed at all,加载速度为dictated by file size more than file format

    因此,只需将其保存为可以提供最小文件的格式即可。如果您没有使用透明度,那么它可能是 JPEG。

    如果您需要透明度,并且可以在保存图像时花费更多 CPU 时间,则在您的程序中包含 pngquant(它在类似 BSD 的许可下)并将这些 PNG 压缩为 8 位调色板。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-10
      • 2016-04-06
      • 1970-01-01
      • 2021-06-15
      • 2012-02-19
      • 1970-01-01
      • 2015-09-21
      • 2021-11-24
      相关资源
      最近更新 更多