Спасибо, что эти шаги решили проблему
ружаю изображения в FirebaseStorage, но часто они неправильно отображаются при их отображении. Я обнаружил ExifInterface, который может определять ориентацию изображения, поворачивать и переворачивать его при необходимости.
При выборе изображения из области галереи на моем телефоне я получаю эту ошибку.
Я могу выбрать изображение на своем телефоне из галереи, и оно может быть отображено на странице.
Разница между адресом URI и данными одна/
Data.getData() address : content://media/external/images/media/53331
uri.toString() address: content:/media/external/images/media/53331
Я использую адрес URI в качестве абсолютного пути к изображениям, чтобы иметь возможность поворачивать его при необходимости. Я передаю это значение в другой метод под названиемmodifyOrientation
который затем вращает его. Как только он передается в метод, он достигает строки
ExifInterface ei = new ExifInterface(image_absolute_path);
и затем возвращается к улову, поскольку файл не был найден.
Ниже приведена вся ошибка, которую я получаю, а также весь мой код. Как я могу исправить эту проблему, которая у меня возникла. Поэтому, когда я передаю URI в следующий метод, он на самом деле имеет правильный адрес.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
final FirebaseUser user = auth.getCurrentUser();
if (requestCode == GALLERY_INTENT && resultCode == RESULT_OK)
{
progressDialog = new ProgressDialog(getActivity());
progressDialog.setMessage("Displaying Image...");
progressDialog.show();
//imageUri = data.getData();
//Picasso.get().load(imageUri).into(profileImage);
final Uri uri = data.getData();
File file = new File(uri.toString());
file.getAbsolutePath();
progressDialog.dismiss();
try
{
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);
modifyOrientation(bitmap,file.getAbsolutePath());
profileImage.setImageBitmap(bitmap);
}
catch(IOException e)
{
e.getStackTrace();
}
}
}
public static Bitmap modifyOrientation(Bitmap bitmap, String image_absolute_path) throws IOException {
ExifInterface ei = new ExifInterface(image_absolute_path);
int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
return rotate(bitmap, 90);
case ExifInterface.ORIENTATION_ROTATE_180:
return rotate(bitmap, 180);
case ExifInterface.ORIENTATION_ROTATE_270:
return rotate(bitmap, 270);
case ExifInterface.ORIENTATION_FLIP_HORIZONTAL:
return flip(bitmap, true, false);
case ExifInterface.ORIENTATION_FLIP_VERTICAL:
return flip(bitmap, false, true);
default:
return bitmap;
}
}
public static Bitmap rotate(Bitmap bitmap, float degrees) {
Matrix matrix = new Matrix();
matrix.postRotate(degrees);
return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
}
public static Bitmap flip(Bitmap bitmap, boolean horizontal, boolean vertical) {
Matrix matrix = new Matrix();
matrix.preScale(horizontal ? -1 : 1, vertical ? -1 : 1);
return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
}