iOS – 不同的图像基于设备或缩放相同的图像?

看起来,开发人员总是为不同的设备创build不同的图像资源,并根据设备加载它们。 但是,为最大分辨率设备(iPad)创build图像,然后缩放iPhone 6,5等图像是否有任何缺点?

我使用SpriteKit,所以我只是创build不同大小的SKSpriteNodes,并将相同的纹理应用到它们,并将其缩放以适合节点。

我知道性能可以考虑的东西(为较旧的设备加载大图像)。 但是,除此之外,还有别的吗? 这些图像会显得更像素化/模糊?

完美/纯粹的答案是为每个设备的分辨率使用不同的图像和代码。

但是从你自己的时间和理智的angular度来看,考虑到分辨率和屏幕尺寸的数量不会很快减less,使用有限的设置是有意义的。 那么为什么要浪费几个小时准备多个图像,除非可以通过xcode这样做来简化。

对于正方形或固定纵横比的图像,我认为你只需要一个图像。 对于像背景这样的图像来说,无论分辨率如何,至less对于不同方面的口粮来说,都是一个问题:除非你不介意挤压,拉伸,否则独立的长宽比图像是必不可less的(比如3:2和16:9)或裁剪图像。

如果在testing中发现性能受到影响,则可以随后添加较低分辨率的图像。

就像素而言,这是你无法避免的。 如果您考虑从x3分辨率到x1分辨率时发生的情况,则必须将3×3像素混合到1×1中。 在高分辨率情况下,任何单像素宽度(如线条)或在几个像素内快速变色的东西都将受到最大的影响。 网上有很多关于这个你可以看看的文章。

避免像素化的唯一方法是使用vector图像,但是这需要特殊的软件来加载vector图像并将其渲染成UIImages。

缩小图像时,每个图像都会受到不同的影响。 一个想法可能是去为x2的图像,你缩小1的iPhone 3和1的X3的iPhone 6 +。 这将覆盖大多数当前设备的自然分辨率,并可能提供不太明显的像素化。

这取决于。 如果截断图像会造成问题,那么使用一幅图像或每幅高宽比的图像当然更为经济。

对于像照片这样的图像,这可能是完全可以接受的,因为这种图像往往不包含像素完美的特征。

如果我们正在处理graphics艺术品 – 细线条,清晰的轮廓,像素完美的特征 – 缩放可能严重损害质量。

考虑下面的例子:想象一下,你想创build一个固定大小的自定义文本字段。 文本区域将被一个线宽为1px的黑色轮廓所包围。 你使用的视网膜分辨率为你的艺术作品,你的出发点是4“的屏幕尺寸。如果文本框与屏幕一起缩放,框将如何显示在其他屏幕尺寸上? -Retina显示屏?

非视网膜:分辨率需要减半。 想象一下你的作品中有一个2×2像素的块 – 它需要被计算成一个像素。 我们的轮廓只有1px的宽度,所以一个2×2像素块和一条线贯穿它包含两个黑色和两个白色像素。 由此产生的非视网膜像素将是灰色的。 实际上,缩放比较复杂一点,但结果会是一个模糊的黑色,稍微粗一点的线条。

缩放视网膜:分辨率需要增加。 设想一个分辨率为1.5×4英寸屏幕的设备,1px线需要变成1.5像素宽,这显然是行不通的,相反,原来的1px线会被拉长到灰度等级两个(或更多)像素,接近一个1,5px行的“黑度”。

无论哪种方式(向上或向下)缩放都会使轮廓模糊,变粗,变黑。

这个例子并不是一个完美的例子,因为iOS允许用可伸缩的部分来定义图像,并且可以完美地缩放。 对于我们的矩形框,这实际上是可能的。 但它不适用于更复杂的艺术品。

如果像素完美是必须的,那么每个分辨率或vectorgraphics(Quartz / SVGKit / …)

编辑:我已经在Photoshop中使用双线性缩放再现我的例子。 它可能在设备上看起来稍有不同,因为它可能使用另一个缩放algorithm。 但是我想你会明白的

图像缩放为0.5倍和1.5倍分辨率的示例

我曾经有一段时间的印象,你稍后将缩放的单一图像也很好。

对于这样做的多种方式,以及一些基准,检查NSHispter:图像resize技术

如需进一步阅读,请查阅Core Image Apple文档,NSHipster文章也提到了这一点。

没有人真正回答图像质量是否会降低。 我只是试图实现这一点,图像显得稍微像素,比如果他们保持在原来的大小。

在内存使用方面,我可以回答我的经验。 有足够的人回答关于图像质量,所以唯一的其他问题是内存使用情况。 我已经使用了我在游戏Piston Flip中描述的技术,并且它运行良好,因为我没有使用许多纹理或节点。 然而,在我正在使用的另一个游戏中,使用拼贴,我不能使用大图像并缩小它们,因为每个设备几乎只能处理加载为其屏幕尺寸指定的拼贴。

所以这真的取决于。