当前位置: 首页 > news >正文

图片压缩,别问我是谁,请叫我雷锋

First. You should建立一个UIImage的category,叫Helper

Second.   so,UIImage+Helper.h中:

//图片压缩

- (UIImage *)compressedImage;

 

//将Image转换成NSData

- (NSData *)imageData;

 

 

UIImage+Helper.m中:

 

 

#import "UIImage+Helper.h"

 

#define MAX_IMAGE_WIDTH_PIX 800.0    //max pix 200.0px

#define MAX_IMAGE_HEIGHT_PIX 800.0

#define MAX_IMAGEDATA_LEN 50000.0

 

@implementation UIImage (Helper)

 

- (UIImage *)compressedImage{

    CGSize imageSize = self.size;

    CGFloat width = imageSize.width;

    CGFloat height = imageSize.height;

    

    if (width <= MAX_IMAGE_WIDTH_PIX && height <= MAX_IMAGE_HEIGHT_PIX) {

        //no need to compress.

        return self;

    }

    if (width == 0 || height == 0) {

        //void zero exception

        return self;

    }

    UIImage * newImage = nil;

    CGFloat widthFactor = MAX_IMAGE_WIDTH_PIX/width;

    CGFloat heightFactor = MAX_IMAGE_HEIGHT_PIX/height;

    CGFloat scaleFactor = 0.0;

    if (widthFactor > heightFactor) {

        scaleFactor = heightFactor; //scale to fit height

    }

    else{

        scaleFactor = widthFactor; //scale to fit width

    }

    CGFloat scaledWidth = width * scaleFactor;

    CGFloat scaledHeight = height * scaleFactor;

    CGSize targetSize = CGSizeMake(scaledWidth, scaledHeight);

    

    UIGraphicsBeginImageContext(targetSize);//this wil crop

    

    CGRect thumbnailRect = CGRectZero;

    thumbnailRect.size.width = scaledWidth;

    thumbnailRect.size.height = scaledHeight;

    

    [self drawInRect:thumbnailRect];

    

    newImage = UIGraphicsGetImageFromCurrentImageContext();

    

    //pop the context to get back to the default

    UIGraphicsEndImageContext();

    return newImage;

}

 

- (NSData *)imageData{

    return UIImageJPEGRepresentation(self, 1);

}

对了,图片的压缩一般多用于上传图片,所以要将图片转换成NSData 

转载于:https://www.cnblogs.com/zhouyantongiOSDev/p/4371437.html

相关文章:

  • C++单例模式实例
  • Action(8):Error -27728:Step download timeout(120 seconds)has expired when downloading
  • 千位数减百位数不退位 区间代换
  • C# 第三次作业
  • Maven常用命令总结
  • ecshop开发日志之手机端虚拟商品自动发货
  • C++ 指针悬挂和赋值操作符的重载,拷贝构造函数实现
  • WCF-终结点之消息路由示例
  • Android学习笔记(四六):互联网通信-文件下载
  • 封装WebService的APM为Async、Await模式利于Asp.Net页面调用
  • Solr入门之SolrServer实例化方式
  • matlab mex 小o -o 出错
  • linux下的权限控制
  • java项目在linux上的运行
  • Dev的WPF控件与VS2012不兼容问题
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • docker-consul
  • Docker入门(二) - Dockerfile
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • export和import的用法总结
  • Invalidate和postInvalidate的区别
  • Javascript设计模式学习之Observer(观察者)模式
  • Java程序员幽默爆笑锦集
  • MySQL-事务管理(基础)
  • Promise初体验
  • SegmentFault 2015 Top Rank
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Sublime text 3 3103 注册码
  • Theano - 导数
  • Vultr 教程目录
  • zookeeper系列(七)实战分布式命名服务
  • 关于springcloud Gateway中的限流
  • 机器学习学习笔记一
  • 扑朔迷离的属性和特性【彻底弄清】
  • 前端临床手札——文件上传
  • 前言-如何学习区块链
  • 实现简单的正则表达式引擎
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 用mpvue开发微信小程序
  • 优化 Vue 项目编译文件大小
  • 在Mac OS X上安装 Ruby运行环境
  • mysql面试题分组并合并列
  • NLPIR智能语义技术让大数据挖掘更简单
  • ​2021半年盘点,不想你错过的重磅新书
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (万字长文)Spring的核心知识尽揽其中
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .NET 的程序集加载上下文
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本