【问题标题】:Image gets stretched when captured拍摄时图像被拉伸
【发布时间】:2013-05-28 12:17:33
【问题描述】:

我有一个UIImageView,大小为(144,130),捕获后得到的图像大小为(720,960)

我已经调整了图片大小

UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

这里的新尺寸是(144,130),因为它是imageviews 尺寸。即使图像被拉伸。

我应该进行哪些更改以使图像不会被拉伸?

EDIT-1

UIImage *imageCapture = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
UIImage *finalImage = [self imageByScalingAndCroppingForSize:(imageview.frame.size)];

根据link中的答案

EDIT-2

捕获的图像大小为:{720, 960}

imageview.frame.size : {144, 130}

newSize : {97.5, 130}

【问题讨论】:

    标签: ios objective-c uiimage


    【解决方案1】:

    调整大小时,您必须保持纵横比。只需将视图的纵横比与实际图像匹配,就不会出现任何拉伸图像...

    this 可能对你有用

    【讨论】:

    • 你的速度更快 :D +1 :)
    • 根据链接中给出的答案,它给出了 aspectFit 效果。图像在 imageview 的侧边缘切割
    • 有了这个,你可以在保持纵横比的情况下调整大小:stackoverflow.com/questions/1703100/…
    【解决方案2】:

    你已经设置了 Imageview 属性

    imageView.contentMode=UIViewContentModeScaleAspectFit;
    

    如果您使用的是 nib,则在 View section-> Mode -> Aspect Fit 中设置 imageview 属性

    无需调整图像大小。它对我有用。

    虽然你想调整图像的大小,但你可以在 UIImage 类别中拥有以下图像

    - (UIImage *) scaleProportionalToSize: (CGSize)size
    {
        float widthRatio = size.width/self.size.width;
        float heightRatio = size.height/self.size.height;
    
        if(widthRatio > heightRatio)
        {
            size=CGSizeMake(self.size.width*heightRatio,self.size.height*heightRatio);
        } else {
            size=CGSizeMake(self.size.width*widthRatio,self.size.height*widthRatio);
        }
    
        return [self scaledToSize:size];
    }
    
    - (UIImage *)scaledToSize:(CGSize)newSize
    {
        UIGraphicsBeginImageContext(newSize);
        [self drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        //[newImage autorelease];
        return newImage;
    }
    

    当您将图像大小调整为 newSize 时,您必须考虑到,如果您将宽度调整为假设 10%,那么您必须仅将高度调整为 10%。

    【讨论】:

    • 在 drawInRect 之后,aspect-fit 不会产生任何影响,因为图像已经用新的尺寸重新渲染了。
    • 使用您的代码,我也将图像置于中心(未拉伸)但侧边被切割。我的 Imageview 大小有什么问题吗?
    • 当您提供 size 到 scaleProportionalToSize 方法时,提供 imageview 的宽度和高度(边界),它将显示所需的图像。
    • 是的,我这样做了,但仍然出现同样的问题。请检查编辑
    • 好的,请您提供原始图像。这样我就可以检查出来了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多