1

我正在开发一个完全依赖图像的应用程序。我有像 320*480 这样的图像,现在我想要那些尺寸为 768*1024 的相同图像。我可以通过 UI 设计师获得它并放在我的包中,但我的应用程序是通用应用程序,所以我需要为 iPhone Retina、iPad、iPad Retina 包含相同的图像。如果我使用多个图像,我的 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 设计师那里获取所有图像。如果我们有正常的图像,我们可以为视网膜显示创建相同的图像吗?

有更好的解决方案吗?

4

3 回答 3

4

不可能从没有失真或像素化的较小图像创建更大的图像。没有办法神奇地填写额外的细节。

现实世界不像电视或电影那样人们放大图像并神奇地获得很多细节。:)

如果您在包含 5 组图像时觉得您的应用太大:

  1. iPhone 3.5" 非视网膜
  2. iPhone 3.5" 视网膜
  3. iPhone 4" 视网膜
  4. iPad 非视网膜
  5. iPad视网膜

那么你有几个选择:

  1. 制作两个应用程序。一款用于 iPhone 和 iPod touch,一款用于 iPad。
  2. 仅使用一小部分图像来发布您的应用程序。然后当应用程序第一次运行时,应用程序只能下载当前设备所需的图像。
  3. 仅包括最大的图像。由于应用程序需要每个图像,它可以创建适当大小的图像版本并使用它。每次转换只需要对每个图像进行一次。缩小图像尺寸比尝试放大图像效果要好得多。
于 2013-03-23T15:37:52.567 回答
0

您可以以编程方式调整图像大小,但它们看起来不太好。我不会太担心捆绑包的大小。只需为所有设备放置原始分辨率图像,而无需调整大小。

于 2013-03-23T14:04:27.940 回答
0

如果你愿意,你可以从大图像中裁剪和缩小但如果你放大,就会有质量损失,因为文件不包含所有这些像素的足够信息。我会建议:

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

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

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

于 2013-03-23T16:26:08.210 回答