如何从uiimageview获取uiimage,它具有填充选项集的比例

时间:2012-07-02 09:43:36

标签: iphone objective-c uiimageview uiimage

我用手机拍照(640 * 480)并将其放在uiimageview (300*300)内,并带有刻度以填充选项集。 我需要将uiimageview (300*300, croped, resized)内显示的相同图像发送到服务器....

我怎么能得到它?

2 个答案:

答案 0 :(得分:3)

通过将UIImageView图层渲染到图形上下文,有一种快速的方法可以做到这一点。

UIGraphicsBeginImageContext(self.bounds.size);
[self.imageView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

您需要为此导入<QuartzCore/QuartzCore.h>

另一种方法是对AspectFill进行自我计算。

 CGSize finalImageSize = CGSizeMake(300,300);
 CGImageRef sourceImageRef = yourImage.CGImage;

CGFloat horizontalRatio = finalImageSize.width / CGImageGetWidth(sourceImageRef);
CGFloat verticalRatio = finalImageSize.height / CGImageGetHeight(sourceImageRef);
CGFloat ratio = MAX(horizontalRatio, verticalRatio); //AspectFill
CGSize aspectFillSize = CGSizeMake(CGImageGetWidth(sourceImageRef) * ratio, CGImageGetHeight(sourceImageRef) * ratio);


CGContextRef context = CGBitmapContextCreate(NULL,
                                             finalImageSize.width,
                                             finalImageSize.height,
                                             CGImageGetBitsPerComponent(sourceImageRef),
                                             0,
                                             CGImageGetColorSpace(sourceImageRef),
                                             CGImageGetBitmapInfo(sourceImageRef));

//Draw our image centered vertically and horizontally in our context.
CGContextDrawImage(context, 
                   CGRectMake((finalImageSize.width-aspectFillSize.width)/2,
                              (finalImageSize.height-aspectFillSize.height)/2,
                              aspectFillSize.width,
                              aspectFillSize.height),
                   sourceImageRef);

//Start cleaning up..
CGImageRelease(sourceImageRef);

CGImageRef finalImageRef = CGBitmapContextCreateImage(context);
UIImage *finalImage = [UIImage imageWithCGImage:finalImageRef];

CGContextRelease(context);
CGImageRelease(finalImageRef);
return finalImage;

答案 1 :(得分:0)

来自文档:

  

UIViewContentModeScaleToFill

     

通过更改方面来缩放内容以适合自身的大小   必要时的比例。

你可以做数学。或者,如果你感觉特别懒,那就有this黑客攻击方式。