iOS开发 关于照片截取内容旋转的问题

在iOS开发中,对相机拍摄照片进行截取时,有时会出现截取部分与指定区域不符的情况,原因是图片方向问题。解决方法是先处理图片的朝向,再进行截取操作。这里提供了一种图片截取的方法和一个开源控件PEPhotoCropEditor,以供参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在iOS开发中,遇到一个比较怪的问题,对读取出来的照片进行截取部分时。

使用的截取方法是比较常见的:

CGImageRef imageRef=CGImageCreateWithImageInRect([image CGImage],rect);
    UIImage *newImage=[UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);

但是实际使用中,发现在截取相机拍摄的图片时,有时候截取的部分不是我们所指定的区域,截取出来的部分似乎是图片被旋转后再截取出来的。

这个问题比较奇怪,通过仔细的对比排查,我发现原来图片其实有一个一直以来基本被忽略的属性:

@property(nonatomic,readonly) UIImageOrientation imageOrientation;
这个属性标记了图片的方向,而在实际使用时,通常我们使用UIImageView做图片显示时,并不用关心这个图片的方向,因为UIImageView继承自UIView的属性:

@property(nonatomic) CGAffineTransform transform;   
能够自动的按照图片的朝向进行显示。

那么当我们在自己做想要的照片部分截取时,就需要对照片的朝向事先做好处理。才能避免出现截取区域不是我们想要的区域问题。

我处理了一个图片截取方法,供大家参考:

+(UIImage*)imageFromImage:(UIImage*)image inRect:(CGRect)rect transform:(CGAffineTransform)transform{
    CGSize newSize=rect.size;
    UIGraphicsBeginImageContext(newSize);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextTranslateCTM(context, newSize.width / 2, newSize.height / 2);
    CGContextConcatCTM(context, transform);
    CGContextTranslateCTM(context, newSize.width / -2, newSize.height / -2);
    [image drawInRect:CGRectMake(-rect.origin.x, -rect.origin.y, image.size.width, image.size.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

其中的rect是相对与图片的像素尺寸(注意,不是iOS默认的点尺寸)。

其中的transform是在正常显示原图的ImageView的transform属性。比如orginImageView.transform。

好了这个分享出来,希望对大家有所帮助。


最后给出对一个照片截取的开源控件:PEPhotoCropEditor,做的比较好,大家可以去参考研究下。


转载请注明出处:来自月若无涯的博客:http://blog.youkuaiyun.com/u010124617/article/details/9952275  欢迎指正




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值