压缩
2016-05-18 10:50
267 查看
// 宽高按比例缩放------保证不形变
private Bitmap ScaleCompress() throws IOException {
BitmapFactory.Options newOpts = new Options();
newOpts.inJustDecodeBounds = false;
Bitmap bitmap = BitmapFactory.decodeStream(getAssets()
.open("mmm_1.jpg"), null, newOpts);
System.out.println("qian:" + bitmap.getWidth() + " gao:"
+ bitmap.getHeight());
newOpts.inJustDecodeBounds = true;
bitmap = BitmapFactory.decodeStream(getAssets().open("mmm_1.jpg"),
null, newOpts);
newOpts.inJustDecodeBounds = false;
int w = newOpts.outWidth;
int h = newOpts.outHeight;
System.out.println("w===" + w + " h==" + h);
float hh = 50;
float ww = 50;
int be = 1;
if (w > h && w > ww) {
be = (int) (w / ww);
} else if (h > w && h > hh) {
be = (int) (h / hh);
}
newOpts.inSampleSize = be;
/**
* 通过设置颜色模式可以减小图片的大小,默认是Config.ARGB_8888; 但是,下面的质量压缩没法设置颜色模式,又会变回默认值,
* 所以质量压缩后,图片占用的内存可能增大, ----像素点减少,但是每个点占的位数增加了好多啊
*/
newOpts.inPreferredConfig = Config.RGB_565;
bitmap = BitmapFactory.decodeStream(getAssets().open("mmm_1.jpg"),
null, newOpts);
System.out.println("压缩之后:" + bitmap.getWidth() + " 高:"
+ bitmap.getHeight());
return bitmap;
}
// 质量压缩
private Bitmap QaulityCompress(Bitmap bitmap) throws IOException {
System.out.println("进入质量压缩");
ByteArrayOutputStream out = new ByteArrayOutputStream();
1. //第一个参数---要压缩的图片的格式,如果是PNG的话,就不压缩,
2. //第二个参数,相对的质量比例,注意 只是画质,0表示压缩成小图,到底多小--不知道,100表示尽量和原图一样清晰,但是也会压缩。0-100的其他数组,都会相应的做压缩,但不是严格按照比例,eg:原图是1024B字节的,你写压缩比例为10,压缩后的图坑定小于1024,但绝对不是102B
bitmap.compress(CompressFormat.PNG, 100, out);
bitmap.getWidth();
System.out.println("压缩前的大小:" + out.toByteArray().length);
int polity;
if (out.toByteArray().length <= 10240) {
polity = 100;
System.out.println("大小合适,适当压缩也可以");
} else {
System.out.println("偏大,要压缩");
polity = (int) (100 * (10 * 1024f) / out.toByteArray().length);
System.out.println("压缩比例为:" + polity);
}
out.reset();
bitmap.compress(CompressFormat.JPEG, polity, out);
System.out.println("压缩后的大小:" + out.toByteArray().length);
// }
return bitmap;
}
private Bitmap ScaleCompress() throws IOException {
BitmapFactory.Options newOpts = new Options();
newOpts.inJustDecodeBounds = false;
Bitmap bitmap = BitmapFactory.decodeStream(getAssets()
.open("mmm_1.jpg"), null, newOpts);
System.out.println("qian:" + bitmap.getWidth() + " gao:"
+ bitmap.getHeight());
newOpts.inJustDecodeBounds = true;
bitmap = BitmapFactory.decodeStream(getAssets().open("mmm_1.jpg"),
null, newOpts);
newOpts.inJustDecodeBounds = false;
int w = newOpts.outWidth;
int h = newOpts.outHeight;
System.out.println("w===" + w + " h==" + h);
float hh = 50;
float ww = 50;
int be = 1;
if (w > h && w > ww) {
be = (int) (w / ww);
} else if (h > w && h > hh) {
be = (int) (h / hh);
}
newOpts.inSampleSize = be;
/**
* 通过设置颜色模式可以减小图片的大小,默认是Config.ARGB_8888; 但是,下面的质量压缩没法设置颜色模式,又会变回默认值,
* 所以质量压缩后,图片占用的内存可能增大, ----像素点减少,但是每个点占的位数增加了好多啊
*/
newOpts.inPreferredConfig = Config.RGB_565;
bitmap = BitmapFactory.decodeStream(getAssets().open("mmm_1.jpg"),
null, newOpts);
System.out.println("压缩之后:" + bitmap.getWidth() + " 高:"
+ bitmap.getHeight());
return bitmap;
}
// 质量压缩
private Bitmap QaulityCompress(Bitmap bitmap) throws IOException {
System.out.println("进入质量压缩");
ByteArrayOutputStream out = new ByteArrayOutputStream();
1. //第一个参数---要压缩的图片的格式,如果是PNG的话,就不压缩,
2. //第二个参数,相对的质量比例,注意 只是画质,0表示压缩成小图,到底多小--不知道,100表示尽量和原图一样清晰,但是也会压缩。0-100的其他数组,都会相应的做压缩,但不是严格按照比例,eg:原图是1024B字节的,你写压缩比例为10,压缩后的图坑定小于1024,但绝对不是102B
bitmap.compress(CompressFormat.PNG, 100, out);
bitmap.getWidth();
System.out.println("压缩前的大小:" + out.toByteArray().length);
int polity;
if (out.toByteArray().length <= 10240) {
polity = 100;
System.out.println("大小合适,适当压缩也可以");
} else {
System.out.println("偏大,要压缩");
polity = (int) (100 * (10 * 1024f) / out.toByteArray().length);
System.out.println("压缩比例为:" + polity);
}
out.reset();
bitmap.compress(CompressFormat.JPEG, polity, out);
System.out.println("压缩后的大小:" + out.toByteArray().length);
// }
return bitmap;
}
相关文章推荐
- opengl 配置问题
- No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=armv7 armv7s)
- 5.STL简单链表(_cghList)的实现
- Android Studio 官方最新版下载地址(支持国内下载)
- qt程序安装包制作(windows系统)
- 判断CAD图纸版本
- dedecms列表页上一页下一页翻页单独调用的方法
- 高效懒人工具ButterKnife原理解析
- 重启图元遇到指定索引值重新绘制和glew通过NULL指定没有cpu数据拷贝到缓存区对象中
- Unique Paths
- Web开发中的请求重定向和内部转发的区别
- EasyDarwin自动停止推流
- SQLSERVER如何查看索引缺失
- 1815: easy problem
- 神经网络之激活函数(Activation Function)
- 【mysql】事物隔离级别
- vector debug和release下不一致的问题
- 排序算法——归并排序
- 其他格式转json样式
- 顶级威胁情报公司Norse为什么倒闭?数据不是情报