【发布时间】:2014-07-09 06:38:09
【问题描述】:
我使用以下代码来扩展我的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;
然后我拍照并在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;
}
到目前为止一切都很好。然后我通过将图像转换为NSData 将图像发送到我的数据库
_imageData = [[NSData alloc] init];
_imageData = UIImageJPEGRepresentation(_image, .1);
当我从服务器加载数据并以另一个相同大小的UIImageView 呈现时,我确实设置了相同的纵横比:
[_imageViewToShow setContentMode:UIViewContentModeScaleAspectFill];
但图像看起来失真(水平挤压)。关于为什么会这样的任何想法?
将 UIImage 转换为 NSData 并保存
_imageData = UIImageJPEGRepresentation(_image, .1);
PFFile *imageFile = [PFFile fileWithName:@"image.png" data:_imageData];
newMessage[@"image"] = imageFile;
问题:
当我重新下载数据时,UIImage 似乎被压扁了。当我查看数据库中的图像时,它似乎很好。不知道为什么会这样……
前后对比图:
【问题讨论】:
-
您是否在图像视图上设置转换?标题提到了它,但示例代码只显示了图像选择器上的转换。
-
@Austin 我正在图像选择器上设置转换。对不起
-
您的服务器是否正确保存了所有 JPEG 的元数据?听起来
imageOrientation属性没有被存储,或者图像的高度/宽度被交换了。 -
@Austin 我认为这很有可能,因为我现在正在查看服务器上的图像。我将如何旋转它们/为什么你认为高度/宽度被交换了?
-
我不知道为什么他们不会得救。我只知道
UIImageJPEGRepresentation()将旋转存储为元数据,而不是旋转图像数据本身。
标签: ios objective-c uiimageview uiimage