您的位置:首页 > 其它

图片压缩保存

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;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: