首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何找出画廊的图像是用肖像还是用相机拍摄的风景。

如何找出画廊的图像是用肖像还是用相机拍摄的风景。
EN

Stack Overflow用户
提问于 2018-11-10 16:28:32
回答 2查看 74关注 0票数 0
  • 我在画廊里有一张照片是从照相机上拍出来的
  • 我试图找出图像是portrait还是landscape

I有从 代码 作为从下面获得的路径

代码语言:javascript
运行
复制
/storage/emulated/0/DCIM/Camera/IMG_20181110_211757.jpg

然后,我使用ExifInterface查找方向:

代码语言:javascript
运行
复制
 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的身份获得方向

如何解决这个问题

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-10 16:45:26

我在画廊里有一张照片是从照相机上拍出来的

开发人员无法保证任何特定的图像来自相机应用程序,除非开发人员是该相机应用程序的作者。

我想弄清楚这幅画是肖像还是风景

不要求图像是肖像或景观。例如,相机应用程序可能会将照片裁剪成圆形或方形。

我从下面的代码中获得了路径

对于许多设备上的大量Uri值,该代码将失败。如果要将ExifInterface用于Uri,则使用getContentResolver().openInputStream()获取由Uri标识的内容的InputStream,然后将该InputStream传递给构造函数

我总是以ExifInterface.ORIENTATION_UNDEFINED的身份获得方向

图像不需要有EXIF头,更不用说ExifInterface.TAG_ORIENTATION了。

如果该标记不存在,则可以检查图像的宽度和高度并进行猜测:

  • 如果宽度大于高度,它可能是景观。
  • 如果高度大于宽度,它可能是肖像。

这将失败的方形图像,这将失败的裁剪图像(例如,照片是采取肖像画,但用户裁剪它的宽度现在大于高度)。

最好的解决方案是改变你的应用程序,不关心图像是肖像还是景观。其次,最好的解决方案是询问用户如何处理图像,也许您可以使用上面的算法来设置默认选项。

票数 2
EN

Stack Overflow用户

发布于 2018-11-10 16:41:50

通过更改路径访问过程来尝试,如下所示

代码语言:javascript
运行
复制
File imFile = new File(imagePath);
ExifInterface ei = new ExifInterface(imFile.getAbsolutePath());

这将解释Android getAbsolutePath()不返回完整路径 it

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53240985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档