首页 > 代码库 > 第七篇、OC_图片的裁剪基于SDWebImage
第七篇、OC_图片的裁剪基于SDWebImage
前期有段时间困扰了我很久一个问题由于工程中的图片数据抓取自不同平台,所以图片的大小尺寸不一定,而放置图片的imageView尺寸是一定的,不作任何处理的话会导致图片拉伸变形,因此找了好久解决办法,现把它拿出来。
#import <UIKit/UIKit.h> #import "UIImageView+WebCache.h" @interface UIImageView (WebImage) /** * @author Tucai, 16-02-23 12:02:53 * * 设置能够自动裁剪的网络图,基于SDWebImage实现 * */ // 模糊图渲染 - (void)renderBlurredImageWithUrl:(NSString *)url placeholder:(UIImage *)placeholder completed:(imageDownloadCompletedBlock) completedBlock; //按比例缩放网络图片 - (void)yg_setTrimImageWithUrl:(NSString *)url placeholderImage:(UIImage *)placeholder;
#import "UIImageView+WebImage.h" #import "NSString+URLEncoding.h" @implementation UIImageView (WebImage) #pragma mark - 模糊图渲染 - (void)renderBlurredImageWithUrl:(NSString *)url placeholder:(UIImage *)placeholder completed:(imageDownloadCompletedBlock) completedBlock { // 这里必须开启内存缓存 [SDWebImageManager sharedManager].imageCache.shouldCacheImagesInMemory = YES; // 渲染背景 __weak typeof(self) ws = self; [ws sd_setImageWithURL:[NSURL URLWithString:url] completed:^(UIImage *webImage, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { // 999 是一个标记 if (ws.tag != 999) { UIVisualEffectView *visualView = [[UIVisualEffectView alloc] initWithFrame:ws.bounds]; UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; visualView.effect = effect; NSLog(@"only once"); [ws addSubview:visualView]; ws.tag = 999; } ws.alpha =0.6; ws.image = nil; ws.image = webImage; if (completedBlock) { completedBlock(webImage); } }]; } #pragma mark - 裁剪图片 - (void)yg_setTrimImageWithUrl:(NSString *)url placeholderImage:(UIImage *)placeholder{ __weak typeof(self) ws = self; [SDWebImageManager sharedManager].imageCache.shouldCacheImagesInMemory = NO; [self sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:placeholder completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { if (image) { UIImage *img=[self yg_trimImageWithImage:image]; ws.image=img; }else{ ws.image =[self yg_trimImageWithImage:placeholder]; } }]; } -(UIImage *)yg_trimImageWithImage:(UIImage *)image{ //imageView的宽高比 CGFloat imageViewWidthHeightRatio =self.frame.size.width/self.frame.size.height; //屏幕分辨率 // CGFloat imageScale = [[UIScreen mainScreen] scale]; CGFloat imageScale = 1; CGFloat imageWith = image.size.width*imageScale; CGFloat imageHeight =image.size.height*imageScale; //image的宽高比 CGFloat imageWidthHeightRatio =imageWith/imageHeight; CGImageRef imageRef = nil; CGRect rect; // NSLog(@"\nimageWith === %f\nimageHeight === %f\nImageView宽高比 == %f\nimageScale == %f",imageWith,imageHeight,imageViewWidthHeightRatio,imageScale); if (imageWidthHeightRatio>imageViewWidthHeightRatio) { rect = CGRectMake((imageWith-imageHeight*imageViewWidthHeightRatio)/2, 0, imageHeight*imageViewWidthHeightRatio, imageHeight); }else if (imageWidthHeightRatio<imageViewWidthHeightRatio) { rect = CGRectMake(0, (imageHeight-imageWith/imageViewWidthHeightRatio)/2, imageWith, imageWith/imageViewWidthHeightRatio); }else { rect = CGRectMake(0, 0, imageWith, imageHeight); } imageRef = CGImageCreateWithImageInRect([image CGImage], rect); UIImage *res = [UIImage imageWithCGImage:imageRef scale:imageScale orientation:UIImageOrientationUp]; /** 一定要,千万要release,否则等着内存泄露吧,稍微高清点的图一张图就是几M内存,很快App就挂了 */ CGImageRelease(imageRef); return res; } @end
第七篇、OC_图片的裁剪基于SDWebImage
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。