iphone - 当我们在iOS中没有像素失真的小图像时,如何创建大图像?

标签 iphone ios objective-c ipad retina-display

我正在开发一个完全依赖于图像的应用程序。我有320 * 480之类的图像,现在我想要那些具有768 * 1024尺寸的图像。我可以通过UI设计师获得它并放在我的捆绑包中,但是我的应用程序适用于通用应用程序,因此我需要为iPhone视网膜,iPad,iPad视网膜包含相同的图像。如果我使用多张图像,我的IPA大小会增加(例如:如果320 * 480的图像现在有200KB,如果我再次添加768 * 1024,则我的IPA大小将至少增加到200KB)。

想法:我仅放置320 * 480张图像,并计划以编程方式创建768 * 1024张图像,这意味着我捆绑中仅使用一组图像。

已完成的工作:通过查看一些博客,我发现使用以下代码可以创建所需的图像大小。

- (UIImage *)scale:(UIImage *)image toSize:(CGSize)size
{
    UIGraphicsBeginImageContext(size);
    [image drawInRect:CGRectMake(0, 0, size.width, size.height)];
    UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return scaledImage;
}


UIImage *smallImage=[UIImage imageNamed:@"1.png"];
    UIImage *bigImage=[self scale:smallImage  toSize:CGSizeMake(768, 1024)];
    [UIImageJPEGRepresentation(bigImage,2.0) writeToFile:[[self applicationDocumentsDirectory]stringByAppendingPathComponent:@"upload.png"]  atomically:YES];

问题:上面的代码很酷,可以得到期望的图像大小,但是唯一的问题是我在最终图像上出现像素失真。

问题:
是否有任何好的或有效的解决方案来获取不同尺寸的图像,而不会从小图像中获取失真图像,或者我需要从UI设计器中获取所有图像。如果我们有正常的图像,我们可以为视网膜显示创建相同的图像吗?

有更好的解决方案吗?

最佳答案

无法从较小的图像创建较大的图像而没有失真或像素化。没有办法神奇地填写其他细节。

现实世界无法像电视或电影那样工作,因为人们会放大图像并神奇地获得很多细节。 :)

当您为以下内容添加5组图像时,如果您的应用程序过大:

  • iPhone 3.5英寸非视网膜
  • iPhone 3.5英寸视网膜
  • iPhone 4“视网膜
  • iPad非视网膜
  • iPad视网膜

  • 那么您有几种选择:
  • 制作两个应用程序。一种用于iPhone和iPod touch,另一种用于iPad。
  • 仅在应用程序中附带一小部分图像。然后,当应用程序第一次运行时,该应用程序只能下载当前设备所需的图像。
  • 仅包含最大的图像。当应用程序需要每个图像时,它可以创建适当大小的图像版本并使用该版本。每个转换只需要对每个图像执行一次。缩小图像比尝试放大图像可获得更好的效果。
  • 关于iphone - 当我们在iOS中没有像素失真的小图像时,如何创建大图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15587608/

    相关文章:

    iOS JSON 解析,数组与多个数组

    objective-c - 从 UIWebView 抓取 POST 数据

    ios - 通过任何设备上的链接安装 ios 应用程序(不知道设备的 udid)?

    ios - UITableViewCell 不显示 subview

    ios - Xcode 7 Playground 错误 : invalid context 0x0

    iOS自定义键盘模板背景颜色为图像

    iphone - 如何将裸 CALayer 作为 "subview"添加到 UIView?

    iphone - 什么是私有(private)框架以及我们将如何使用它们?

    ios - bolt 异步框架方法无法识别

    ios - 快速创建参数化字符串或宏?