我需要在通过Android应用程序将图像发送到服务器之前压缩图像。通过相机拍摄的图像非常大,需要先进行压缩。从相机拍摄图像时,有一些与图像相关的属性,如设备型号,光圈,位置等。
我正在尝试压缩图像,但在压缩过程中,图像的这些属性会丢失。如果有任何缺失的代码行或任何库来压缩图像而不丢失这些属性,请提供帮助。
private void compressImageAndAddToArrayList(Uri imageURI) {
Bitmap bm = null;
try
{
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
// bm = Media.getBitmap(mContext.getContentResolver(), imageLoc);
bm = BitmapFactory.decodeStream(mContext.getContentResolver().openInputStream(imageURI), null, options);
File folder = new File(Environment.getExternalStorageDirectory() + File.separator + "VDMS" + File.separator + "Camera");
folder.mkdirs();
String now = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss").format(new Date()).toString();
String fileName = caseID + "_" + now + ".jpg";
File imageFile = new File(folder + File.separator + fileName);
FileOutputStream out = new FileOutputStream(imageFile);
bm.compress(Bitmap.CompressFormat.JPEG, 64, out); // quality ranges from 0-100
bm.recycle();
addDocumentToArrayList(String.valueOf(1), Uri.fromFile(imageFile));
}
catch (Exception e)
{
e.printStackTrace();
}
}
您可以使用不使用compress调整图像大小来执行此操作。
这是调整大小的代码
public static Bitmap scaleDown(Bitmap realImage, float maxImageSize, boolean filter)
{
float ratio = Math.min((float) maxImageSize / realImage.getWidth(),
(float)maxImageSize / realImage.getHeight());
int width = Math.round((float) ratio * realImage.getWidth());
int height = Math.round((float) ratio * realImage.getHeight());
Bitmap newBitmap = Bitmap.createScaledBitmap(realImage, width, height,filter);
return newBitmap;
}