Ориентация изображения изменяется при загрузке изображения на сервер

Я использую следующий код для загрузки изображения на сервер, оно успешно загружено, но ориентация изображения меняется с -90.

Я не понял, как решить эту проблему. Мое изображение в SDCard находится в правильной ориентации, но я не узнал, почему это изображение меняет свою ориентацию.

HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpPost httpPost = new HttpPost(image_upload);

Log.e("strImagePath.... before uploading", al_image_paths.get(i));


multipartContent.addPart("image", new FileBody(new File(al_image_paths.get(i))));

multipartContent.addPart("sellleadid", new StringBody("2234"));
multipartContent.addPart("action", new StringBody("Send Used Car Images"));
multipartContent.addPart("app_id", new StringBody("1"));

totalSize = multipartContent.getContentLength();

httpPost.setEntity(multipartContent);
HttpResponse response = httpClient.execute(httpPost, localContext);
String serverResponse = EntityUtils.toString(response.getEntity());
Log.e("serverResponse image", "<> " + serverResponse);

2 ответа

К сожалению, нет другого способа изменить ориентацию файла фотографии, кроме как загрузить изображение, повернуть его вручную и повторно сохранить в правильной ориентации.

Вы можете сослаться на этот код для образцов поворота изображения:

int rotate = 0;
try {
    getContentResolver().notifyChange(imageUri, null);
    File imageFile = new File(al_image_paths.get(i)); 
    ExifInterface exif = new ExifInterface(imageFile.getAbsolutePath());
    int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);

    switch (orientation) {
        case ExifInterface.ORIENTATION_ROTATE_270:
            rotate = 270;
            break;
        case ExifInterface.ORIENTATION_ROTATE_180:
            rotate = 180;
            break;
        case ExifInterface.ORIENTATION_ROTATE_90:
            rotate = 90;
            break;
    }
    Log.v(Common.TAG, "Exif orientation: " + orientation);

    Bitmap rotattedBitmap= BitmapFactory.decodeFile(al_image_paths.get(i));           
    Matrix matrix = new Matrix();
    matrix.postRotate(rotate);
    return Bitmap.createBitmap(rotattedBitmap, 0, 0, rotattedBitmap.getWidth(), rotattedBitmap.getHeight(), matrix, true);
} catch (Exception e) {
    e.printStackTrace();
}

РЕДАКТИРОВАТЬ: В вашем случае вы должны сделать следующее:

  1. Определить изображение EXIF ​​ориентации
  2. Создать растровое изображение
  3. Повернуть растровое изображение
  4. Сохранить растровое изображение как изображение
  5. Загрузить изображение на сервер

Использовать этот код

ExifInterface exif;
int angle = 0;
try {
    exif = new ExifInterface(myUri.getPath());
    int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
    if (orientation == ExifInterface.ORIENTATION_ROTATE_90) {
        angle = 90;
    } else if (orientation == ExifInterface.ORIENTATION_ROTATE_180) {
        angle = 180;
    }
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
Matrix  matrix1 = new Matrix();

//set image rotation value to 45 degrees in matrix.
matrix1.postRotate(angle);

//Create bitmap with new values.
Bitmap photo = Bitmap.createBitmap( bitmap, 0, 0, bitmap.getWidth(),  bitmap.getHeight(), matrix1, true);
Другие вопросы по тегам