我想调整UIImage的大小,所以我使用下面的代码。
UIGraphicsBeginImageContext(size);
[sourceImage drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage *destImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
上面的代码工作正常,但destImage的方向已改变。我不知道怎么回事。
source.imageOrientation = 3
destImage.imageOrientation = 0
任何人都可以告诉我如何调整与sourceImage方向相同的图像吗?
编辑:
UIImage *scaleImage = [UIImage imageWithCGImage:destImage.CGImage
scale:sourceImage.scale orientation:sourceImage.imageOrientation];
编辑:
我也试过上面的代码。但它仍然给我相反的方向。
答案 0 :(得分:1)
无需为目标图像设置orientationMode
。 orientationMode
表示在绘制图像时如何旋转图像。也就是说,UIImage
包含原始的,未旋转的数据(通常为CGImage
格式)和orientationMode
属性。在绘制UIImage
时(例如将其添加到UIImageView
时),它会根据需要旋转它。
您的代码也在绘制图像,因此会将其旋转:
[sourceImage drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage *destImage = UIGraphicsGetImageFromCurrentImageContext();
destImage
将包含已轮换的原始数据,orientationMode
UIImageOrientationUp
。最终结果是,绘制destImage
将产生与sourceImage
具有相同方向的相同图像。
唯一的区别在于您实际使用每个CGImage
原始数据(因此忽略orientationMode
属性),然后目标图像将是源的旋转版本。如果您打算使用CGImage
,那么最好使用CGImage
级操作来调整图片大小(例如,这来自http://fingertwister.tumblr.com/post/9074775714/code-to-create-a-resized-cgimage-from-a-cgimage,我没有验证它):
+ (CGImageRef)resizeCGImage:(CGImageRef)image toWidth:(int)width andHeight:(int)height {
// create context, keeping original image properties
CGColorSpaceRef colorspace = CGImageGetColorSpace(image);
CGContextRef context = CGBitmapContextCreate(NULL, width, height,
CGImageGetBitsPerComponent(image),
CGImageGetBytesPerRow(image),
colorspace,
CGImageGetAlphaInfo(image));
CGColorSpaceRelease(colorspace);
if(context == NULL)
return nil;
// draw image to context (resizing it)
CGContextDrawImage(context, CGRectMake(0, 0, width, height), image);
// extract resulting image from context
CGImageRef imgRef = CGBitmapContextCreateImage(context);
CGContextRelease(context);
return imgRef;
}
答案 1 :(得分:0)
调整imageView的大小
CALayer *layer;
layer=self.view.layer;
UIGraphicsBeginImageContext(self.view.bounds.size);
CGContextClipToRect (UIGraphicsGetCurrentContext(),captureFrame); //Give your frame of image here(x,y,width,height)
[layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
还可以尝试以下代码
UIGraphicsBeginImageContext(self.frame.size);
[drawImage.image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 3.0);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0.0, 0.0, 0.0, 1.0);
CGContextStrokePath(UIGraphicsGetCurrentContext());
CGContextFlush(UIGraphicsGetCurrentContext());
drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();