目标C:如何修复图像的宽高比(而不是更改为适合图像视图帧)

时间:2011-07-13 05:42:30

标签: objective-c ios uiimagepickercontroller aspect-ratio

我正在使用UIImagePickerController为我的应用选择图像。但是,我在维护所选图像的纵横比方面面临一些挑战

例如,

我手机上的原始图像如下(非方形图像):

enter image description here

通过“移动和缩放”页面在iphone上选择图像以裁剪图像后,结果如下:(此处仍保持宽高比)

enter image description here

我的应用程序将在带有方框(200 x 200)的UIImageView中显示所选图像。将所选图像设置为UIImageView(UIImageView.image = selectedImage)后,图像的宽高比不会被维护,而是跟随UIImageView的框架:(图像看起来在我的UIImageView中看起来有偏差):

enter image description here

在这种情况下,有没有办法保持图像的宽高比?

编辑:更新预期结果

经过一番思考,我意识到解决我的问题的最好方法是确保对于这样的图像(非正方形),我需要将它们“转换”成方形图像,即填充图像顶部和底部的空白区域制作一个正方形,例如

预期图片:(添加了顶部和底部边框)

enter image description here

编辑:使用示例代码进行更新

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editInfo 
{

    self.imageView.contentMode = UIViewContentModeScaleAspectFill;

    self.imageView.image = image;
    [[picker parentViewController] dismissModalViewControllerAnimated:YES];

    //Compress image
    UIImage *image = [self scaleImage:img toSize:CGSizeMake(612.0,612.0)];

    self.imageData = UIImageJPEGRepresentation(image, 0.75);
}

通过添加代码“self.imageView.contentMode = UIViewContentModeScaleAspectFill;”,我能够在uiimageview中获取方形图像

enter image description here

但似乎原始图像仍然不是方形图像,因此当我执行“UIImage * image = [self scaleImage:img toSize:CGSizeMake(612.0,612.0)];”时,仍会出现偏斜问题。我的假设是否正确?无论如何要缓解这个问题,因为我仍然需要在应用程序的其他地方显示“压缩”图像。

3 个答案:

答案 0 :(得分:37)

执行myImageView.contentMode = UIViewContentModeScaleAspectFit;是不够的,因为它以Zhen想要的方式改变了图像的宽高比,但它不会改变源图像,这是Zhen所需要的。唯一的方法是使用UIGraphicsImageContext,如下所述: Resize UIImage with aspect ratio?

答案 1 :(得分:23)

您应该调整UIImageView的内容模式:

myImageView.contentMode = UIViewContentModeScaleAspectFit;

只是为了解决问题 - 检查UIViewContentMode常量的文档。

答案 2 :(得分:7)

您可以在contentMode个实例上设置UIImageView属性,例如:

myImageView.contentMode = UIViewContentModeScaleAspectFit;

这会强制它在缩放时保留图像的宽高比。如reference documentation中所述,您可以在此处设置许多其他值以产生其他行为。