【Unity】图片压缩的解决方案

【Unity】图片压缩的解决方案,第1张

公司做的项目需要拍照生成精灵,流程是客户端先拍照,压缩后上传给服务器,然后由服务器的图像识别算法进行生成裁剪后的精灵与精灵身上的器官坐标点。

问题来了,客户端拍出来的照片太大,普遍是2M-5M,所以客户端拍出来的照片需要经过压缩才能上传给服务器。

在网上寻找图像压缩的解决方案,最终暂定有三种方案:

第一种方案

由于PC端运行时用的是DGI图像接口,不能调用System.Drawing库,所以暂时否定第一种方案

第二种方案

理论

第三种方案由于需要付费,并且服务器稳定性不可控,暂定为优先级最低的方案,目前正在研究第二种方案

一、支持自定义配置、不失真和批量处理

二、图片上传为什么要压缩

1、图片服务器空间限制,磁盘昂贵

2、网络不稳定,大文件需要断点续传

3、尽可能避免安卓OOM异常

4、后台约定的规则<200KB

5、需要上传原图的应用有医院临床项目、金融银行

三、图片压缩流程

1、递归每张图片

2、设置图片格式 Bitmap.CompressFormat.JPG

png, jpg,webp

3、质量压缩bitmap.compress(format,quality,baos)

由于png是无损压缩,所以设置quality无效(不适合作为缩略图)

采样率压缩BitmapFactory.Options.inSampleSize

缩小图片分辨率,减少所占用磁盘空间和内存大小

缩放压缩canvas.drawBitmap(bitmap, null,rectF,null)

减少图片的像素,降低所占用磁盘空间大小和内存大小,可用于缓存缩略图

JNI调用JPEG库

Android的图片引擎使用的是阉割版的skia引擎,去掉了图片压缩中的哈夫曼算法

4、像素修复

5、返回压缩

6、完成压缩

demo: https://github.com/ApeCold/Learn_Compress_Sample

参考:

Luban框架 https://github.com/Curzibn/Luban

缺点

1、当没有设定压缩路径时,抛异常无闪退

2、源码中,压缩比率固定值60,无法修改

3、压缩配置,参数不太适应真实项目需求

4、不能指定压缩大小,比如100KB以内

https://github.com/zetbaitsu/Compressor


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/266178.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-18
下一篇2023-04-18

发表评论

登录后才能评论

评论列表(0条)

    保存