如何实现不同分辨率的图像

Posted

技术标签:

【中文标题】如何实现不同分辨率的图像【英文标题】:How to implement images for different resolutions 【发布时间】:2017-02-13 14:59:24 【问题描述】:

我想使用分辨率来为 ios 应用程序实现图像。

iOS 为现代设备提供以下分辨率:

iphone 5/SE:640x1136 iPhone 6/7:750x1334 iPhone 6/7+:1242x2208 ipad mini/air: 1536x2048 ipad pro:2048x2732 我正在构建的应用程序仅适用于横向,因此我正在考虑为每张图片创建 5 张图片,以匹配必要的分辨率。

我纠结于如何使用图像集在 xcode 中实现这一点。我可以创建 1 个图像集,并让它有 3 个 iphone 插槽和 3 个 ipad 插槽。但是,这只满足我要创建的 5 张图像中的 3 张:

iphone 6/7 @2x、iphone 6/7+ @3x 和 ipad pro 2x。

有没有办法为 iphone 5 和较小的 Ipad 实现额外的插槽?

我找不到方法,所以我想我必须使用第二个图像集来添加 2 个缺少的分辨率图像。这将需要我在代码中使用视图控制器,根据设备的分辨率加载不同的图像。

我同意这个额外的要求。我的问题是这是实施该策略的正确方法吗?你将如何实现这一点?什么可能是更好的策略? 注意:我试图避免的是限制让视图看起来像我想要的方式所需的约束数量。我开始使用一个应用程序,我使用了 2 张基于纵横比的图像,我认为这很棒,但是 iphone 4 把所有东西都扔掉了。然后我了解到,也许我不应该担心 iphone 4,因为它已经过时了。所以我要么使用 2 图像方法从头开发 UI,要么尝试使用分辨率的 5 图像方法。

我是一名新开发人员,因此感谢您的任何帮助,如果我过于冗长,请见谅,我希望这也可以帮助其他人,我发现详细说明绝对是学习时最好的方式。感谢您提供任何信息!!!

【问题讨论】:

【参考方案1】:

虽然您无法向.xcassets 添加额外的插槽,但您可以在您的.storyboard 文件中实现size classes。这是为每个设备设计独特界面的简单方法。使用它,您可以为 iPhone 4 设计漂亮的界面(但是,正如您在 OP 中指出的那样,它已经过时了)。

【讨论】:

我已经使用尺寸类来实现不同的约束,具体取决于设备的类别。如果我有 5 种分辨率,则无需按比例缩小每个设备。我想我想看看如何实施该策略。【参考方案2】:

我不确定您要使用哪种图像,但猜测只是具有渐变或纯色的背景图像,我认为您可以这样做:

a) 创建一个图像集,包括最高分辨率、中间分辨率和最低分辨率,可能是这样的: 1x: 640x1136 , 2x:1242x2208 和 3x: 2048x2732

b) 然后使用此代码使用该图像集,确保图像正确调整到视图大小:

UIGraphicsBeginImageContext(self.theView.frame.size);
[[UIImage imageNamed:@"backgroundImageSet"] drawInRect:self.view.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.theView = [UIColor colorWithPatternImage:image];

希望这会有所帮助!

【讨论】:

有几件事,iphone 5/SE 是@2x 设备,所以我不明白您为什么要将分辨率添加到 1x。此外,这 5 张图像不仅限于背景图像。最后,我认为我没有提到它,但我所有的图像视图都将加载到情节提要中,图像也将加载。需要代码的例外是基于设备,我可能需要更改图像以匹配 iphone 5/SE 和较小 Ipad 的 res。我将使用 5 张图像,这样我就不需要在代码中调整它们的大小。感谢您的回复。所有的 [ ] 是什么东西是客观 c 的东西吗? 我认为你应该更清楚、更一致地解释你想要做什么。现在我不确定你想做什么,客人认为设置为 1x: 640x1136 、 2x:1242x2208 和 3x: 2048x2732 的图像从 iPhone 5 到 iPad 都可以正常工作。另一方面,我绝对不知道您的界面看起来如何,所以,这就是我所说的,如果它只是“用于背景”。你也可以只用约束来处理这个问题,如果是这样的话,它不应该有很多约束。 所以我重新阅读了我的帖子,我没有看到任何一致性问题,我想我很清楚我想要什么。我的评论不是对你的攻击。是我试图理解你的答案。话虽如此,您对图像集的推荐显然是有缺陷的。 iphone 5 永远不会提取 1x 图像,因此拥有该分辨率是没有意义的。我还看到您将 ipad pro 的分辨率设置为 3x 图像。 Ipad 是 2x,所以它永远不会使用 3x 图像。除非我在这里错了,否则我不知道您的解决方案如何回答我的问题。再次感谢您的反馈。 当然,我也不会攻击嘿嘿。但我不知道这是否属实“iPhone 5 永远不会拉出 1x 图像,因此拥有该分辨率没有意义”但也许你是对的。在这里我找到了一篇不错的文章,也许对你有帮助:krakendev.io/blog/…。希望你能找到答案! 我必须通读那篇文章,谢谢你的链接。我相信这是真的。我相信每个设备都会根据设备的类型从 1x、2x、3x 中提取。您可以通过创建不同颜色的图像来测试这一点,并使用不同的设备运行模拟器以查看它实际使用的内容。

以上是关于如何实现不同分辨率的图像的主要内容,如果未能解决你的问题,请参考以下文章

如何实现Android手机摄像头的自动对焦

iOS App Thinning - 如何根据屏幕尺寸实现它?

如何通过css实现不同分辨率的手机适配

不同的输入图像大小/分辨率如何影响语义图像分割网络的输出质量?

为不同的设备/分辨率使用不同的图像,例如如何使用波浪号 (~) 来区分 iPhone 和 iPad?

如何使用 Camera.takePicture() 拍摄高分辨率图像?