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

时间:2013-03-23 13:58:54

标签: iphone ios objective-c ipad retina-display

我正在开发一款完全依赖图片的应用。我有320 * 480的图像现在我想要那些尺寸为768 * 1024的相同图像。我可以通过UI设计师获得它并放置在我的包中,但我的应用程序是针对通用应用程序,所以我需要为iPhone视网膜,iPad,iPad视网膜包含相同的图像。如果我使用多个图像,我的IPA大小会增加(例如:如果我再次添加768 * 1024,我的IPA大小将增加到至少200KB,那么320 * 480现在有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设计器获取所有图像。如果我们有正常的图像,我们可以为视网膜显示创建相同的图像吗?

有更好的解决方案吗?

3 个答案:

答案 0 :(得分:4)

无法在没有失真或像素化的情况下从较小的图像创建较大的图像。没有办法神奇地填写额外的细节。

现实世界并不像电视或电影一样,人们可以放大图像并神奇地获得大量细节。 :)

如果您为以下内容添加了5组图片时感觉自己的应用程序太大了:

  1. iPhone 3.5“非视网膜
  2. iPhone 3.5“retina
  3. iPhone 4“retina
  4. iPad非视网膜
  5. iPad retina
  6. 然后你有几个选择:

    1. 制作两个应用。一个用于iPhone和iPod触摸,一个用于iPad。
    2. 仅使用一小部分图片发送您的应用。然后,当应用程序第一次运行时,应用程序只能下载当前设备所需的图像。
    3. 仅包含最大的图像。由于应用程序需要每个图像,它可以创建适当大小的图像版本并使用它。每个图像只需要进行一次转换。缩小图像可以获得比尝试升级更好的结果。

答案 1 :(得分:0)

您可以通过编程方式调整图像大小,但效果不佳。关于捆绑尺寸,我不会太担心。只需为所有设备添加原始分辨率图像,忘记调整大小。

答案 2 :(得分:0)

如果需要,您可以从大图像裁剪和缩放 down ,但如果您正在按比例放大,则会有质量损失,因为该文件不包含所有这些像素的足够信息。我建议:

1)最简单的方法是制作一堆不同版本的图像。 (见rmaddy的回答)。

2)如果你真的不想要多张图片,请选择最大的图像并向下缩放。由于它们具有不同的纵横比,因此简单的缩放会导致一些失真;你也需要裁剪。

无论哪种方式,您都需要打开图像编辑器并制作更大的图像。