【android】 如何把gif图片下载到本地

以上图片大家可以看到,虽然是个jpg格式的文件,但是本质上是个动图。
但是发现在咱的图片模块下,本地存储的图片只有一帧,问题出在哪里呢?
http获取到的byte[]数据是没问题的
断点跟踪了下,发现问题出现在最后一句压缩图片尺寸的时候。
public static Bitmap getScaledBitMap(byte[] data, int width, int height) {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeByteArray(data, 0, data.length, options);
        float srcWidth = options.outWidth;
        float srcHeight = options.outHeight;
        int inSampleSize = 1;
        if (srcHeight > height || srcWidth > width) {
            if (srcWidth > srcHeight)
                inSampleSize = Math.round(srcHeight / height);
            else
                inSampleSize = Math.round(srcWidth / width);
        }
        options = new BitmapFactory.Options();
        options.inSampleSize = inSampleSize;
        return BitmapFactory.decodeByteArray(data, 0, data.length, options);
    }
最后的解决之道是,不经过Bitmap,直接把http获取到的byte[]数据写入到本地;在取出的时候,才进行图片尺寸压缩。
/**
* 写入bytes
*
* @param url
* @param bytes
* @return
*/
public boolean save(String url, byte[] bytes) {
if (bytes == null || bytes.length == 0)
return false; url = trans2Local(url);
File file = new File(url); if (file.exists())
return true; ZIO.createNewFile(file);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
fos.write(bytes);
return true;
} catch (Exception e) {
e.printStackTrace();
Log.e("存储出错", e.getMessage());
} finally {
try {
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
这种做法额外的好处是,不再理会奇怪的图片格式质量问题。
比如我们用Bitmap保存图片的时候还要取判断图片类型,还要去指定压缩精度(如果100的话图片尺寸比原图还要大很多,真奇怪)
    Bitmap.CompressFormat format = url.toLowerCase().indexOf("png") > 0 ? Bitmap.CompressFormat.PNG : Bitmap.CompressFormat.JPEG;
    bitmap.compress(format, 75, fos);
【android】 如何把gif图片下载到本地的更多相关文章
- scrapy框架来爬取壁纸网站并将图片下载到本地文件中
		首先需要确定要爬取的内容,所以第一步就应该是要确定要爬的字段: 首先去items中确定要爬的内容 class MeizhuoItem(scrapy.Item): # define the fields ... 
- [技术博客]使用wx.downloadfile将图片下载到本地临时存储
		目录 目标 代码展示 重点讲解 目标 在上一篇技术博客中,我们生成的海报中包含图片,这些图片是存储到服务器上的,而canvas的drawimage函数只能读取本地文件,因此我们在drawCanvas之 ... 
- 前端js保存页面为图片下载到本地
		前端js保存页面为图片下载到本地 手机端点击下载按钮将页面保存成图片到本地 前端js保存页面为图片下载到本地的坑 html2canvas 识别 svg 解决方案 方案 html2canvas.js:可 ... 
- python 爬虫之requests爬取页面图片的url,并将图片下载到本地
		大家好我叫hardy 需求:爬取某个页面,并把该页面的图片下载到本地 思考: img标签一个有多少种类型的src值?四种:1.以http开头的网络链接.2.以“//”开头网络地址.3.以“/”开头绝对 ... 
- android开源项目:图片下载缓存库picasso
		picasso是Square公司开源的一个Android图形缓存库,地址http://square.github.io/picasso/,可以实现图片下载和缓存功能. picasso有如下特性: 在a ... 
- svg保存为图片下载到本地
		今天给大家说一个将svg下载到本地图片的方法,这里我不得不吐槽一下,为啥博客园不可以直接上传本地文件给大家用来直接下载分享呢,好,吐槽到此为止! 这里需要用到一个js文件,名字自己起,内容如下: (f ... 
- nodejs 将网上的图片下载到本地文件
		var request = require('request'); var fs = require('fs'); var img_src = 'https://www.baidu.com/img/b ... 
- Android图片下载到本地,系统图库不显示
		可能大家都知道我们下载图片到Android手机的时候,然后调用系统图库打开图片,提示"找不到指定项". 那是因为我们插入的图片还没有更新的缘故,所以只要将图片插入系统图库,之后发条 ... 
- Android性能优化-减小图片下载大小
		原文链接 https://developer.android.com/topic/performance/network-xfer.html 内容概要 理解图片的格式 PNG JPG WebP 如何选 ... 
随机推荐
- mysql更改utf8编码方式
			方法1: 一.查看数据库编码格式 1 mysql> show variables like 'character_set_database'; 二.查看数据表的编码格式 1 mysql> ... 
- 在Chem 3D软件用什么方法可以改变背景
			化学绘图过程中常常需要绘制三维结构的图形,Chem 3D软件是ChemOffice套件中专门用于绘制三维结构的组件.用过它的用户会发现,其背景颜色通常都默认为深蓝色,但是不是每个场景都适合用深蓝色的背 ... 
- Angular 组件与模板 - 属性指令
			指令概览 在 Angular 中有三种类型的指令: 组件 — 拥有模板的指令 结构型指令 — 通过添加和移除 DOM 元素改变 DOM 布局的指令 属性型指令 — 改变元素.组件或其它指令的外观和行为 ... 
- m2014_c->c语言容器类工具列
			转自:http://www.cnblogs.com/sniperHW/category/374086.html cocos2dx内存管理 摘要: cocos2dx基于引用计数管理内存,所有继承自CCO ... 
- hammer.js移动端手势库
			hammer.js 是一个多点触摸手势库,能够为网页加入Tap.Double Tap.Swipe.Hold.Pinch.Drag等多点触摸事件,免去自己监听底层touchstart.touchmove ... 
- 记一个在docker中运行多线程event_loop.run_forever()的bug
			问题简介 我写爬虫,用到了asyncio相关的事件循环,新建了一个线程去run_forever(),在docker中运行.后来程序有异常,主线程挂了,但是竟然不报错.查了很久,才找出来. 如果你新建一 ... 
- 160314、MVC设计模式
			MVC的由来 精彩内容 MVC模式最早由Trygve Reenskaug在1978年提出 ,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设 ... 
- java前后台开发之后台自动上传下载
			package downloadTest; import java.io.BufferedReader; import java.io.File; import java.io.FileInputSt ... 
- 修改\Servlet和Jsp模板的方法
			1.在MyEclipse6.6\myeclipse\eclipse\plugins下找到com.genuitec.eclipse.wizards 2.templates\替换Servlet.java ... 
- mapjoin与reducejoin
			一.mapjoin 1.Mapper类 package com.css.mapjoin; import java.io.BufferedReader; import java.io.FileInput ... 
