- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的问题是,在某些设备上,一些从图库中选取的图像在 ImageView 中旋转。我找到了很多使用ExifInterface来解决这个问题的资料,所以我尝试使用它。但是当我尝试使用图像路径创建 ExifInterface 实例时出现奇怪的异常。
W/ExifInterface: Invalid image
java.io.IOException: Invalid marker: 89
at android.media.ExifInterface.getJpegAttributes(ExifInterface.java:1598)
at android.media.ExifInterface.loadAttributes(ExifInterface.java:1334)
at android.media.ExifInterface.<init>(ExifInterface.java:1052)
at com.igeotrack.igeo.ui.fragment.ProfileFragment.modifyOrientation(ProfileFragment.java:554)
at com.igeotrack.igeo.ui.fragment.ProfileFragment.setLogo(ProfileFragment.java:515)
at com.igeotrack.igeo.ui.fragment.ProfileFragment.onViewCreated(ProfileFragment.java:186)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1127)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1290)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1677)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:536)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5433)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
at dalvik.system.NativeStart.main(Native Method)
我的路径没有错,因为我之前用过,而且还行。这是我的代码。
private void setLogo() {
File mediaStorageDir = new File(Environment.getExternalStorageDirectory()
+ "/Android/data/"
+ getActivity().getPackageName()
+ "/Files");
String mImageName="iGeoTrackUserAvatar.jpg";
File mediaFile = new File(mediaStorageDir.getPath() + File.separator + mImageName);
// if (mediaFile.exists()) {
// Glide.with(getActivity())
// .load(mediaFile)
// .transform(new SystemUtils.CircleTransform(getActivity()))
// .diskCacheStrategy(DiskCacheStrategy.NONE)
// .skipMemoryCache(true)
// .into(mUserLogo);
// }
Bitmap bitmap = BitmapFactory.decodeFile(mediaFile.getPath());
try {
bitmap = modifyOrientation(bitmap, mediaFile.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
mUserLogo.setImageBitmap(bitmap);
}
这段代码是我从 stackoverflow.com 上的许多答案中找到的
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);
}
我没有找到关于这个问题的任何信息,但我找到了 Jake Wharton 的 mention这可能是 Android 中的错误。你能帮助我吗?因为我不明白如何解决这个问题。
最佳答案
CommonsWare 的建议非常好。当我使用 Gradle com.android.support:exifinterface:25.1.0
编译时,此类已开始工作,而不是标准实现。
关于android - 这是 ExifInterface 中的错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41489389/
我的应用程序拍摄肖像照片。 在画廊里我看到了 但是当保存到我的服务器时,我看到它是横向的。 我检查了我的图像文件并得到了 ORIENTATION_ROTATE_90 这是什么意思? 我尝试将其设置为O
我用过ExifInterface在 Android 应用程序中用于获取图像的相机方向。我的代码完美适用于 Build.VERSION.SDK_INT = 24) {
我使用这段代码来获取有关 sdcard 中图像的信息, File file = (File) iterator.next(); ExifInterface ex
我正在尝试从画廊的图像中提取 Exif 数据,如下所示: @Override protected void onActivityResult(int requestCode, int resultCo
我想获取位图的方向。我使用这段代码: ExifInterface ei = new ExifInterface(photoPath); int orientation = ei.getAttribut
下面是我的代码- try { InputStream inputStream = getAssets().open("thumbnail.jpg"); exifInterface = new
当我将 picasso 从 2.5.2 升级到 2.71828 并执行 gradle sync 时,我看到了一个exif接口(interface)错误: 错误: Failed to resolve:
支持库版本 25.1.0 添加了一个新功能 ExifInterface,它向后移植了添加到 Android 7.1 中的 ExifInterface 的功能。 但是如何在不提供默认值的情况下检查特定文
我需要弄清楚如何从位图中获取方向。事情是 - 图像并不总是出现在设备上,所以我不能使用 ExifInterface 来获取方向信息。不知何故,它总是横向显示位图,长度和宽度属性对我帮助不大。 有谁知道
在尝试使用文件路径初始化 exif 接口(interface)实例时,我无法找出 ExifInterface 构造函数抛出的异常。 已更新请按要求查看下面的详细代码。 文件下载功能 public vo
Camera.Parameters 中的 setRotation 方法 并不适用于所有设备。有人建议手动更改EXIF信息来解决问题。你能给我一个简短的例子,说明如何使用 ExifInterface 设
我正在尝试将经纬度和其他数据写入自定义相机应用程序中 jpeg 的 Exif header 。通常,android 会自动使用光圈、ISO、快门速度等数据填充 header 。但是,当我手动添加创建一
我的问题是,在某些设备上,一些从图库中选取的图像在 ImageView 中旋转。我找到了很多使用ExifInterface来解决这个问题的资料,所以我尝试使用它。但是当我尝试使用图像路径创建 Exif
我正在尝试获取图像的方向(来自图库),但 ExifInterface 始终返回 0。这是代码: int orientation = exif.getAttributeInt(ExifInterface
我最近添加了 implementation 'com.google.android.play:core:1.6.4'作为我的 android 项目中的依赖项,现在 Intellij 提示 Progra
我一直在将图像上传到 FirebaseStorage,但在显示它们时,它们通常是错误的。我发现了可以确定图像方向并在必要时旋转和翻转图像的 ExifInterface。 在我的手机上从图库区域选择图像
我正在开发一个应用程序。我得到时间、日期、经度和纬度。 所有信息获取成功。 现在我想格式化从 ExifInterface.TAG_DATETIME 获得的日期和时间。 我该怎么做? 主 Activit
我在相机的 onActivityResult 上通过 bundle 传递位图。 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
我正在尝试使用 ExifInterface 更改 exif 标签。我使用 setAttribute() 并调用 saveAttributes()。标签暂时保存,下次旧值还在,没有更新.........
我正在尝试检查位图的方向并在需要时翻转它,但在应用代码时出现错误。这是我尝试使用 ExifInterface 翻转图像时的代码: @RequiresApi(api = Build.VERSION_CO
我是一名优秀的程序员,十分优秀!