如何在没有像素失真的情况下在iOS中创建小图像



我正在开发一个完全依赖于图像的应用程序。我有320*480的图像现在我想要768*1024的图像。我可以通过UI设计器获得它,然后放到我的bundle中但我的应用是通用应用所以我需要为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组图片:

  1. iPhone 3.5" non-retina
  2. iPhone 3.5" retina
  3. iPhone 4"retina"
  4. iPad non-retina
  5. iPad视网膜

那么你有几个选择:

  1. 制作两个app。一个用于iphone和iPod touch,一个用于ipad。
  2. 只发布一小部分图片。当应用程序第一次运行时,应用程序只能下载当前设备所需的图像。
  3. 只包含最大的图片。由于应用程序需要每个图像,它可以创建一个适当大小的图像版本并使用它。每张图像只需要进行一次转换。缩小图片比放大效果更好。

您可以通过编程方式调整图像大小,但它们看起来不太好。我不太担心包的大小。只要在所有设备上设置原生分辨率的图像,忘记调整大小。

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

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

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

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

最新更新