对UIImage进行剪裁

网上的:

+(UIImage *)imageFromImage:(UIImage *)image inRect:(CGRect)rect{
    
    //将UIImage转换成CGImageRef
    CGImageRef sourceImageRef = [image CGImage];
    
    //按照给定的矩形区域进行剪裁
    CGImageRef newImageRef = CGImageCreateWithImageInRect(sourceImageRef, rect);
    
    //将CGImageRef转换成UIImage
    UIImage *newImage = [UIImage imageWithCGImage:newImageRef];
    
    //返回剪裁后的图片
    return newImage;
}

上面的代码,在截图时候,问题很大,由于scale转换问题,截出来的图大小不正常,
修改过后的:

- (UIImage *)imageFromImage:(UIImage *)image inRect:(CGRect)rect{
    //将UIImage转换成CGImageRef
    CGImageRef sourceImageRef = [image CGImage];
   //坐标由于有scale,直接剪裁会偏小,这里需要将剪裁尺寸增大
    rect = CGRectMake(rect.origin.x*[[UIScreen mainScreen] scale], rect.origin.y*[[UIScreen mainScreen] scale], rect.size.width*[[UIScreen mainScreen] scale], rect.size.height*[[UIScreen mainScreen] scale]);
     //按照给定的矩形区域进行剪裁
    CGImageRef newImageRef = CGImageCreateWithImageInRect(sourceImageRef, rect);
    //将CGImageRef转换成UIImage,这里需要根据scale进行转换
    UIImage *newImage = [UIImage imageWithCGImage:newImageRef scale:[[UIScreen mainScreen] scale] orientation:UIImageOrientationUp];
    //返回剪裁后的图片
    return newImage;
}

其实应该可以根据CGImageRef的尺寸进行裁,但是还是要进行坐标转换.......

你可能感兴趣的:(对UIImage进行剪裁)