UIImagePicker选择的图片尺寸比原图大。

3

工作区

我在模拟器中有一张大小为53kb的图像(.JPG格式)。

现在我正在使用UIImagePickerController选择此图像并将其保存到本地。

选择图像并将其存储到本地的代码如下:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
[[UIApplication sharedApplication] setStatusBarHidden:YES];

NSString *mediaType = info[UIImagePickerControllerMediaType];

if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
    // Media is an image
    
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
    if (image) {
        NSData *jpegData = UIImageJPEGRepresentation(image, 1);

    // Store image.
        BOOL isImageSave = [jpegData writeToFile:filePath atomically:NO];

        if (isImageSave) {
            DLog(@"Image saved");
        } else {
            DLog(@"Error");
        }
    }
}
[self.view dismissViewControllerAnimated:YES completion:nil];

问题:

这里原始图像的大小为53kb,但当我选择此图像时,图像大小会增加,存储的图像大小为142kb。在这里,我使用压缩来减小大小。但我检查了两次,在UIImagePickerController委托方法中它返回更大尺寸的图像。

有人知道为什么会选择更大的图像吗?有没有办法按大小获取原始大小的图像?

2个回答

1
您可以使用以下代码将图像视图调整大小到特定框架。
- (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 *myIcon = [self imageWithImage:myUIImageInstance scaledToSize:CGSizeMake(20, 20)];

就图像存储而言,与iPhone一起使用的最快图像格式是PNG,因为它对该格式进行了优化。但是,如果您想将这些图像存储为JPEG,则可以采取UIImage并执行以下操作:

NSData *dataForJPEGFile = UIImageJPEGRepresentation(theImage, 0.6);

是的,它可以工作。我们必须减小比例以减小尺寸。谢谢 :) - Kampai

0
你正在使用JPEG编码质量为1,相当于100%的质量。尝试在执行JPEG编码时使用0.2-0.8的设置,并检查文件大小。

是的,我使用了0.1的压缩比。这实际上将文件大小从142kb减小到了79kb。但是它仍然比原始大小大:(。我需要将文件发送到服务器,而服务器只允许小于50kb的大小。 - Kampai
尝试使用0.01或0来调整质量。 - Joshua Sullivan

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