我几乎检查了有关该主题的所有问答。但是,我找不到合适的解决方案。
我正在开发OCR应用程序,并且手机的定位问题。最后,我修复了Camera Preview部分。而且,OCR可以正确定向图像。
但是,现在,画廊的照片又出现了另一个问题。当我从图库中加载照片时,只有使用“相机”按钮(向左按钮)拍照的照片才有该问题。 Google的其他照片效果很好。因此,我认为问题出在相机功能上,因为它没有改变Google照片或其他应用程序中任何其他照片的方向。
所以,我认为这是保存文件的问题。所以,我尝试了这种方法。
public static void saveBitmaptoJpeg(Bitmap bitmap, String folder, String name) {
String ex_storage = Environment.getExternalStorageDirectory().getAbsolutePath(); // Get Absolute Path in External Sdcard
String foler_name = "/" + folder + "/";
String file_name = name + ".jpg";
String string_path = ex_storage + foler_name;
File file_path;
try {
file_path = new File(string_path);
if (!file_path.isDirectory()) {
file_path.mkdirs();
}
FileOutputStream out = new FileOutputStream(string_path + file_name);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.close();
} catch (FileNotFoundException exception) {
Log.e("FileNotFoundException", exception.getMessage());
} catch (IOException exception) {
Log.e("IOException", exception.getMessage());
}
}
保存。并加载正确方向的照片。但是,它不起作用。所以,我用这些方法检查照片的方向。
public 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);
Log.d(TAG, "갤러리 orientation: " + orientation);
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 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 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);
}
它表示方向为0。另一方面,当我拍摄照片时,方向为6(*指向|,*为顶部的照片)
我将这些方法用于Camera。
// 카메라 결과 알맞게 조절
private int resolveBitmapOrientation(File bitmapFile) {
Log.d(TAG, "resolveBitmapOrientation: " + bitmapFile.getAbsolutePath());
if (!bitmapFile.exists()) {
Log.d(TAG, "bitmapFile 존재하지 않음.");
} else {
Log.d(TAG, "bitmapFile 존재함.");
}
ExifInterface exif = null;
try {
exif = new ExifInterface(bitmapFile.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
return exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
}
private Bitmap applyOrientation(Bitmap bitmap, int orientation) {
int rotate = 0;
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;
default:
return bitmap;
}
int w = bitmap.getWidth();
int h = bitmap.getHeight();
Matrix mtx = new Matrix();
mtx.postRotate(rotate);
return Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, true);
}
我认为相机的方法也可能对图库照片有用。因此,我应用了那些方法。但这也不起作用。
如何解决此问题?