使用UIIImagePicker的CGAffineTransform缩放UIImage并保存到Parse SDK

Apo*_*llo 4 objective-c uiimageview uiimage ios

我使用以下代码来扩展我的UIImagePickerController.

    CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 71.0); //This slots the preview exactly in the middle of the screen by moving it down 71 points
    self.imagePicker.cameraViewTransform = translate;
    CGAffineTransform scale = CGAffineTransformScale(translate, 1.333333, 1.333333);
    self.imagePicker.cameraViewTransform = scale;
Run Code Online (Sandbox Code Playgroud)

然后我把照片呈现出来 UIImageView

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

    [picker dismissViewControllerAnimated:NO completion:NULL];

    _imageTaken = nil;
    _imageTaken = [info objectForKey:UIImagePickerControllerEditedImage];
    if(_imageTaken==nil)
    {
        _imageTaken = [info objectForKey:UIImagePickerControllerOriginalImage];
    }
    if(_imageTaken==nil)
    {
        _imageTaken = [info objectForKey:UIImagePickerControllerCropRect];
    }

    [_imageTakenView setContentMode:UIViewContentModeScaleAspectFill];

    if (_selfie) {
        UIImage * flippedImage = [UIImage imageWithCGImage:_imageTaken.CGImage scale:_imageTaken.scale orientation:UIImageOrientationLeftMirrored];
        _imageTaken = flippedImage;
    }

    _imageTakenView.image = _imageTaken;
}
Run Code Online (Sandbox Code Playgroud)

到目前为止一切都很好.然后我将图像转换为我的数据库NSData

    _imageData = [[NSData alloc] init];
    _imageData = UIImageJPEGRepresentation(_image, .1);
Run Code Online (Sandbox Code Playgroud)

当我从服务器加载数据并将其呈现UIImageView为相同大小的另一个时,我设置了相同的宽高比:

    [_imageViewToShow setContentMode:UIViewContentModeScaleAspectFill];
Run Code Online (Sandbox Code Playgroud)

但是图像看起来很紊乱(水平压扁).关于为什么会这样的任何想法?

将UIImage转换为NSData并保存

_imageData = UIImageJPEGRepresentation(_image, .1);
PFFile *imageFile = [PFFile fileWithName:@"image.png" data:_imageData];
newMessage[@"image"] = imageFile;
Run Code Online (Sandbox Code Playgroud)

问题:

当我重新下载数据时,UIImage会出现挤压.当我查看数据库中的图像时,似乎很好.不知道为什么会发生这种情况......

之前和之后的图像:

在此输入图像描述

在此输入图像描述

Jac*_*ack 5

在上传之前尝试规范化图像的方向.这样即使元数据丢失,图像也能正常工作

这是一个类别:

UIImage+OrientationFix.h

@interface UIImage (OrientationFix)

- (UIImage*)imageByNormalizingOrientation;

@end
Run Code Online (Sandbox Code Playgroud)

UIImage+OrientationFix.m

@implementation UIImage (OrientationFix)

- (UIImage*)imageByNormalizingOrientation {
    if (self.imageOrientation == UIImageOrientationUp)
        return self;

    CGSize size = self.size;
    UIGraphicsBeginImageContextWithOptions(size, NO, self.scale);
    [self drawInRect:(CGRect){{0, 0}, size}];
    UIImage* normalizedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return normalizedImage;
}

@end
Run Code Online (Sandbox Code Playgroud)

你只需要打电话:

_imageTaken = [flippedImage normalizedImage];
Run Code Online (Sandbox Code Playgroud)