处理下载后的图片不是正方形的问题

2016-09-01  本文已影响18人  CRAZYBADAM

在 上面 调用SDWebImage 去请求图片

[_hotelImage sd_setImageWithURL:[NSURL URLWithString:model.hotelLogo] completed:^(UIImage *image,NSError*error,SDImageCacheTypecacheType,NSURL*imageURL) {

if(!image)

{

image = [UIImage imageNamed:@"placeholder_hotel_list"];

}

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0), ^{

UIImage*overlayImage = [self squareImageFromImage:image scaledToSize:kScreenWidth/2];

dispatch_async(dispatch_get_main_queue(), ^{

_hotelImage.image= overlayImage;

});

});

}];

/**

*剪切图片为正方形

*

*@paramimage原始图片比如size大小为(400x200)pixels

*@paramnewSize 正方形的size比如400pixels

*

*@return返回正方形图片(400x400)pixels

*/

- (UIImage*)squareImageFromImage:(UIImage*)image scaledToSize:(CGFloat)newSize {

CGAffineTransform scaleTransform;

CGPoint origin;

if (image.size.width> image.size.height) {

//image原始高度为200,缩放image的高度为400pixels,所以缩放比率为2

CGFloat scaleRatio = newSize / image.size.height;

scaleTransform =CGAffineTransformMakeScale(scaleRatio, scaleRatio);

//设置绘制原始图片的画笔坐标为CGPoint(-100, 0)pixels

origin =CGPointMake(-(image.size.width- image.size.height) /2.0f,0);

} else {

CGFloat scaleRatio = newSize / image.size.width;

scaleTransform =CGAffineTransformMakeScale(scaleRatio, scaleRatio);

origin =CGPointMake(0, -(image.size.height- image.size.width) /2.0f);

}

CGSizesize =CGSizeMake(newSize, newSize);

//创建画板为(400x400)pixels

if ([[UIScreen mainScreen]respondsToSelector:@selector(scale)]) {

UIGraphicsBeginImageContextWithOptions(size,YES,0);

} else {

UIGraphicsBeginImageContext(size);

}

CGContextRef context =UIGraphicsGetCurrentContext();

//将image原始图片(400x200)pixels缩放为(800x400)pixels

CGContextConcatCTM(context, scaleTransform);

//origin也会从原始(-100, 0)缩放到(-200, 0)

[image drawAtPoint:origin];

//获取缩放后剪切的image图片

image =UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return image;

}

上一篇下一篇

猜你喜欢

热点阅读