如何在iPhone上压缩图片?

4

我正在从照片库中获取图片。我有4-5兆字节的大图像,但我想压缩这些图像。因为我需要将这些图像存储在iPhone的本地内存中,为了使用更少的内存或获得更少的内存警告,我需要压缩这些图像。

我不知道如何压缩图像和视频。所以我想知道如何压缩图像?

    UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

    NSData* data = UIImageJPEGRepresentation(image,1.0);
    NSLog(@"found an image");

    NSString *path = [destinationPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.jpeg", name]];
    [data writeToFile:path atomically:YES]; 

这是保存我的图像的代码。我不想存储整个图像,因为它太大了。所以,我想将其压缩到更小的尺寸,因为我需要附加多个图像。谢谢回复。

1
压缩图像不能帮助您解决内存错误。您可以压缩图像以节省磁盘空间(闪存RAM),但如果要显示图像,则始终会在内存中解压缩图像,使用widthheight4 RAM。 - Bastian
3个回答

13

你可以选择更低的JPEG编码质量。

NSData* data = UIImageJPEGRepresentation(image, 0.8);

类似0.8这样的数值不应该太明显,确实可以大幅改善文件大小。

除此之外,在生成JPEG图像之前,可以使用像这样的方法调整图像大小:

+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
    UIGraphicsBeginImageContext(newSize);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();    
    UIGraphicsEndImageContext();
    return newImage;
}

来源: 如何最简单地调整UIImage的大小?


我认为你提到的关于调整大小的第二点非常重要,根据情况,它可以在不牺牲质量的情况下大幅减小文件大小。特别是当你检测到图像的尺寸比屏幕可视范围大时。非常好的回答。 - Usman Mutawakil

5

UIImageJPEGRepresentation(UIImage, Quality);

Quality参数中,1.0表示最高质量,0表示最低质量。

所以,将下面这行代码中的quality参数改变,可以减小图像文件的大小。

NSData* data = UIImageJPEGRepresentation(image,1.0);

1
NSData *UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality);

或者

NSData *image_Data=UIImageJPEGRepresentation(image_Name,compressionQuality);

将图像返回为JPEG格式。如果图像没有CGImageRef或者位图格式无效,则可能返回nil。compressionQuality的值范围为0(最高)至1(最低)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接