object-c 的方式:
方式1
CGFloat scale = [UIScreen mainScreen].scale;
CGRect rectFrame = CGRectMake(frameFromRect.origin.x * scale, frameFromRect.origin.y * scale, frameFromRect.size.width * scale, frameFromRect.size.height * scale);
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], rectFrame);
UIImage * croppedImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
readingView.image = croppedImage;```
方式2
/**
*從圖片中按指定的位置大小截取圖片的一部分
UIImage image 原始的圖片
-
CGRect rect 要截取的區(qū)域
*/
+(UIImage *)imageFromImage:(UIImage *)image inRect:(CGRect)rect{//將UIImage轉(zhuǎn)換成CGImageRef
CGImageRef sourceImageRef = [image CGImage];//按照給定的矩形區(qū)域進(jìn)行剪裁
CGImageRef newImageRef = CGImageCreateWithImageInRect(sourceImageRef, rect);//將CGImageRef轉(zhuǎn)換成UIImage
UIImage *newImage = [UIImage imageWithCGImage:newImageRef];CGImageRelease(newImageRef);
//返回剪裁后的圖片
return newImage;
}
swift 的方式: (直接剪切不慣病莱坎,直接剪切沒(méi)毛餐堋)
let screenScale = UIScreen.main.scale
let index = newView!.superview!.subviews.index(of: newView!)!
let subImageFrame = CGRect.init(x: frames[index].origin.xscreenScale, y: frames[index].origin.yscreenScale, width: frames[index].size.widthscreenScale, height: frames[index].size.heightscreenScale)
///核心代碼就一句
let subImage = UIImage.init(cgImage:self.backImage!.cgImage!.cropping(to: subImageFrame)!)
newView?.image = subImage```