上传图片问题(UIImageJPEGRepresentation vs UIImagePNGRepresentation)

时间:2009-01-30 10:40:21

标签: cocoa-touch ios-simulator

我已经使用Safari的“保存+保存图像”选项将一些图片存储到我的照片库模拟器中。当我从库中选择图像时,我必须将其转换为JPEG或PNG,以便将其上传到服务器。问题是原始图像的大小约为200 KB,但转换为PNG后的图像大约为2 MB。我正在使用UIImagePNGRepresentationUIImage对象转换为NSData,然后发布图片。

  1. 我在这里缺少什么?为什么图片的大小会比原始大小大?我该如何防止这种情况?

  2. UIImageJPEGRepresentationUIImagePNGRepresentation之间的区别是什么?应该使用哪一种(推荐)?

  3. 我可以确定从照片库加载的图像类型吗?

  4. iPhone相机拍摄的默认图像类型是什么?

2 个答案:

答案 0 :(得分:10)

我猜测原始图像存储为JPEG格式。

PNG用于存储屏幕截图和线条图等内容。它不是为存储照片等内容而设计的。

这一切都归结为所使用的压缩类型,PNG使用无损压缩,因此图像将与原始图像完全相同。 JPEG使用有损压缩,生成的图像是原始图像的近似值。

如果您使用有损JPEG并将其另存为PNG,那么它的大小会增加,通常会增加很多,如您所见。

问题的解决方案是在上传图像之前不对图像执行任何操作。它们已经是PNG,GIF或JPEG图像。这就是你应该上传的内容。

iPhone相机保存的图像格式为JPEG。

听起来您可能需要在PNGJPEG上进行一些阅读。

答案 1 :(得分:1)

关于第三点,您可以在图像选择器委托方法中确定从库加载的图像类型,如下所示:

- (void)imagePickerController:(UIImagePickerController *)picker 
didFinishPickingMediaWithInfo:(NSDictionary *)info {

    // Get the image reference URL
    NSURL *referenceURL = [info objectForKey:UIImagePickerControllerReferenceURL];

    // The path extension contains the image type: JPG, PNG, GIF, etc.
    NSString *originalImageType = referenceURL.pathExtension; 

}