【问题标题】:Is it ok to scale down UIImage's?可以缩小 UIImage 的大小吗?
【发布时间】:2015-05-06 21:25:02
【问题描述】:

我被告知不要缩小图像,而是始终以原始分辨率使用它们。

我有一个自定义 UITableViewCell,它在单元格上有一个“响应操作”。 Storyboard 中的 UIImageView 是 16x16。

现在我最初使用的是 256x256 的图像,而我的 UIImageView 具有纵横比约束和 16 的高度约束。

然后有人建议我不要缩小图像,而是使用适合我需要的确切尺寸的图像。因此,为我设计了 16x16,我使用了它。但它看起来非常模糊。

结果在这里(旁边的字体是 11.0 点,让您了解它的大小):

解决这个问题的正确方法是什么?你不应该缩小图像吗?是什么原因?它看起来比 16x16 好得多。

【问题讨论】:

    标签: ios cocoa-touch uiimage


    【解决方案1】:

    在将图像添加到项目之前先缩小图像...

    获取 256x256 png 图像并将其缩放为 1x、2x 和 3x 大小。 1x 应该等于您需要图像在视图中显示的大小。 2x 和 3x 将支持 Retina 和 Retina HD 显示器。

    例如:

    名称:image.png |尺寸:16x16

    名称:image@2x.png |尺寸:32x32

    名称:image@3x.png |尺寸:48x48

    将这些图片放入您的Images.xcassets

    见:Specifying High-Resolution Images in iOS

    还有:Icon and Image Sizes

    【讨论】:

      【解决方案2】:

      您不需要需要缩小图像,但这是个好主意。如果您将 256x256 塞进 16x16 意味着用户正在下载 65kb 与

      但这取决于您使用的屏幕分辨率。即使是 iPhone 4 也使用 Retina,这意味着您的 16x16 图像视图应该包含 32x32 图像。您还应该为 iPhone 6+ 屏幕提供 48x48。这将使您的图像在各种屏幕尺寸上看起来都很棒。

      使用Images.xcassets 管理您的图像。

      【讨论】:

        【解决方案3】:

        理想情况下,您不应该缩小图像,但您还需要调整屏幕分辨率。旧设备是 1x,retina 设备是 2x,最新的 iPhone 6 设备使用 3x 图像,这意味着每个设备应该使用 16x16、32x32 和 48x48 图像(最好在图像资产中管理)。你现在看到的是一张 1 倍的图像被放大到 2 倍或 3 倍,所以它很模糊。以前你有一个按比例缩小的大图像,这对内存使用不利,但看起来很清晰。

        【讨论】:

          【解决方案4】:

          如果您使用的是资产目录中的图像,在开发过程中提供给您自己。您不想在运行时缩小图像,因为它会给您的应用程序增加不必要的开销。而是将资产调整到所需的尺寸,并将它们添加到您的 xcimage 目录中以进行 1x、2x 和 3x 显示。考虑内存和包大小方面的优化,使其工作和看起来不错所需的最小大小是多少?如果您的图像以 20x20 的正方形显示,则最佳尺寸将始终为 20x20、40x40 和 60x60,以显示 1x、2x 和 3x。

          现在从网络获取图像是完全不同的游戏。您会发现有时您可能想要缩小图像,但只有当您获取的图像大于您需要显示的图像时,例如当您尝试将 2000x2000 像素的图像放入一个 36x26 像素的正方形。您想要缩小规模有以下三个原因:

          • 它将减少虚拟内存的使用。
          • 如果您保留图像,它将减少存储内存。
          • 您可以避免系统尝试在运行时渲染图像时出现的图像下采样伪影。

          最好的办法是在您从网络下载后立即缩小图像,然后再在应用中的任何位置使用它。

          希望这会有所帮助!

          【讨论】:

            【解决方案5】:

            对此有一个纯粹的答案,然后是让您免于整天转换图像的答案。

            以下是关于缩放主题的讨论。

            iOS - Different images based on device OR scaling the same image?

            如果您想避免创建太多图像,那么使用分辨率为 x2 的 x2 图像,预期的点大小使用是一个合理的折衷方案,因为它涵盖了大多数当前设备。只有这样,您才能在 iPhone 3s 上​​按比例缩小,而在 iPhone 6+ 上按比例放大。如果您希望使用大图像,则只需要大 XxY 图像。我会再次为这些选择 x2 分辨率。通常值得拥有 iPhone 和 iPad 版本的图像,以防您希望在 iPad 上使用更大的 XxY 点大小。

            如链接中所述,缩放的影响取决于图像。我只会担心您认为缩放后看起来很糟糕的图像。到目前为止,我还没有发现缩放是一个问题,并且比创建大量定制的 PNG 容易得多。

            【讨论】:

              【解决方案6】:

              在设置之前缩小它:

              Swift 扩展:

              extension UIImage{
              
                      // returns a scaled version of the image
                      func imageScaledToSize(size : CGSize, isOpaque : Bool) -> UIImage{
              
                          // begin a context of the desired size
                          UIGraphicsBeginImageContextWithOptions(size, isOpaque, 0.0)
              
                          // draw image in the rect with zero origin and size of the context
                          let imageRect = CGRect(origin: CGPointZero, size: size)
                          self.drawInRect(imageRect)
              
                          // get the scaled image, close the context and return the image
                          let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
                          UIGraphicsEndImageContext()
              
                          return scaledImage
                     }
              }
              

              例子:

              aUIImageView.image = aUIImage.imageScaledToSize(aUIImageView.bounds.size, isOpaque : false)
              

              如果图像没有 alpha,则将 isOpaque 设置为 true:绘图会有更好的性能。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-09-21
                • 2013-12-22
                • 1970-01-01
                相关资源
                最近更新 更多