转-android图片降低图片大小保持图片清晰的方法
http://i.cnblogs.com/EditPosts.aspx?opt=1
android里面对于图片的处理一直是个比较烦人的问题,烦人之处在于一个不小心,就有可能造成OOM。
最近碰到一个关于图片上传的问题,图片上传我们肯定要保证2点,一点是图片的大小尽可能的小,
但是图片的清晰度又要有一定的保证,基于此我们有两个方向,一个是将图片缩小,第二个是将图片的质量降低。
对于缩小图片,我们的方法不少,可以裁剪,可以缩放;
而另一种降低图片的方法就是降低质量,使用这个方法后图片就会变得模糊,如果我们降低质量太多,会发现我们的图片都变成了很大的像素点,有过图像分析的都知道,我们的图片是由一个个像素点表示的,降低质量是通过一定的算法来的,有些可以直接使用将一个“田”的四个像素,按照我们的约定用一个值来代替,这样会将原来有区分的四个像素点变为一个没有区分的像素点,当我们降低图片的质量在肉眼不可分辨的阶段的时候,其实我们是看不出来图片的质量有什么直接的变化,但是一旦超过了我们肉眼能够识别的区域,我们就会有很直观的变化。
上面两个方法也是现在网络上流传比较多的两个方法,但是有些时候我们发现使用那两个方法其实还是达不到我们的要求,在网上找了一些方法,我觉得还不错,其中在我的一个项目中使用到了其中的一个方法。
1. 不使用jpg格式的图片,使用其他格式的图片,我看了看,发现了webp这个格式有很大的优点,
其一是这个格式的图片在保持和jpg相同信息的大小的情况下,其大小比jpg小39%(网上人家说的,具体的大小你们可以看看权威文献,我这里只是想表达大小减小了很多),看了一篇文章,说的QQ里面的表情就是使用的这个格式的图片,不过这个图片的解析比解析jpg慢大约10倍的时间(无论怎么慢可定也是不会很慢的,网上人家测试的结果我记的不是很清楚了100ms左右吧)。
在android 4.0之前官方的API里面是没有相关的方法提供的,但是4.0之后,api里面提供了相关的方法。
请参考这里的文章,写的很好:http://www.uisdc.com/image-format-webp-introduction
2. 使用so文件来压缩jpg,看过一篇文章,人家讲了微信里面为什么android版的图片和ios版的图片清晰度为什么差别那么多,人家的团队摸索了很久,好像说是android和ios都是使用了同一个包来对图片进行压缩,但是里面里面有个参数在android里面默认的是false,但是ios好像对这个参数的处理比较好点,这样ios表现的清晰度就比android更加清晰,找不到原文了,不知道这个是不是原文,还是附上一个连接地址:http://www.geekfan.net/11651/
第2中方法是我们项目中现在使用到的方法,会用到NDK编译,不过里面已经提供了相关的so库,如果不想编译,直接拷出来用就好了,本来想直接改为公司包名的,但是有些头文件就是没找到。。。没改成,自己C语言的基础还是差了点,以后继续学习。
转-android图片降低图片大小保持图片清晰的方法的更多相关文章
- pyqt5:图片自适应QLabel大小和图片移除
参考链接: https://www.e-learn.cn/content/qita/669569 图片自适应QLabel大小 # coding=utf- import sys from PyQt5.Q ...
- JS控制图片显示的大小(图片等比例缩放)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【JS控制图片显示的大小(图片等比例缩放)】
效果: 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...
- Android中的Glide加载图片
注意:在Android Studio的项目的build.gradle中添加: compile 'com.github.bumptech.glide:glide:3.6.1' 然后同步一下 目录: 使用 ...
- Android之本地相冊图片选取和拍照以及图片剪辑
转载请注明出处:http://blog.csdn.net/loveyaozu/article/details/51160482 相信有非常多Android开发者在日常开发中,因为项目需求,须要我们的A ...
- Android高效内存2:让图片占用尽可能少的内存
Android高效内存:让图片占用尽可能少的内存 一.让你的图片最小化 1.1 大图小图内存使用情况对比 大图:440 * 336 小图:220 * 168 资源目录:xhdpi 小图的高宽都是 ...
- Android压缩图片到100K以下并保持不失真的高效方法
前言:目前一般手机的相机都能达到800万像素,像我的Galaxy Nexus才500万像素,拍摄的照片也有1.5M左右.这么大的照片上传到服务器,不仅浪费流量,同时还浪费时间. 在开发Android企 ...
- 62.Android之各分辨率定义的图片规格
转载:http://www.nljb.net/default/Android%E4%B9%8B%E5%90%84%E5%88%86%E8%BE%A8%E7%8E%87%E5%AE%9A%E4%B9%8 ...
- Android webview实现上传图片的效果(图片压缩)
mainactivity代码 package com.bwie.webviewupload; import java.io.ByteArrayInputStream; import java.io.B ...
随机推荐
- Android Studio 使用教程
http://www.tuicool.com/articles/amMvM3B 用 Android Studio 开发安卓 APP-使用篇 http://ask.android-studio.org/ ...
- perform-two-phase-commits/
https://docs.mongodb.com/manual/tutorial/perform-two-phase-commits/
- CENTOS 下编译HTK
在centenos下编译HTK碰到缺少libX11库,需要安装 libX11-dev libXext-dev libXtst-dev
- [C# 基础知识梳理系列]专题六:泛型基础篇——为什么引入泛型
引言: 前面专题主要介绍了C#1中的2个核心特性——委托和事件,然而在C# 2.0中又引入一个很重要的特性,它就是泛型,大家在平常的操作中肯定会经常碰到并使用它,如果你对于它的一些相关特性还不是很了解 ...
- 使用Ef时,对一个或多个实体的验证失败。有关详细信息,请参见“EntityValidationErrors”属性。
EntityValidationErrors 关于如何查看 EntityValidationErrors 详细信息的解决方法 我们在 EF 的编程中,有时候会遇到这样一个错误: 但是,按照他的提示 ...
- centos7通过yum安装mysql,并授权远程连接
安装: CentOS 7的yum源中没有正常安装MySQL的mysql-sever文件,需要去官网上下载(通过安装mysql的yum容器,再通过yum安装mysql) 注:安装前,需要卸载所有的mar ...
- TaffyDB:开源JavaScript数据库
你是否曾经注意到javascript的对象有点像数据库中的记录,你把很多javascript对象包装到一起时就像是你在处理一个数据库中的表,TaffyDB是一个Javascript库,它提供了强大的数 ...
- Externalizable接口 序列化
Java默认的序列化机制非常简单,而且序列化后的对象不需要再次调用构造器重新生成,但是在实际中,我们可以会希望对象的某一部分不需要被序列化,或者说一个对象被还原之后, 其内部的某些子对象需要重新创建, ...
- webqq协议请求交互过程
1.http://my.oschina.net/ij2ee/blog/191692 2.http://www.qqxieyi.com/fenxi_show.asp?id=34
- java通过ftp和sftp上传war包上传到Linux服务器实现自动重启tomcat的脚本代码
ar包自动上传Linux并且自动重启tomcat 用的是jdk1.7出的文件监控 支持ftp和sftp,支持多服务器负载等 配置好config 非maven项目导入直接使用 #\u76D1\u542C ...