Этот вопрос, кажется, часто возникает, я много читал по этому вопросу, мой вопрос в том, когда я выбираю изображение из галереи и передаю его на результат работы не так, поэтому я хочу его прочитать и исправить, так что это всегда портрет, Я реализовал методы, которые работают для запуска камеры, съемки и проверки данных Exif, чтобы убедиться, что ее всегда портрет но это не похоже на работу для выбора изображений для галереи моей переменной скоростью вращения всегда будет возвращать 0Вертикальное изображение, выбранное из галереи на результат деятельности на андроид
ExifInterface exifInterface = new ExifInterface(imgFile.getAbsolutePath());
int rotation =
exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
int rotationInDegrees = exifToDegrees(rotation);
System.out.println(rotation);
Matrix matrix = new Matrix();
if (rotation != 0f) {
matrix.preRotate(rotationInDegrees);
Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 0,
0, bitmap.getWidth(), bitmap.getHeight(),
matrix,false);
imgView.setImageBitmap(bitmap2);
path = saveToInternalStorage(imageFileName,bitmap2,getApplicationContext());
}
else
path = saveToInternalStorage(imageFileName,bitmap,getApplicationContext());
}
catch (IOException e) {
e.printStackTrace();
}
ExifToDegrees методу
private static int exifToDegrees(int exifOrientation) {
if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_90) {
return 90;
}
else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_180) {
return 180; }
else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_270) {
return 270; }
else if (exifOrientation == 6) {
return 90; }
else if (exifOrientation == 3) {
return 180; }
else if (exifOrientation == 8) {
return 270; }
return 0;
}
Как уже упоминалось, я много читал об этом, некоторые говорят, что его ошибка с андроидом некоторые говорят, что его до сборщика файла новый недавнему-х, и мы должны использовать
getAbsolutePath()
и проверять для каждого SDK версия и будет сохранить изображение первого, я сделал все это не радость некоторые говорят, что мы не должны использовать Exif на всех и что
MediaStore.Images.ImageColumns.ORIENTATION
должен работать, но опять же это не сработало ,
Я нацеливание устройств с ICS на М (я все разрешения мне нужно должное) Я сохраняю изображение в мою папку
File directory = cw.getDir("SimpleAAC", Context.MODE_PRIVATE);
и сохранение пути в базе данных, я загрузить изображения из этой папки, используя путь из моей базы данных и с помощью универсального загрузчика изображений, спросив разрешений я запустить галерею этого
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,
"Select A Picture"), PICK_IMAGE_REQUEST);
dialog.dismiss();
здесь мой onActivityResult код для галереи
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data !=
null && data.getData() != null) {
Uri uri = data.getData();
BitmapFactory.Options bitmapOptions = new
BitmapFactory.Options();
bitmapOptions.inSampleSize = 4;
InputStream inputStream = null;
try {
inputStream = getContentResolver().openInputStream(uri);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Bitmap scaledBitmap = BitmapFactory.decodeStream(inputStream,
null, bitmapOptions);
String timeStamp = new
SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = timeStamp + ".jpg";
ContextWrapper cw = new ContextWrapper(getApplicationContext());
File directory = cw.getDir("SimpleAAC", Context.MODE_PRIVATE);
File mypath = new File(directory,imageFileName);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(mypath);
scaledBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//the relevant parts of this method(setThumbNailImageAndSave) are
// included above
finalPath = setThumbnailImageAndSave(imageView,mypath);
ImageLoader imageLoader = ImageLoader.getInstance();
DisplayImageOptions options = new
DisplayImageOptions.Builder().cacheInMemory(true)
.cacheOnDisc(true).resetViewBeforeLoading(true)
.showImageForEmptyUri(R.drawable.ic_insert_photo_black_24dp)
.showImageOnFail(R.drawable.ic_insert_photo_black_24dp)
.showImageOnLoading(R.drawable.ic_insert_photo_black_24dp).build();
imageLoader.displayImage(finalPath, imageView, options);
System.out.println(finalPath);
}
Итак, чтобы завершить этот вопрос, я ищу разъяснения, это ошибка? могу ли я обойти это, используя MediaStore.Images.ImageColumns.ORIENTATION, и если да, то как? это намерение.setAction (intent.ACTION_GET_CONTENT)? это изменения файла kitkat?
Честно говоря, я так много читал, противоречащую информацию об этом и ничего я, кажется, попробовать работы, спасибо за все ответы
Почему бы вам не просто измерить ширину и высоту. если ширина, если она больше высоты, вы можете предположить, что это было в пейзаже. –
Был там мой друг спасибо за ответ, это не работает для нескольких устройств, но, безусловно, план b @Eugene H –
Он работал для меня ..! Решено Решение [Решено: как повернуть изображение до ориентации по умолчанию, выбранное из галереи в android] (http://stackoverflow.com/questions/40758952/solved-how-to-rotate-image-to-its-defauld-orientation -selected-from-gallery-in) –