• Android-加载透明PNG图片变黑的问题


    png和jpg作为两种最常用的图片格式,首先我们要知道他们的区别:

    1.从一般图片的外观上来说,他们是无法直接判断的

    2.从文件大小上来说,同样一张图png肯定比jpg的大

    3.通过查资料咱们可以发现,png即可移植网络图形格式,也是一种位图文件存储格式,可以进行无损压缩。而jpg是我们最常见的图片格式了,图片占用存储较少,但是也牺牲了图片质量。

    总结为一句话是两者最大的区别是有损和无损。

    而出现加载透明png图片变黑的问题,一般情况下这样的:

    服务端的图片是透明png的无损图片,我们下载到本地的时候强制把它处理为了jpg的形式,造成图片质量有损。

    jpg图片是没有背景透明这个概念的。

    图片下载保存到本地SD卡的工具方法,可以使用如下代码:

     1  /**
     2      * 将文件写到本地缓存
     3      * @param fileName
     4      * @param in
     5      * @param length 总的文件长度 
     6      * @param callBack 下载回调接口 
     7      */
     8     private static void writeToLocal(String fileName, InputStream in,int length,DownloadCallback callback) {
     9         if(in == null) {
    10             return;
    11         }
    12         FileOutputStream out = null;
    13         byte[] buffer = new byte[1024];
    14         int len = -1;
    15         long count = 0;
    16         try {
    17             out = new FileOutputStream(fileName);// 为图片文件实例化输出流
    18             while ((len = in.read(buffer)) != -1) {
    19                 out.write(buffer, 0, len);
    20                 count += len;
    21                 
    22                 if(callback != null) {
    23                     callback.onDownload(length, count, false, false);
    24                 }
    25             }
    26             
    27             if(callback != null) {
    28                 callback.onDownload(length, count, true, false);
    29             }
    30             
    31             out.flush();
    32             out.close();
    33             in.close();
    34         } catch (IOException e1) {
    35             e1.printStackTrace();
    36             try {
    37                 if (out != null) {
    38                     out.close();
    39                     out = null;
    40                 }
    41                 
    42                 in.close();
    43                 in = null;
    44             } catch (IOException e) {
    45                 e.printStackTrace();
    46             }
    47             
    48             // 网络出现异常,删除下载文件
    49             new File(fileName).delete();
    50             if(callback != null) {
    51                 callback.onDownload(length, count, false, true);
    52             }
    53         }
    54     }
  • 相关阅读:
    IOS Core Animation Advanced Techniques的学习笔记(五)
    IOS Core Animation Advanced Techniques的学习笔记(四)
    IOS Core Animation Advanced Techniques的学习笔记(三)
    IOS Core Animation Advanced Techniques的学习笔记(二)
    IOS Core Animation Advanced Techniques的学习笔记(一)
    NSString / NSMutableString 字符串处理,常用代码 (实例)
    UITextField的总结
    iOS7中计算UILabel中字符串的高度
    EventUtil 根据IE自动适配事件
    sql 添加修改说明
  • 原文地址:https://www.cnblogs.com/gongcb/p/4018672.html
Copyright © 2020-2023  润新知