发表于: 2018-10-12 23:17:16
0 907
一、今天完成的事情
1. 学习了一些图片压缩方面的知识,因为之前往服务器上传照片时用的都是原图,现在手机的摄像头传感器越来越先进,一张照片动辄就是
5、6Mb大小, 直接上传原图会浪费大量的服务器资源,上传速度也会很慢。
图片压缩的方法有很多,今天学历需要用到的质量压缩。
质量压缩的原理是保持像素的前提下改变图片的位深及透明度,(即:通过算法抠掉(同化)了图片中的一些某个些点附近相近的像素),达到降低质量压缩文件大小的目的。
需要注意的是,质量压缩其实只能实现对file的影响,对加载这个图片出来的bitmap内存是无法节省的,还是那么大。因为bitmap在内存中的大小是按照像素计算的,也就是width*height,对于质量压缩,并不会改变图片的真实的像素(像素大小不会变)。
/**
* 质量压缩
*/
public static void qualityCompress(Bitmap bmp, File file) {
// 0-100
int quality = 30;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 把压缩后的数据存放到baos中
bmp.compress(Bitmap.CompressFormat.JPEG, quality, baos);
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write(baos.toByteArray());
fos.flush();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
核心方法就是.compress(),这个方法有三个参数,第一个是压缩后图片的格式,支持JPEG、PNG、WENBP三种格式;quality这个参数使用来设定压缩后图片的质量的,范围在0-100,设定的值越大,压缩后图片的质量就越好,但体积也会越大,这个可以更具具体要求做取舍;file是文件路径。
另外,还有一些优秀的开源库,比如luban,可以将图片压缩到很小的体积同时图片的整体质量还能保持得较好。
二、明天计划的事情
三、遇到的问题
今天在使用第三方依赖库时,报错:
More than one file was found with OS independent path 'META-INF/DEPENDENCIES'
原因是多个 jar 包里包含了同样的文件(DEPENDENCIES.txt),导致打包时因为担心相互覆盖问题而提示出错,在网上查到的解决办法都是在
build.gradle中加入如下配置项,排除掉中间生成的DEPENDENCIES.txt文件
android {
...
packagingOptions {
exclude 'META-INF/*'}
...
但还是会报错:
Error: Program type already present: org.apache.http.HeaderElementIterator
原因是多个jar包里包含了同样的HeaderElementIterator.class,文件,于是我把jar包里的HeaderElementIterator.class删了,重新编译,
又是一个新的报错:
Error: Program type already present: org.apache.http.HttpConnectionMetrics
原因同上,说明有不止一个类文件重复,删除以后还是继续报错,每次报的类都不一样,而且每次只报一个,总不能一个一个删啊,但是网上有没有查到方法,只好编译一次、删一个,编译一次删一个了,重复了几十次后,终于通过编译了.....不知道有没有简单点的解决办法,或者如何避免这种错误。
四、收获
学习了图片压缩,但学得比较浅。
评论