portrait
还是landscape
I有从 代码 作为从下面获得的路径
/storage/emulated/0/DCIM/Camera/IMG_20181110_211757.jpg
然后,我使用ExifInterface查找方向:
public static void getCameraPhotoOrientation(Activity activity, String imagePath) {
String path =getPath(activity,imagePath);
try {
ExifInterface ei = new ExifInterface(path);
int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_270:
Timber.d("Type-1");
break;
case ExifInterface.ORIENTATION_ROTATE_180:
Timber.d("Type-2");
break;
case ExifInterface.ORIENTATION_ROTATE_90:
Timber.d("Type-3");
break;
case ExifInterface.ORIENTATION_UNDEFINED:
Timber.d("Type-4");
break;
}
}catch (IOException ex){
ex.printStackTrace();
}
}
我总是以ExifInterface.ORIENTATION_UNDEFINED
的身份获得方向
如何解决这个问题
发布于 2018-11-10 16:45:26
我在画廊里有一张照片是从照相机上拍出来的
开发人员无法保证任何特定的图像来自相机应用程序,除非开发人员是该相机应用程序的作者。
我想弄清楚这幅画是肖像还是风景
不要求图像是肖像或景观。例如,相机应用程序可能会将照片裁剪成圆形或方形。
我从下面的代码中获得了路径
对于许多设备上的大量Uri
值,该代码将失败。如果要将ExifInterface
用于Uri
,则使用getContentResolver().openInputStream()
获取由Uri
标识的内容的InputStream
,然后将该InputStream
传递给构造函数。
我总是以ExifInterface.ORIENTATION_UNDEFINED的身份获得方向
图像不需要有EXIF头,更不用说ExifInterface.TAG_ORIENTATION
了。
如果该标记不存在,则可以检查图像的宽度和高度并进行猜测:
这将失败的方形图像,这将失败的裁剪图像(例如,照片是采取肖像画,但用户裁剪它的宽度现在大于高度)。
最好的解决方案是改变你的应用程序,不关心图像是肖像还是景观。其次,最好的解决方案是询问用户如何处理图像,也许您可以使用上面的算法来设置默认选项。
发布于 2018-11-10 16:41:50
通过更改路径访问过程来尝试,如下所示
File imFile = new File(imagePath);
ExifInterface ei = new ExifInterface(imFile.getAbsolutePath());
https://stackoverflow.com/questions/53240985
复制相似问题