一、Bitmap转为Base64字符串
a) Bitmap按照JPEG格式转码
try {
ByteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
byte[] imgByte = out.toByteArray();
return Base64.encodeToString(imgByte, Base64.DEFAULT);
} catch (Exception e) {
return null;
}
解决办法:使用PNG格式转码
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
b) Bitmap按照PNG格式转码,仍然出现毛边
原因:
Base64加密算法的flags参数为DEFAULT时,如果字符串过长(一般超过76),会自动在中间加一个换行符,字符串最后也会加一个换行符。导致和其他模块对接时结果不一致。
解决办法:flags参数改为NO_WRAP
Base64.encodeToString(imgByte, Base64.NO_WRAP);
二、裁剪图片小于规定的大小
调用系统的Crop实现裁剪:
- Intent intent = new Intent("com.android.camera.action.CROP");
- intent.setDataAndType(uri, "image/*");
- //下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪
- intent.putExtra("crop", "true");
- // aspectX aspectY 是宽高的比例
- intent.putExtra("aspectX", 1);
- intent.putExtra("aspectY", 1);
- // outputX outputY 是裁剪图片宽高
- intent.putExtra("outputX", 600);
- intent.putExtra("outputY", 600);
- intent.putExtra("return-data", true);
解决办法:设置下面2个参数
putExtra("scale", true); //黑边
putExtra("scaleUpIfNeeded", true); //黑边