ios kb转m_ios压缩到指定的 KB
我的这个文章是修改简书的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相关推荐
- 将图片压缩至指定大小Kb(Thumbnailator)
放代码前,先唠叨唠叨,舒缓一下我的郁闷之情. 今天下午改一个后台管理系统的需求,要求上传的图片要压缩到300kb,感觉不难,就开搞. 先撩拨一下度娘,搞点货出来瞅瞅,不复杂就干脆搬砖算了. 嗯,度娘不 ...
- iOS图片压缩成指定大小
在iOS中涉及一些图片显示和处理问题,在实际中碰到过修改账户头像时上传头像出现 error = Error Domain=com.alamofire.error.serialization.respo ...
- PHP压缩图片到指定的KB
PHP压缩图片到指定的KB PHP压缩图片主要是用imagejpeg()函数实现的, 官方文档: function imagejpeg($image, $filename = null, $quali ...
- python更改图片存储大小_python不改变图片尺寸压缩到指定大小
python不改变图片尺寸压缩到指定大小 import base64 import io import os from PIL import Image from PIL import ImageFi ...
- python批量压缩图片_Python图片批量压缩到指定大小并将JPG转为PNG格式
背景: 待压缩的图片大小有几十KB到近10M大小不等,且绝大部分图片为JPG格式.这些待压缩图片放在picture文件夹下 以及picture文件夹下的子文件夹中 现需要将picture文件夹下这些图 ...
- 图片大小如何调整到10k?图片压缩到指定大小怎么弄?
在现代社交网络和在线平台上,上传的图片大小都会有限制,过大的图像会导致性能问题.加载时间延长和带宽消耗,所以图片压缩指定大小(https://www.yasuotu.com/imagesize)就成了 ...
- 图片不超过200kb怎么调整?一分钟学会图片压缩到指定大小
很多网站为了保证页面的流畅度会限制图片上传的kb大小,所以我们需要把图片压缩到指定大小(图片压缩到指定大小 图片压缩大小至指定kb以下-压缩图),那么有没有比较快捷的方法可以自定义压缩图片大小呢?今天 ...
- python不改变图片尺寸压缩到指定大小
python不改变图片尺寸压缩到指定大小 import base64 import io import os from PIL import Image from PIL import ImageFi ...
- 图片怎么压缩成指定大小?如何将照片变成规定大小?
如何压缩png图片200k以下?推荐使用压缩图的图片压缩成指定大小(图片压缩到指定大小 图片压缩大小至指定kb以下-压缩图)功能来压缩png图片到想要的大小,下面是具体步骤. 1.使用浏览器打开压缩图 ...
- C# 图片压缩(指定大小压缩和指定尺寸压缩)
一按大小压缩测试代码: 一测试效果: 一主要代码: /// <summary>/// 压缩图片至200 Kb以下/// </summary>/// <param name ...
最新文章
- 病虫害模型算法_基于深度学习的目标检测算法综述
- java automapper 使用_19.AutoMapper 之开放式泛型(Open Generics)
- 【Spark机器学习速成宝典】模型篇01支持向量机【SVM】(Python版)
- letecode [160] - Intersection of Two Linked Lists
- 从版本库看开源项目的发展史
- java findclass_带你深入了解Class类-深度分析:反射从入门到精通
- 提升沟通效率52% 阿里政务钉钉助力政府数字化转型
- java redis pubsub_如何从Java中的生菜RedisPubSubListener获取消息?
- Spring源码系列(十一)——Spring源码总结
- 汇总!零基础到进阶Graphpad Prism完整指南!教程全方位汇总!
- 上海图书馆e卡通阅读器差强人意
- FPGA——基于Verilog HDL语言的交通信号灯控制系统
- mac系统如何显示和隐藏文件
- PAT乙级真题1093 || 字符串A+B(详解,C/C++示例,测试点分析)
- 基于.net的当下传统制造业MES系统的思考(一)
- 基础的JavaScript编码规范
- 记录使用gensim进行词向量增量训练(遇到的几个问题)
- 自旋锁以及Java中的自旋锁的实现
- 中文版Geneve02
- 循环冗余校验码例题[转帖]