ToB企服应用市场:ToB评测及商务社交产业平台

标题: 基于清晰度优先的安卓图片压缩工具的二次开发小记。 [打印本页]

作者: 光之使者    时间: 2024-5-13 01:41
标题: 基于清晰度优先的安卓图片压缩工具的二次开发小记。
原程序:https://github.com/lexluthors/CompressTools-Android
工具特性:
压缩情况对比:
ImageInfocompressToolWechat1.50MB (1920x1080)47.32kb(1280*720)51.4kb(1280*720)微信压缩图片样例:

这个是采用该库压缩后的图片:

原程序段已介绍完毕。根据纪录,原作者已于五年前停止更新了该项目,而最近一次大型更新为添加了批量压缩的功能。
笔者在阅读源代码与测试程序中发现,原作者编写的代码与程序存在以下问题。
存在问题代码段
  1.     @Override
  2.     protected void onActivityResult(int requestCode, int resultCode, Intent data)
  3.         {
  4.                 super.onActivityResult(requestCode, resultCode, data);
  5.                 if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK)
  6.                 {
  7.                         if (data == null)
  8.                         {
  9.                                 showError("打开失败");
  10.                                 return;
  11.                         }
  12.                         try
  13.                         {
  14.                                 oldFile = getTempFile(this, data.getData());
  15.                                 filePath = oldFile.getAbsolutePath();
  16.                                 mainImageOld.setImageBitmap(BitmapFactory.decodeFile(oldFile.getAbsolutePath()));
  17.                                 mainTextOld.setText(String.format("Size : %s", getReadableFileSize(oldFile.length())));
  18.                         }
  19.                         catch (IOException e)
  20.                         {
  21.                                 showError("读图失败");
  22.                                 e.printStackTrace();
  23.                         }
  24.                 }
  25.         }
复制代码
修改样例
  1. private void handleOpenError() {
  2.     showError("打开失败");
  3. }
  4. if (data != null && data.getData() != null) {
  5.     //省略无用代码段
  6.     ...原方法...
  7. } else {
  8.     handleOpenError();
  9. }
复制代码
修改样例
  1. try (InputStream inputStream = context.getContentResolver().openInputStream(uri);
  2.      FileOutputStream out = new FileOutputStream(tempFile)) {
  3.     if (inputStream != null) {
  4.         copy(inputStream, out);
  5.     }
  6. } catch (IOException e) {
  7.     e.printStackTrace();
  8. }
复制代码
无用注释略过不表,有兴趣可以前去原作者github页面下载master文件查看
笔者通过以上几个角度对软件举行了维护修复的二次开发。
虽然对于软件的底层算法,笔者暂且没有能力举行维护,但是对于利用过程中存在的恶性bug笔者已经举行了修复。
在修复这个项目中恶性bug的过程中,笔者深刻领会到了以下三个方面的重要性。
写在最后与展望:本项目开源于github,在修复这些恶性bug的过程中,笔者认为开源对于一个软件寿命的连续起到了至关重要的作用。即使这份软件原作者已在五年前停止更新,但由于开源的性质,也使得笔者有机会举行二次开发。笔者在之后更会对于软件的其他缺点举行开发,笔者认为软件的ui界面已颠末时,对于Android设备的异型屏适配也不够完善。笔者之后将通过这两个角度对于软件举行进一步的更新,会同步于笔者的github与博客园举行发表供给阅读。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4