У меня есть приложение, которое захватывает фотографии с использованием родного Camera
, а затем загружает их на сервер. Моя проблема в том, что все фотографии имеют значение ориентации EXIF 0, и это помешает отображению в другом месте.
Как изменить ориентацию EXIF? Я не ищу способ исправить это для каждого обстоятельства, просто измените его на другое значение.
Я использую Samsung Galaxy Note 4
Я попробовал это решение, которое устанавливает ориентацию камеры перед фотографированием: Настройка ориентации фотофайла Android Photo
Camera c = Camera.open();
c.setDisplayOrientation(90);
Camera.Parameters params = mCamera.getParameters();
params.setRotation(0); // tried 0, 90, 180
c.setParameters(params);
но он не влияет на итоговые данные EXIF, его все еще всегда 0
Я также пробовал эти решения, когда изображение поворачивается после его принятия: Значение тега ориентации EXIF всегда 0 для изображения, сделанного с помощью приложения для портфолио с вертикальной камерой
и пока это поворачивает фотографию, ориентация EXIF по-прежнему всегда равна 0.
Я также попытался напрямую установить данные EXIF: Как сохранить данные Exif после сжатия растрового изображения в Android
private Camera.PictureCallback mPicture = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
final File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE, "");
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
ExifInterface exif = new ExifInterface(pictureFile.toString());
exif.setAttribute(ExifInterface.TAG_ORIENTATION, "3");
exif.saveAttributes();
fos.write(data);
fos.close();
//upload photo..
}
}
}
но EXIF Orientation по-прежнему 0 после загрузки.
Я также рассмотрел эти решения:
Данные Exif TAG_ORIENTATION всегда 0
Как записать exif-данные в изображение на Android?
Как получить правильную ориентацию изображения, выбранного из галереи изображений по умолчанию
как установить ориентацию изображения камеры?
но все они связаны с корректировкой ориентации путем вращения, что не влияет на данные EXIF, или напрямую на данные EXIF, которые, похоже, не работают.
Как я могу изменить данные ориентации EXIF файла от 0 до 3?
UPDATE:
вот мой код загрузки:
Bitmap sBitmap = null;
final File sResizedFile = getOutputMediaFile(MEDIA_TYPE_IMAGE, "_2");
try {
sBitmap = BitmapFactory.decodeStream(new FileInputStream(pictureFile), null, options);
} catch (FileNotFoundException e) {
Log.e("App", "[MainActivity] unable to convert pictureFile to bitmap");
e.printStackTrace();
return;
}
// ... compute sw and sh int values
Bitmap sOut = Bitmap.createScaledBitmap(sBitmap, sw, sh, false);
Bitmap rotatedBitmap = rotateBitmap(sOut, 3);
FileOutputStream sfOut;
try {
sfOut = new FileOutputStream(sResizedFile);
rotatedBitmap.compress(Bitmap.CompressFormat.JPEG, 70, sfOut);
sfOut.flush();
sfOut.close();
sBitmap.recycle();
sOut.recycle();
rotatedBitmap.recycle();
} catch (Exception e) {
Log.e("App", "[MainActivity] unable to save thumbnail");
e.printStackTrace();
return;
}
// upload small thumbnail
TransferObserver sObserver = transferUtility.upload(
"stills/small", /* The bucket to upload to */
filename + ".jpg", /* The key for the uploaded object */
sResizedFile /* The file where the data to upload exists */
);