公司做的项目需要拍照生成精灵,流程是客户端先拍照,压缩后上传给服务器,然后由服务器的图像识别算法进行生成裁剪后的精灵与精灵身上的器官坐标点。
问题来了,客户端拍出来的照片太大,普遍是2M-5M,所以客户端拍出来的照片需要经过压缩才能上传给服务器。
在网上寻找图像压缩的解决方案,最终暂定有三种方案:
- 第一种:通过原生C#算法进行压缩
- 第二种:通过其他语言的算法进行压缩
- 第三种:通过上传给第三方图片压缩网站进行压缩
第一种方案
由于PC端运行时用的是DGI图像接口,不能调用System.Drawing库,所以暂时否定第一种方案
第二种方案
理论
第三种方案由于需要付费,并且服务器稳定性不可控,暂定为优先级最低的方案,目前正在研究第二种方案
public class Test : Editor
{
[MenuItem("MyMenu/CompressImage")]
static void CompressImage()
{
string outFilePath = Application.dataPath + "/2.jpg";
var bytes = File.ReadAllBytes(Application.dataPath + "/1.jpg");
var texture = new Texture2D(2048, 1024);
texture.LoadImage(bytes);
var jpgBuffer = texture.EncodeToJPG(20);
//var jpgString = Convert.ToBase64String(jpgByte);
if (File.Exists(outFilePath)) File.Delete(outFilePath);
File.WriteAllBytes(outFilePath, jpgBuffer);
AssetDatabase.Refresh();
}
}
网友评论