解码iOS base64图像

时间:2013-10-16 21:55:18

标签: ios base64 uiimagepickercontroller decode encode

我一直在解码编码图像时遇到问题。

我使用以下代码对从UIImagePickerController返回的图像进行编码:

NSData *imageData2 = UIImageJPEGRepresentation(image, 1.0);
    NSString *encodedString = [imageData2 base64Encoding];

我尝试将图像尺寸调整为600x600,我也尝试压缩图像。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    UIImage *image = [self imageWithImage:[info objectForKey:UIImagePickerControllerEditedImage] scaledToSize:CGSizeMake(600, 600)];

    imgPreviewSelected.image = [self imageWithImage:image scaledToSize:CGSizeMake(600, 600)];

    CGFloat compression = 0.9f;
    CGFloat maxCompression = 0.1f;
    int maxFileSize = 250*1024;

    NSData *imageData = UIImageJPEGRepresentation(image, compression);

    while ([imageData length] > maxFileSize && compression > maxCompression)
    {
        compression -= 0.1;
        imageData = UIImageJPEGRepresentation(image, compression);
    }

    image = [UIImage imageWithData:imageData];

    imagePickerReturnedImage = image;

    NSData *imageData2 = UIImageJPEGRepresentation(image, 1.0);
    NSString *encodedString = [imageData2 base64Encoding];

    [utils postData:@"example.com" : [NSString stringWithFormat:@"image=%@", encodedString]];

    [self dismissViewControllerAnimated:YES completion:NULL];
}

当我尝试解码发送到我的数据库的图像时,它告诉我该文件已损坏。

我尝试用PHP和以下网站解码它: http://www.motobit.com/util/base64-decoder-encoder.asp

我的MYSQL数据库告诉我图像是1MB,我认为对于600x600的图像来说这是非常大的。没有压缩,它是1,3MB。

我使用此方法缩放图像:

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

我希望有人可以帮助我,谢谢

2 个答案:

答案 0 :(得分:0)

我在没有base64的情况下使用了另一种方式,因此无需回答。

答案 1 :(得分:0)

您的代码看起来正确。 您是否尝试将base64string复制到该网站进行解码?

你可以通过

检查图像大小
NSLog(@"dataSize: %@",[NSByteCountFormatter stringFromByteCount:data.length countStyle:NSByteCountFormatterCountStyleFile]);