【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);elseinSampleSize = 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);
转载于:https://www.cnblogs.com/kimmy/p/4780024.html
【android】 如何把gif图片下载到本地相关推荐
- python 下载图片到内存卡_python-23:将图片下载到本地
python-23 :将图片下载到本地 得到图片的网址之后我么你怎么将图片下载到本地 呢? 在 python 中我们使用 urllib 库里面的 urllib.urlretrieve() 函 数 又是 ...
- 微信小程序把图片下载到本地相册(附源码)
微信小程序保存网络图片到本地实现流程: 1.把图片下载到本地相册 2.检查用户的授权状态(三种状态:未授权,已授权,未同意授权),判断是否授权保存图片的能力,如果是用户点击了不同意授权给小程序保存图片 ...
- Vue中实现图片下载到本地功能和导出(下载)excel文件功能:
一.实现图片下载到本地功能 需求: 将勾选的列表项的id传给后台,让后台处理并下载对应的图片 1. 后台接口: 下载图片zip: GET /download 请求数据类型 application/x- ...
- 图片在canvas中显示,给canvas添加文字,文字描边,将canvas保存成图片下载到本地
Canvas简介 HTML5新增标签 Canvas API(画布)是在HTML5中新增的标签用于在网页实时生成图像,并且可以操作图像内容,基本上它是一个可以用JavaScript操作的位图(bitma ...
- java爬虫下载图片到磁盘_java入门爬虫(爬取网页的图片下载到本地磁盘)
java爬虫入门技术 我们需要用到http协议 从而建立java程序和网页的连接 URL url = new URL("https://www.ivsky.com/tupian/ziranf ...
- python下载图片被覆盖了_scrapy 将抓取内容中的图片下载到本地并替换内容中的原始图片...
使用scrapy采集的文章里面有很多图片,都是远程图片,我想把这些远程图片都下载下来,然后把图片地址全都改成相对路径. 我想把里面的图片都下载到本地,然后再把路径保存再item 里面. def par ...
- Selenium图片下载到本地的实例
目录 一.实例 指定网站 下载到本地的图片 今天与大家分享一个小案例 简单来说就是通过Selenium爬取京东/html页面的商品信息.图片... 一.实例 指定网站 下载到本地的图片 效果展示 ...
- vue中实现图片下载到本地
<imgsrc="../img/download.png"alt=""class="download_img"@click=" ...
- android图片下载到本地
1.联网权限 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />&l ...
最新文章
- Day19-File操作-创建 删除,文件过滤
- 使用netty编写IM通信界面
- #define与typedef的区别!
- 浏览器打不开计算机二级网页,电脑的的所有浏览器都打不开二级网页 该怎么处理 网上好多办法都尝试了 没用 谁能帮帮我 谢谢...
- JavaScript实现depth First Search深度优先搜索算法(附完整源码)
- Boost.MultiIndex 使用散列索引的示例
- ABAP的自学之路 ,初步认识ABAP 一
- 大学物理实验长度的测量实验报告_大学物理实验教案长度和质量的测量两篇
- Vue入门 ---- 组件通信
- java中JOptionPane类_Java学习之JOptionPane类
- Data-Driven Geometry Processing 3D Deep Learning
- Vue.js学习系列(九)---使用路由搭建单页应用(二)
- ALEXA解释(日IP500,可以使你进10万内)
- 一文读懂!最新Transformer预训练模型综述!
- vsphere 6.5 HA 提示:此主机当前没有管理网络冗余,该主机的vSphere HA检测信号数据存储数目为0 告警消除
- 七牛上传图片初探 开始上传 暂停上传 继续上传
- 入手python难不难_Python难不难?容易学吗?
- 计算机组成中位、字节、字、字长、存储单元、存储字、存储字的辨析
- 解决:pandas.errors.ParserError: Error tokenizing data. C error: Expected 2 fields in line 18, saw 4
- JS事件处理这一篇就够了!!
热门文章
- NPN三极管放大原理
- iTerm2 + Oh My Zsh,打造专属你的终端神器
- zsh: command not found: brew
- Flutter 嵌套深、刷新乱?少年,你怕是连Flutter的门槛都没摸到!
- Could not find metadata org.apache.maven.plugins:maven-archetype-plugin/maven-metadata.xml in local
- 简单JS小案例:五星好评
- 【STM32F429开发板用户手册】第18章 STM32F429的GPIO应用之跑马灯
- 压测、压力测试分析、UV、PV、通用性能提高、并发
- 模式识别实验matlab报告,西安交大模式识别实验报告.doc
- DSP TMS320F280049C——互补波形(一)