Android 图片压缩与Bitmap转Base64编码/转File
程序员文章站
2022-03-04 17:21:21
...
图片压缩
/* @param path 图 片路径
* @param quality 质量 0-100,100表示原图
* @return
*/
public static Bitmap losslessScale(String path,int quality){
Bitmap bitmap = BitmapFactory.decodeFile(path);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.JPEG, quality, baos);
Log.e("哈哈","原始大小:" + baos.toByteArray().length);
// 因为质量压缩不是可以无限缩小的,所以一张高质量的图片,再怎么压缩,
// 最终size可能还是大于你指定的size,造成异常
// 所以不建议循环压缩,而是指定quality,进行一次压缩就可以了
// while (baos.toByteArray().length / 1024 > maxSize) {
// quality -= 10;
// baos.reset();
// bitmap.compress(CompressFormat.JPEG, quality, baos);
// Log.e("哈哈","过程中大小为:"
// + baos.toByteArray().length);
// }
bitmap.compress(CompressFormat.JPEG, quality, baos);
Log.e("哈哈","最终大小" + baos.toByteArray().length);
Bitmap compressedBitmap = BitmapFactory.decodeByteArray(
baos.toByteArray(), 0, baos.toByteArray().length);
return compressedBitmap;
}
Bitmap转Base64编码
/**
* //将Bitmap转换成字符串
* @param bitmap
* @return
*/
public String bitmapToString(Bitmap bitmap) {
String string = null;
ByteArrayOutputStream bStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, bStream);
byte[] bytes = bStream.toByteArray();
string = Base64.encodeToString(bytes, Base64.DEFAULT);
return string;
}
Bitmap转File文件
public static File compressImage(Bitmap bitmap) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
int options = 100;
while (baos.toByteArray().length / 1024 > 500) { //循环判断如果压缩后图片是否大于500kb,大于继续压缩
baos.reset();//重置baos即清空baos
options -= 10;//每次都减少10
bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中
long length = baos.toByteArray().length;
}
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
Date date = new Date(System.currentTimeMillis());
//图片名
String filename = format.format(date);
File file = new File(Environment.getExternalStorageDirectory(), filename + ".png");
try {
FileOutputStream fos = new FileOutputStream(file);
try {
fos.write(baos.toByteArray());
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Log.i("TAG", "compressImage: " + file);
// recycleBitmap(bitmap);
return file;
}
public static void recycleBitmap(Bitmap... bitmaps) {
if (bitmaps == null) {
return;
}
for (Bitmap bm : bitmaps) {
if (null != bm && !bm.isRecycled()) {
bm.recycle();
}
}
}
推荐阅读
-
android 图片压缩,base64转换上传
-
Android把bitmap转为file类型 ,图片转base64**
-
Android 图片数据格式转换url图片地址转base64,url转Bitmap,Bitmap转base64,base64转Bitmap,ImageView 加载Bitmap,旋转图片角度
-
android 图片工具类 (图片压缩 图片长按缓存 Bitmap转Base64 Bitmap转File File转Bitmap 打开系统相册解析URI)
-
Android本地图片压缩+转base64
-
java将图片转化为base64和base64转化为图片编码并保存在本地;以及android转base64编码
-
Android Base64转换图片,SimpleAdapter动态显示Bitmap图片
-
Android 图片压缩与Bitmap转Base64编码/转File