图片压缩保存
2016-07-20 18:37
260 查看
因为图片存储特性,当前内存读取Byte构造的Bitmap如不存储则只能使用一次。 因为图片大小缩放是图片自生属性操作。图片质量变化,属于动态像素模糊。 所以图片质量缩放对应的内存输出流不能保留。则在存储压缩图片的时候,需 要再次进行质量压缩。
第一:我们先看一下文件命名: private static char HEX_DIGITS[] = {'0', '1', '2', '3', '4', '5', '6',
'7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
private static String toHexString(byte[] b) {
StringBuilder sb = new StringBuilder(b.length * 2);
for (int i = 0; i < b.length; i++) {
sb.append(HEX_DIGITS[(b[i] & 0xf0) >>> 4]);
sb.append(HEX_DIGITS[b[i] & 0x0f]);
}
return sb.toString();
}
第二:我们来压缩保存图片:
/** 保存图片到本地路径 */ public String saveFile(Bitmap image, int limitKB) { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG, 100, baos); int options = 100; while (baos.size() / 1024 > limitKB) { baos.reset(); image.compress(Bitmap.CompressFormat.JPEG, options, baos); options -= 10; } byte[] tempBytes = baos.toByteArray(); MessageDigest md5 = MessageDigest.getInstance("MD5"); // md5图片获得md5码 md5.update(tempBytes); String imageMd5 = toHexString(md5.digest()).toLowerCase(); ByteArrayOutputStream arrayOutputStream = null; String imageRoot = FilePathUtils.getUserEditPath(); String filename = imageRoot + imageMd5 + ".jpg"; FileOutputStream outputStream = new FileOutputStream(new File(filename)); arrayOutputStream = new ByteArrayOutputStream(); arrayOutputStream.write(tempBytes); arrayOutputStream.writeTo(outputStream); return filename; } catch (Exception e) { e.printStackTrace(); } return null; }
相关文章推荐
- iOS开发的22个奇葩技巧
- 二叉堆C语言实现
- Codeforces Round #363 (Div. 1) B. Fix a Tree 拆环+合并树
- 浏览器内嵌显示pdf文档
- 理解 C 语言中的复杂声明
- pl/sql developer中如何导出oracle数据库结构? 参考文章一
- 机器 · 人 | 可重复的事情,让机器去做
- 转: 解决MSYS2下的中文乱码问题
- 多层感知机
- java线程池(ThreadPoolExecutor)实例讲解
- ghmm在 Linux 上安装
- Python 学习笔记(七)验证码识别1 整体算法 (
- ghmm在 Linux 上安装
- Vim正则表达式-python print一键加括号
- Hadoop学习重点体系结构
- 常见验证码的弱点与验证码识别
- 夫妻银行卡取钱之初识单例模式
- 数据库表中获取随机数据
- 那些年用node接入微信走过的坑之(四)---微信扫码登录第三方网站
- 从centos6升级到centos7步骤