我的这个文章是修改简书的blog,本来想在 [作者:郑莫轩 ] 的blog 下评论,但是代码太多了,只能先用一个blog 记录下来,供大家参考。

[代码大放送--iOS图片压缩]

(http://www.jianshu.com/p/974a9537d9f7/comments/2623143#comment-2623143)

- (void)viewDidLoad {

[super viewDidLoad];

[self compressedImageFiles:[UIImage imageNamed:@"1.jpg"] imageKB:20 imageBlock:^(UIImage *image) {

}];

}

/**

* 压缩图片

*

* @param image 需要压缩的图片

* @param fImageBytes 希望压缩后的大小(以KB为单位)

*

* @return 压缩后的图片

*/

- (void)compressedImageFiles:(UIImage *)image

imageKB:(CGFloat)fImageKBytes

imageBlock:(void(^)(UIImage *image))block {

__block UIImage *imageCope = image;

CGFloat fImageBytes = fImageKBytes * 1024;//需要压缩的字节Byte

__block NSData *uploadImageData = nil;

uploadImageData = UIImagePNGRepresentation(imageCope);

NSLog(@"图片压前缩成 %fKB",uploadImageData.length/1024.0);

CGSize size = imageCope.size;

CGFloat imageWidth = size.width;

CGFloat imageHeight = size.height;

if (uploadImageData.length > fImageBytes && fImageBytes >0) {

dispatch_async(dispatch_queue_create("CompressedImage", DISPATCH_QUEUE_SERIAL), ^{

/* 宽高的比例 **/

CGFloat ratioOfWH = imageWidth/imageHeight;

/* 压缩率 **/

CGFloat compressionRatio = fImageBytes/uploadImageData.length;

/* 宽度或者高度的压缩率 **/

CGFloat widthOrHeightCompressionRatio = sqrt(compressionRatio);

CGFloat dWidth = imageWidth *widthOrHeightCompressionRatio;

CGFloat dHeight = imageHeight*widthOrHeightCompressionRatio;

if (ratioOfWH >0) { /* 宽 > 高,说明宽度的压缩相对来说更大些 **/

dHeight = dWidth/ratioOfWH;

}else {

dWidth = dHeight*ratioOfWH;

}

imageCope = [self drawWithWithImage:imageCope width:dWidth height:dHeight];

uploadImageData = UIImagePNGRepresentation(imageCope);

NSLog(@"当前的图片已经压缩成 %fKB",uploadImageData.length/1024.0);

//微调

NSInteger compressCount = 0;

/* 控制在 1M 以内**/

while (fabs(uploadImageData.length - fImageBytes) > 1024) {

/* 再次压缩的比例**/

CGFloat nextCompressionRatio = 0.9;

if (uploadImageData.length > fImageBytes) {

dWidth = dWidth*nextCompressionRatio;

dHeight= dHeight*nextCompressionRatio;

}else {

dWidth = dWidth/nextCompressionRatio;

dHeight= dHeight/nextCompressionRatio;

}

imageCope = [self drawWithWithImage:imageCope width:dWidth height:dHeight];

uploadImageData = UIImagePNGRepresentation(imageCope);

/*防止进入死循环**/

compressCount ++;

if (compressCount == 10) {

break;

}

}

NSLog(@"图片已经压缩成 %fKB",uploadImageData.length/1024.0);

imageCope = [[UIImage alloc] initWithData:uploadImageData];

dispatch_sync(dispatch_get_main_queue(), ^{

block(imageCope);

});

});

}

else

{

block(imageCope);

}

}

/* 根据 dWidth dHeight 返回一个新的image**/

- (UIImage *)drawWithWithImage:(UIImage *)imageCope width:(CGFloat)dWidth height:(CGFloat)dHeight{

UIGraphicsBeginImageContext(CGSizeMake(dWidth, dHeight));

[imageCope drawInRect:CGRectMake(0, 0, dWidth, dHeight)];

imageCope = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return imageCope;

}

ios kb转m_ios压缩到指定的 KB相关推荐

  1. 将图片压缩至指定大小Kb(Thumbnailator)

    放代码前,先唠叨唠叨,舒缓一下我的郁闷之情. 今天下午改一个后台管理系统的需求,要求上传的图片要压缩到300kb,感觉不难,就开搞. 先撩拨一下度娘,搞点货出来瞅瞅,不复杂就干脆搬砖算了. 嗯,度娘不 ...

  2. iOS图片压缩成指定大小

    在iOS中涉及一些图片显示和处理问题,在实际中碰到过修改账户头像时上传头像出现 error = Error Domain=com.alamofire.error.serialization.respo ...

  3. PHP压缩图片到指定的KB

    PHP压缩图片到指定的KB PHP压缩图片主要是用imagejpeg()函数实现的, 官方文档: function imagejpeg($image, $filename = null, $quali ...

  4. python更改图片存储大小_python不改变图片尺寸压缩到指定大小

    python不改变图片尺寸压缩到指定大小 import base64 import io import os from PIL import Image from PIL import ImageFi ...

  5. python批量压缩图片_Python图片批量压缩到指定大小并将JPG转为PNG格式

    背景: 待压缩的图片大小有几十KB到近10M大小不等,且绝大部分图片为JPG格式.这些待压缩图片放在picture文件夹下 以及picture文件夹下的子文件夹中 现需要将picture文件夹下这些图 ...

  6. 图片大小如何调整到10k?图片压缩到指定大小怎么弄?

    在现代社交网络和在线平台上,上传的图片大小都会有限制,过大的图像会导致性能问题.加载时间延长和带宽消耗,所以图片压缩指定大小(https://www.yasuotu.com/imagesize)就成了 ...

  7. 图片不超过200kb怎么调整?一分钟学会图片压缩到指定大小

    很多网站为了保证页面的流畅度会限制图片上传的kb大小,所以我们需要把图片压缩到指定大小(图片压缩到指定大小 图片压缩大小至指定kb以下-压缩图),那么有没有比较快捷的方法可以自定义压缩图片大小呢?今天 ...

  8. python不改变图片尺寸压缩到指定大小

    python不改变图片尺寸压缩到指定大小 import base64 import io import os from PIL import Image from PIL import ImageFi ...

  9. 图片怎么压缩成指定大小?如何将照片变成规定大小?

    如何压缩png图片200k以下?推荐使用压缩图的图片压缩成指定大小(图片压缩到指定大小 图片压缩大小至指定kb以下-压缩图)功能来压缩png图片到想要的大小,下面是具体步骤. 1.使用浏览器打开压缩图 ...

  10. C# 图片压缩(指定大小压缩和指定尺寸压缩)

    一按大小压缩测试代码: 一测试效果: 一主要代码: /// <summary>/// 压缩图片至200 Kb以下/// </summary>/// <param name ...

最新文章

  1. 病虫害模型算法_基于深度学习的目标检测算法综述
  2. java automapper 使用_19.AutoMapper 之开放式泛型(Open Generics)
  3. 【Spark机器学习速成宝典】模型篇01支持向量机【SVM】(Python版)
  4. letecode [160] - Intersection of Two Linked Lists
  5. 从版本库看开源项目的发展史
  6. java findclass_带你深入了解Class类-深度分析:反射从入门到精通
  7. 提升沟通效率52%  阿里政务钉钉助力政府数字化转型
  8. java redis pubsub_如何从Java中的生菜RedisPubSubListener获取消息?
  9. Spring源码系列(十一)——Spring源码总结
  10. 汇总!零基础到进阶Graphpad Prism完整指南!教程全方位汇总!
  11. 上海图书馆e卡通阅读器差强人意
  12. FPGA——基于Verilog HDL语言的交通信号灯控制系统
  13. mac系统如何显示和隐藏文件
  14. PAT乙级真题1093 || 字符串A+B(详解,C/C++示例,测试点分析)
  15. 基于.net的当下传统制造业MES系统的思考(一)
  16. 基础的JavaScript编码规范
  17. 记录使用gensim进行词向量增量训练(遇到的几个问题)
  18. 自旋锁以及Java中的自旋锁的实现
  19. 中文版Geneve02
  20. 循环冗余校验码例题[转帖]

热门文章

  1. 工厂模式简介和应用场景
  2. python实现火车票查询_火车票查询(python版)
  3. 火狐书签栏 谷歌_适用于Firefox的Google工具栏等
  4. 格力董明珠:对别人狠,对自己更狠!
  5. 我为账户和推广计划指定了不同的推广地域,以哪一个为准?
  6. drawio 二次开发
  7. 生成树协议STP 网络冗余技术
  8. ASEMI快恢复二极管SFF806A的压降是多少
  9. 【FLASH实例1000教程】(4)上
  10. 从安装到使用——Odoo常见问题及故障处理