• 程序性能优化之网络传输与数据存储优化(五)下


    阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680

    本篇文章将继续从7Z极限压缩和WebP使用来介绍网络传输与数据存储优化:

    一、7Z极限压缩

    一些文件过大或者是容量太大了,占用硬盘太多空间了。此刻可以使用压缩软件进行压缩,让它的体积变小了。其中极限压缩可以让文件夹或者是文件,压缩的最小。那么如何使用这个极限压缩功能的。

     
    19956127-063720bdeec8a3ac.png
     

    1、你要到网上下载这个压缩的程序,点击它,点击【install】。

     
    19956127-b62975abf2286948.png
     
     
    19956127-36fa58c906bc1346.png
     


    2、此刻软件会安装到电脑,找到需要压缩的文件以及文件夹。

     
    19956127-2b9a249e1b058d0f.png
     
     
    19956127-93e1d5c8b6740db3.png
     

    3、右键文件或者文件夹选择这个7z,选择压缩包,点击这个压缩等级这里。

     
    19956127-a91a8193b3a9b496.png
     
     
    19956127-729bf6acff7e01ac.png
     


    4、选择这个极限压缩,然后压缩算法选择【LZMA2】。

     
    19956127-de4d11516a059cfa.png
     
     
    19956127-7a10cf4828cadb2e.png
     


    5、然后点击这个确定,软件将会以极限压缩的方式进行压缩的。压缩后的文件明显变小了的。

     
    19956127-3c5fe986ea14d94e.png
     
     
    19956127-6e2e371216f1bf55.png
     

    二、WebP使用 图片优化

    2.1、什么是 WebP?

    WebP(发音 weppy,项目主页),是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8。根据 Google 的测试,无损压缩后的 WebP 比 PNG 文件少了 45% 的文件大小,即使这些 PNG 文件经过其他压缩工具压缩之后,WebP 还是可以减少 28%的文件大小。

    2.2、当下Android图片优化之WebP的必然选择

    对于一个好的APP,当然是越小越好,然而,在APP中图片就占据了很大的一部分体积,所以图片的优化是开发人员必须要做的事情,而原有图片的png、jpeg、GIF等格式的优化已经达到了极致,所以只得另寻出路,因此有了WebP。由于WebP的特性,如果把WebP运用到APP中将会使我们的APP体积大小得到很大程度的缩小,APP也会得到一个质的变化,所以,WebP在APP中的使用将是目前我们图片优化的不二选择。

    2.3、WebP的转换

    WebP的转换:WebP与其他常用的图片格式之间是可以相互转换的,webp转换工具有:XnConvet,智图,ISparta.

    2.4、WebP的兼容性

    WebP的兼容性:4.2.1+ 对于webp的decode、encode是完全支持的(包含半透明的webp图)对于4.0+ 到 4.2.1 ,只支持完全不透明的decode、encode的webp图,4.0 以下,应该是默认不支持webp的(编码解码)。

    2.5、Android下WebP的使用

    想在APP中使用WebP,首先我们就得解决它的兼容性问题。步骤如下:

    1、添加webp的支持,加载so文件,添加libwebp.jia包

    (1)获取so文件和libwebp.jia包:可以从https://github.com/EverythingMe/webp-android下载解析库,然后ndk-build得到so文件。同时也能在解析库里面得到libwebp.jia包。

    (2)得到so文件和libwebp.jia后拷到项目的app的libs目录下。

     
    19956127-abedbac0ead0eb4e
     

    (3)在appbuild添加依赖。

     
    19956127-74d5ab0f9df2f8c5
     

    添加成功后在app目录下会生成这样的一个文件。

     
    19956127-59fe9886258291b7
     

    自此 so文件添加依赖成功。

    2、第二步,添加WebpUtils文件,里面有通过so包来处理webp文件成为byte数组的方法。

    我们可以通过以下方法来解决兼容性问题(4.2.1以下版本也可以显示webp格式图片,包括半透明图片)。

    关键代码:

    **public class **WebPDecoder {
        **private static **WebPDecoder *instance *= **null**;
    
        **private **WebPDecoder() {
            System.*loadLibrary*(**"webp_evme"**);
        }
    
        **public static **WebPDecoder getInstance() {
            **if **(*instance*==**null**) {
                **synchronized **(WebPDecoder.**class**) {
                    **if **(*instance*==**null**) {
                        *instance *= **new **WebPDecoder();
                    }
                }
            }
    
            **return ***instance*;
        }
    
        **public **BitmapdecodeWebP(**byte**[] encoded) {
            **return **decodeWebP(encoded,0,0);
        }
    
        **public **BitmapwebpToBitmap(InputStream is) {
            Bitmap bitmap = **null**;
            **if **(Build.VERSION.***SDK_INT***< Build.VERSION_CODES.***JELLY_BEAN_MR1***) {
                bitmap = WebPDecoder.*getInstance*().decodeWebP(*streamToBytes*(is));
            } **else **{
                bitmap = BitmapFactory.*decodeStream*(is);
            }
            **return **bitmap;
        }
    
        **private static byte**[] streamToBytes(InputStream is) {
            ByteArrayOutputStream os = **new **ByteArrayOutputStream(1024);
            **byte**[]buffer = **new byte**[1024];
            **int **len;
            **try **{
                **while **((len= is.read(buffer)) >=0) {
                    os.write(buffer, 0, len);
                }
            } **catch **(java.io.IOExceptione) {
            }
            **return **os.toByteArray();
        }
    

    3、项目里在需要的地方直接调用

    final ImageView imageView = (ImageView) findViewById(R.id.imageView);
    try {
        imageView.setImageBitmap(WebPDecoder.getInstance().webpToBitmap(getAssets().open("aa.webp")));
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    参考:https://blog.csdn.net/qq_34075348/article/details/78750974
    https://jingyan.baidu.com/article/93f9803f4b6055e0e46f55b1.html

    阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680

  • 相关阅读:
    bug的生命周期
    性能测试的流程
    通过画因果图来写测试用例的步骤为___、___、___、___及把因果图转换为状态图共五个步骤。&#160;利用因果图生成测试用例的基本步骤是:
    集成测试中自顶向下集成和自底向上集成两个策略的理解,要谈出它们各自的优缺点和主要适应于哪种类型测试;
    Spring中的八大设计模式
    ssh
    window实用快捷键-win篇
    解决Chrome浏览器“崩溃啦”的问题!
    C语言-格式输出
    AIDA64+RemotePanel 组副屏电脑状态监视器 旧手机废物利用 wifi/数据线 adb驱动
  • 原文地址:https://www.cnblogs.com/Android-Alvin/p/11958921.html
Copyright © 2020-2023  润新知