我需要先压缩图像,然后再通过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();
}
}
答案 0 :(得分:-1)
您可以使用调整图像大小而不是使用压缩来做到这一点。
这里是调整大小的代码
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;
}