在iPhone上将相机/照片库图像文件大小缩小至不到100 KB

7

我想减小从UIImagePickerController获得的图像文件大小。我使用以下方法:

NSData *imageData = UIImageJPEGRepresentation(image, 0.1);

但这只能将2.2 MB的图像文件大小减少到300 KB,我希望我的图像文件大小小于100 KB。


请查看这个问题:https://dev59.com/SUzSa4cB1Zd3GeqPjySj - Shahin
最终我发现这个解决方案是最好的一个 https://dev59.com/knRB5IYBdhLWcg3weHLx - Poooyak
3个回答

8

苹果公司的文档中写道:

JPEG 图像的质量,表示为 0.0 到 1.0 的值。值 0.0 表示最大压缩(或最低质量),而值 1.0 表示最小压缩(或最佳质量)。

由于压缩质量是 CGFloat 类型,支持小数点后的十分位数。因此,请尝试:

NSData *imageData = UIImageJPEGRepresentation(image, 0.032);

it's not reduce than 300 kb - Poooyak

2

减小图片大小最简单的方法就是减小像素大小!将其缩小:

CGFloat scaleSize = 0.2f;
UIImage *smallImage = [UIImage imageWithCGImage:image.CGImage
                      scale:scaleSize
                      orientation:image.imageOrientation];

1
没错!一个大图像无法在JPEG格式下压缩到100K,即使使用最高的压缩级别,所以想法是先调整大小,然后再进行压缩。 - Lefteris
@Lefteris 我使用这种方法,将比例尺大小设置为5,以将图像大小减小5倍,然后使用先前的方法,但文件大小没有改变。 - Poooyak
比例尺为1(一)表示与原始图像大小相同。您应该使用小于1的值,而不是更大的值。 - JOM
该方法返回完全相同的图像,但具有不同的密度,保持相同的文件大小。 - Christian

1
首先使用以下方法调整图像大小:

- (UIImage *)resizeImage:(UIImage*)image newSize:(CGSize)newSize {
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

通过以下方式调用:

UIImage *newImage=yourImage;
CGSize size=CGSizeMake(newImage.size.width/8,newImage.size.height/8);
newImage=[self resizeImage:newImage newSize:size];

最终按要求压缩了您的图像:

NSData *imageData = UIImageJPEGRepresentation(newImage, 0.5);
NSLog(@"Size of image = %lu KB",(imageData.length/1024));

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