Как сжать изображение, не теряя его метаданные? - PullRequest
2 голосов
/ 19 апреля 2019

Мне нужно сжать изображения перед отправкой изображений на сервер через приложение 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();
    }
}

1 Ответ

0 голосов
/ 19 апреля 2019

Вы можете сделать это с помощью изменения размера изображения, не используя сжатие.

Вот код изменения размера

  •  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;
    
    
     }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...