前期有段时间困扰了我很久一个问题由于工程中的图片数据抓取自不同平台,所以图片的大小尺寸不一定,而放置图片的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 != ) {
UIVisualEffectView *visualView = [[UIVisualEffectView alloc] initWithFrame:ws.bounds];
UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
visualView.effect = effect;
NSLog(@"only once");
[ws addSubview:visualView];
ws.tag = ;
}
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 = ; 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)/, , imageHeight*imageViewWidthHeightRatio, imageHeight); }else if (imageWidthHeightRatio<imageViewWidthHeightRatio) { rect = CGRectMake(, (imageHeight-imageWith/imageViewWidthHeightRatio)/, imageWith, imageWith/imageViewWidthHeightRatio); }else {
rect = CGRectMake(, , 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的更多相关文章

  1. 图片裁剪(基于RxPaparazzo)

    图片裁剪(基于RxPaparazzo) 前言:基于RxPaparazzo的图片裁剪,图片旋转.比例放大|缩小. 效果: 开发环境:AndroidStudio2.2.1+gradle-2.14.1 涉及 ...

  2. C#设计模式总结 C#设计模式(22)——访问者模式(Vistor Pattern) C#设计模式总结 .NET Core launch.json 简介 利用Bootstrap Paginator插件和knockout.js完成分页功能 图片在线裁剪和图片上传总结 循序渐进学.Net Core Web Api开发系列【2】:利用Swagger调试WebApi

    C#设计模式总结 一. 设计原则 使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性.并且,在进行设计的时候,也需要遵循以下几个原则:单一职责原则.开放封闭原则.里氏代替 ...

  3. 用仿ActionScript的语法来编写html5——第七篇,自定义按钮

    第七篇,自定义按钮这次弄个简单点的,自定义按钮.其实,有了前面所定义的LSprite,LBitmap等类,定义按钮就很方便了.下面是添加按钮的代码, function gameInit(event){ ...

  4. Python开发【第七篇】:面向对象 和 python面向对象进阶篇(下)

    Python开发[第七篇]:面向对象   详见:<Python之路[第五篇]:面向对象及相关> python 面向对象(进阶篇)   上一篇<Python 面向对象(初级篇)> ...

  5. ElasticSearch入门 第七篇:分词

    这是ElasticSearch 2.4 版本系列的第七篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  6. WCF开山篇__图片传输

    WCF开山篇__图片传输   一.  简介 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序接口,可以翻译为Windows通讯接口,它是. ...

  7. 详细解释如何通过Android自带的方式来实现图片的裁剪——原理分析+解决方案

    我们很多时候需要进行图片的裁剪,其实这个功能在android系统中已经有一套解决方案了,虽然界面和效果并不是很优秀但功能毫无疑问是完美实现了.至于,不用自带的方案怎么做自定义,这个就是后话了.本篇主要 ...

  8. 通过Nginx訪问FastDFS文件系统并进行图片文件裁剪的性能測试和分析

    前段时间公司的分布式图片文件系统(FastDFS)做了图片裁剪和缩放功能,并把缩放计算和FastDFS做了解耦分离,前端用虚拟机作为图片文件缩放的訪问代理层(Nginx Proxy),后端使用ngin ...

  9. 跟我学SpringCloud | 第十七篇:服务网关Zuul基于Apollo动态路由

    目录 SpringCloud系列教程 | 第十七篇:服务网关Zuul基于Apollo动态路由 Apollo概述 Apollo相比于Spring Cloud Config优势 工程实战 示例代码 Spr ...

随机推荐

  1. Android 获取控件相对于屏幕位置

    // View宽,高 public int[] getLocation(View v) { int[] loc = new int[4]; int[] location = new int[2]; v ...

  2. Android获取联系人示例,从数据库加载,带首字母标签

    这几天打算学习下Android联系人方便的一些东西,之前稍有涉略,不过每次都是浅尝辄止. 推荐国内两个Link: http://fanfq.iteye.com/blog/779569 http://w ...

  3. [Angular 2] Style Angular 2 Components

    Each Angular 2 Component can have its own styles which will remained contained inside the component. ...

  4. 商户怎样选择商业wifi进行移动营销

    互联网移动营销的大潮席卷而来,带给很多其它的商户营销理念上的升级和更新.商业wifi营销成为很多其它的商户选择.以往,人们在咖啡店不过聊聊天喝喝咖啡,如今,人们能够更悠闲的歇息娱乐享受带有wifi的咖 ...

  5. Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8

    在使用Eclipse 直接编译NDK,有时候会报类似以下错误 Android NDK: WARNING: APP_PLATFORM android-14 is larger than android: ...

  6. 用 Gearman 分发 PHP 应用程序的工作负载

    尽管一个 Web 应用程序的大部分内容都与表示有关,但它的价值与竞争优势却可能体现在若干专有服务或算法方面.如果这类处理过于复杂或拖沓,最好是进行异步执行,以免 Web 服务器对传入的请求没有响应.实 ...

  7. java 访问修饰符

    此题考察修饰符,函数定义等,故从网上搜罗了下相关资料,总结如下: 类.方法.成员变量和局部变量的可用修饰符 修饰符 类 成员访求 构造方法 成员变量 局部变量 abstract(抽象的) √ √ - ...

  8. iOS---》点击uitableview 的section展开或隐藏

    #import <UIKit/UIKit.h> @interface TestCell : UITableViewCell @property (weak, nonatomic) IBOu ...

  9. IT项目技术建议书核心内容

    第一部分:概述部分 该部分的重点是理解标书,理解项目建设的背景,建设该项目的初衷究竟是什么?需要解决的核心关键问题是什么?基于对项目的理解然后明确项目建设的目标,项目建设的原则,项目本事的定位,项目建 ...

  10. Android进阶笔记18:选用合适的IPC方式

    1. 相信大家都知道Android进程间通信方式很多,比如AIDL.Messenger等等,接下来我就总结一下这些IPC方式优缺点. 2. IPC方式的优缺点和适用场景 3. 附加:使用Intent实 ...