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

iOS OC 图片压缩

纯代码,不废话,欢迎copy使用,记得点赞

+(NSData *)imageData:(UIImage *)image maxSize:(int)maxSize{

   // 设置最大文件大小(200KB)

    NSLog(@"执行压缩方案 期望压缩目标%dk",maxSize);

   return [self compressImage:image toMaxSize:maxSize];

}

// 主压缩方法:将图片压缩到指定大小(单位:KB)

+ (NSData *)compressImage:(UIImage *)image toMaxSize:(NSInteger)maxSize {

   if (!image) return nil;

   

   NSInteger maxSizeBytes = maxSize * 1024;

   __block NSData *resultData = nil;

   

   // 先尝试通过质量压缩

   @autoreleasepool {

       // 使用二分法查找最佳压缩质量

       CGFloat low = 0.05;

       CGFloat high = 1.0;

       CGFloat quality = high;

       NSData *currentData = nil;

       

       // 精度控制在5%以内

       while (high - low > 0.05) {

           @autoreleasepool {

               quality = (high + low) / 2;

               currentData = UIImageJPEGRepresentation(image, quality);

               

               if (!currentData) {

                   high = quality;

                   continue;

               }

               

               if (currentData.length > maxSizeBytes) {

                   high = quality; // 需要更低的质量

               } else {

                   low = quality;  // 可以尝试更高的质量

                   resultData = currentData; // 保存当前最佳结果

               }

               

               // 及时释放不再需要的数据

               if (high - low <=

http://www.xdnf.cn/news/15840.html

相关文章:

  • vue2 面试题及详细答案150道(101 - 120)
  • 国产替代:ASP4644在电信通信设备中的测试与应用前景
  • Java类:BigDecimal 的用法:乘法
  • IDEA 2020.1版本起下载JDK
  • Logback 配置的利器:深入理解<property>与<variable>
  • vue2 面试题及详细答案150道(21 - 40)
  • 闭包的定义和应用场景
  • Rust实战:高效对接Postman API
  • Spring中的SpEL是什么
  • Springboot3整合Elasticsearch8(elasticsearch-java)
  • [2025CVPR-目标检测方向]FSHNet:一种用于3D物体检测的全稀疏混合网络。
  • Hive数据仓库工具
  • 什么是高光谱相机,它与数码相机有什么区别?
  • 相机光学(五十)——Depth AF
  • RTKLIB读取星历文件,观测数据
  • 解决Flutter运行android提示Deprecated imperative apply of Flutter‘s Gradle plugins
  • 电解电容串联均衡电阻计算
  • 模板初阶和C++内存管理
  • 功能安全之BIST的基本原理
  • 第7天 | openGauss中一个数据库中可以创建多个模式
  • 6月零售数据超预期引发市场波动:基于AI多因子模型的黄金价格解析
  • Axios泛型参数解析与使用指南
  • 当系统盘快满时,可以删除哪些数据
  • 排序【各种题型+对应LeetCode习题练习】
  • 如何阅读Spring源码
  • 【LVGL】Linux LVGL程序几十分钟后UI卡死
  • effective python 条款11 学会对序列做切片
  • Onload 用户指南 (UG1586)-笔记
  • 【机器学习】安装Jupyter及基本操作
  • 内存泄漏系列专题分析之二十九:高通相机CamX--Android通用GPU内存分配和释放原理