加载网络的图片的时候,经常碰到后台配置的图片不规则,那么就会出现图片变形,被压缩的,这是为了美观,通常被要求截取图片的中间区域,那么办法可以如下:
-(UIImage *)ct_imageFromImage:(UIImage *)image inRect:(CGRect)rect{
CGSize size=image.size;
float a = rect.size.width/rect.size.height;
float X = 0;
float Y = 0;
float W = 0;
float H = 0;
if (size.width>size.height) {
H= size.height;
W= H*a;
Y=0;
X= (size.width - W)/2;
if ((size.width - size.height*a)/2<0) {
W = size.width;
H = size.width/a;
Y= (size.height-H)/2;
X=0;
}
}else{
W= size.width;
H= W/a;
X=0;
Y= (size.height - H)/2;
if ((size.height - size.width/a)/2<0) {
H= size.height;
W = size.height*a;
X= (size.width-W)/2;
Y=0;
}
}
//把像 素rect 转化为 点rect(如无转化则按原图像素取部分图片)
// CGFloat scale = [UIScreen mainScreen].scale;
CGRect dianRect = CGRectMake(X, Y, W, H);//CGRectMake(x, y, w, h);
//截取部分图片并生成新图片
CGImageRef sourceImageRef = [image CGImage];
CGImageRef newImageRef = CGImageCreateWithImageInRect(sourceImageRef, dianRect);
UIImage *newImage = [UIImage imageWithCGImage:newImageRef scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp];
CGImageRelease(sourceImageRef);
return newImage;
}
调用:
(加载网络图片)
[imageView sd_setImageWithURL:[NSURL URLWithString:liveDict[@“liveImage”]] placeholderImage:[UIImage imageNamed:@“i”] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
imageView.image= [weakSelf ct_imageFromImage:image inRect:imageView.frame];
}];
如果只是本地图片
UIImage *image1 = [UIImage imageNamed:@“imageName”];
imageView.image= [weakSelf ct_imageFromImage:image1 inRect:imageView.frame];