之前项目的图片压缩用的是UIImageJPEGRepresentation方法中的压缩因子进行压缩,但是图片失真会很严重,今天又花了点时间了解了下。

首先要说明一下UIImageJPEGRepresentation和UIImagePNGRepresentation,亲测后UIImagePNGRepresentation获取的图片会比UIImageJPEGRepresentation多出几十甚至几百KB的大小,所以在项目中有用到NSData转UIImage都是用的UIImageJPEGRepresentation。

关于压缩方法UIImageJPEGRepresentation 会使图片失真严重,现在用的是drawInRect重新绘制,以下是我项目中用到的方法(ps:也是网上找到的)


+(UIImage *) imageCompressForWidth:(UIImage *)sourceImage targetWidth:(CGFloat)defineWidth
{
    
    CGSize imageSize = sourceImage.size;
    if(imageSize.width <= defineWidth){
        return sourceImage;
    }
    CGFloat width = imageSize.width;
    CGFloat height = imageSize.height;
    CGFloat targetWidth = defineWidth;
    CGFloat targetHeight = (targetWidth / width) * height;
    UIGraphicsBeginImageContext(CGSizeMake(targetWidth, targetHeight));
    [sourceImage drawInRect:CGRectMake(0,0,targetWidth, targetHeight)];
    
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();
    return newImage;
    
}

方法中的defineWidth 如果没有特别要求我基本都是传的屏幕的宽度,虽然不同大小手机可能会有偏差,但是总体的宽高比还是差不多,显示的效果也不会差太大

ps:微信发送图片中的原图大小计算是利用

ALAssetRepresentation* representation = [asset defaultRepresentation];
        // 创建一个buffer保存图片数据
        uint8_t *buffer = (Byte*)malloc(representation.size);
        NSUInteger length = [representation getBytes:buffer fromOffset: 0.0  length:representation.size error:nil];
        
        // 将buffer转换为NSData object,然后释放buffer内存
        NSData *imageData = [[NSData alloc] initWithBytesNoCopy:buffer length:representation.size freeWhenDone:YES];

这边所获取到的imageData.length/1024就是图片的大小了,单位KB

关于IOS中压缩图片相关推荐

  1. Word如何操作压缩图片?干货经验!怎么在Word中压缩图片?

    Word是一款文字处理器办公软件,我们会经常使用它来进行工作中的编辑文字图片内容,我们在编辑文章内容的同时不仅有文字也会有图片,但因为我们有些工作的特殊原因对于我们文章中的图片大小有着独特要求,图片文 ...

  2. iOS 指定压缩图片大小的解决方式

    文章转自:iOS 图片压缩限制大小最优解 这里的maxLength 入参 可以这样写 比如指定 压缩成400kb 400.f * 1024.f 即可 /** 压缩图片方法(先压缩质量再压缩尺寸)*/ ...

  3. iOS中对图片拉伸的四种方式

    1. UIImageView整体拉伸 方式一是通过设置容器UIImageView中图片的显示模式:UIImageView-contentMode,使容器内的图片按照需要的拉伸方式在容器中显示. typ ...

  4. iOS中给图片加水印或文字的几种方法

    最近项目中在做实名认证,要给图片添加水印,在网上找了一些博客,但是鱼龙混杂,首先说明下,有的博客说的方法实现了一下发现不可以.现在我就把我找的可以实现的几种方法贴在下边即可.以下方法我都亲自试过可以: ...

  5. iOS中GIF图片的加载

    Gif图片是非常常见的图片格式,尤其是在聊天的过程中,Gif表情使用地很频繁.但是iOS竟然没有现成的支持加载和播放Gif的类. 简单的上网搜了一下,大概有三种方法: 1.使用UIWebView // ...

  6. 在ios中实现图片环绕文字效果

    IOS中有时候需要实现文字环绕图片的效果,用一般的控件很难实现,因为根本就没有支持该属性的控件,折衷的做法就是用UIWebView,在其加载html语言,实现文字的环绕效果. 实现要求:在webVie ...

  7. nodejs中压缩图片分辨率

    1.适应在windows7.windowsxp系统 2.首先在项目根目录中使用命令npm install --save images安装图片处理模块 3.安装成功后然后在路由中使用var images ...

  8. iOS中gif图片的分解与显示

    UIImageView遇到gif格式的图片能显示吗? 不能. 要让UIImageView中显示gif格式的图片应该怎么做? 只有一种办法,那就是把gif图片分解成多张静态图片,然后放在一个数组里,并使 ...

  9. UI基础篇-iOS中简单图片浏览器的实现

    1 // 2 3 // HYViewController.m 4 5 // 01-图片浏览器复习 6 7 // 8 9 // Created by apple on 15-4-10. 10 11 // ...

最新文章

  1. Numpy和Pandas的区别
  2. 清空Python Shell 窗口的方法 - ClearWindow
  3. 传奇芯片设计大神Jim Keller又离职了,英特尔失了总设计师,网友喊话雷军:挖他!...
  4. 使用OpenVAS 9进行漏洞扫描
  5. 乐鑫wifi模块二次开发_米家部分智能硬件拆解,ZigBee/WIFI模块分析及二次开发
  6. php和html和javascript,php和javascript区别有哪些
  7. android 自定义paint,Android中自定义常用的三个对象解析(Paint,Color,Canvas)
  8. python字符串输入_python如何输入字符串
  9. jQuery.extend与jQuery.fn.extend的区别分析与实例
  10. sql limit不接具体数字_这21个写SQL的好习惯,你要养成呀
  11. 通向财务自由之路05_选择一个有效的理念
  12. python在人工智能应用锁_饮冰三年-人工智能-Python-35权限管理(万能的权限通用模块)...
  13. WordPress搬家插件迁移网站的方法(从一台服务器搬到另一台服务器)
  14. 开机时无法进入系统,提示windows system32/winload.exe 无法加载
  15. pdf转换成word转换器2014注册码
  16. AI公司盈利难?MSN聊天机器人起家的小i是如何做到的
  17. drupal8 修改主题_Drupal 8主题修订版-更新和新功能
  18. AndroidStudio报错 AAPT: error: resource xxx (aka com.example.ouchaixun:drawable/back) not found
  19. 简单易学又有效的颈椎病自我康复操
  20. python的time模块使用

热门文章

  1. 怎么新建从文本文件转换成PDF文件?
  2. Linux文件系统及文件储存方式
  3. 第五章--设备内容(The Device Context)(2)
  4. ​2022年个税专项附加扣除,开始确认,​拿到软考证书即可抵扣
  5. 实例讲解基于 React+Redux 的前端开发流程
  6. 记——博客后台管理系统
  7. 以后有什么需要的可以到淘宝店铺也可以到微店!
  8. 赏帮赚,实战日记的第一天
  9. 生产注意事项(分片集群)
  10. NCE4 L5 Youth