Android中位图压缩后如何保存Exif数据

2024-02-20

我需要从 SD 卡获取图像,创建、旋转并保存更改后的图像。 我尝试使用这段代码

Bitmap original = BitmapFactory.decodeFile(file.getAbsolutePath());

    ExifInterface originalExif = new ExifInterface(file.getAbsolutePath());
    int orientation = originalExif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);

    Matrix matrix = new Matrix();
    int rotate = 90;
    if(orientation == ExifInterface.ORIENTATION_ROTATE_90){
        rotate = 180;
    }else if(orientation == ExifInterface.ORIENTATION_ROTATE_180){
        rotate = 270;
    }else if(orientation == ExifInterface.ORIENTATION_ROTATE_270){
        rotate = 0;
    }

    matrix.postRotate(rotate);

    Bitmap bitmap = Bitmap.createBitmap(original, 0, 0, original.getWidth(), original.getHeight(), matrix, true);

    try {
        FileOutputStream out = new FileOutputStream(file);
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
        out.flush();
        out.close();

    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        original.recycle();
        bitmap.recycle();
    }


    ExifInterface newExif = new ExifInterface(file.getAbsolutePath());

    newExif.setAttribute(ExifInterface.TAG_ORIENTATION, String.valueOf(ExifInterface.ORIENTATION_ROTATE_90));

    newExif.saveAttributes();

但我无法在 ExifInterface 中保存更改。这只是清除所有标签。


仅限 saveAttributes 方法 将标签数据保存到 JPEG 文件中。

检查此链接

http://developer.android.com/reference/android/media/ExifInterface.html#saveAttributes() http://developer.android.com/reference/android/media/ExifInterface.html#saveAttributes()

所以如果你改变你的代码

bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);

to this

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);

它会保存你的 exif 标签数据

希望这有帮助

如有任何其他问题请告诉我

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android中位图压缩后如何保存Exif数据 的相关文章

随机推荐

  • 该平台不支持 LocalDB

    我正在尝试启动 Net Core 2 0申请于Ubuntu 17 04 我之前在Windows 10上开发过 效果很好 问题是当我跑步时dotnet ef database update我得到下一个例外 System PlatformNot
  • 为 nextjs 项目设置关键 CSS 并删除不需要的 CSS 的正确方法

    我有一个 NextJS 项目设置 gt https github com stefanre1 nextjs setup https github com stefanre1 nextjs setup 我想知道从 Tailwindcss 中删
  • 在 iTunes 中设置 iOS 应用程序语言

    我想在 iTunes 中设置应用程序语言 它总是只显示英语 但我想在 iTunes 中显示两种语言 我不想对应用程序代码进行任何更改 因为我已经按设备语言管理这两种语言 示例图像包含多种语言 如英语 中文 荷兰语和法语 我目前也遇到同样的问
  • 如何在 Visual Studio Code 中关闭保存时的文本格式?

    我不知道为什么我的代码在保存时自动格式化 并且由于某种原因更改了布局 我发现这是由于保存时自动格式化造成的 如何在 Visual Studio Code 中关闭自动保存 对于 Windows 以下是关闭自动完成功能所需遵循的一些基本步骤 S
  • Safari getDisplayMedia 必须从用户手势处理程序调用

    我的网站具有截屏和共享屏幕功能 在 chrome 和 firefox 上一切正常 但在 safari 上我收到错误 必须从用户手势处理程序调用 getDisplayMedia 是否可以从代码本身模拟用户手势 我尝试过使用myButton c
  • ScrollViewReader/scrollTo(_:anchor:) 无法可靠工作

    我已经建立了一个ScrollView其中包含 0 3 个图像和一个多行文本字段VStack 我还添加了一个ScrollViewReader在滚动视图内 并在某些事件发生时使用它滚动到文本字段的底部 用户开始键入 图像集合更改 关键是 有时有
  • 当输入为“???”时,StringUtils isNumeric 返回 true,为什么? [复制]

    这个问题在这里已经有答案了 我正在阅读 commons apache orgisNumeric http commons apache org proper commons lang apidocs org apache commons l
  • MATLAB 中的神经网络,初始权重 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我用 newff 在 MATLAB 中制作了神经网络 当您使用相同的输入和输出对其进行训练时 不同运行的训练结果会有所不同 我知道这种
  • 我想用Python从点云生成网格

    我有来自人体不同部位的点云 比如眼睛 我想做一个网格 我尝试使用 Mayavi 和 Delaunay 但没有得到好的网格 云的点完全混乱 我的点云位于 npz 文件中 使用 Mayavi 然后我想将模型保存在 obj 或 stl 文件中 但
  • 从方法链中使用的临时移出

    我正在尝试做类似的事情 include
  • 是否存在空 URI?

    我正在开发一个解析 URI 的例程 在明显的情况下 有一个空字符串的情况 空字符串是有效输入吗 空字符串的结果 URI 会是什么 空字符串不可能是 URI 这通用 URI 语法 https www rfc editor org rfc rf
  • 防止周末和节假日期间发出 Grafana 警报

    背景 我们正在使用 Grafana 警报 在周末和节假日期间 我们的一些指标会较低 但这实际上没关系 但仅限于那些日子 Problem 在周末和节假日期间 即使系统实际上没问题 我们也会收到来自 Grafana 的警报 Question 我
  • Genshin - 如何打印范围内的所有变量

    很简单 我想打印出 genshi 模板范围内的所有变量 作为调试和发现措施 有办法做到吗 标准Python函数locals http docs python org library functions html locals 返回一个字典
  • 如何从 matplotlib 获取 AxesImages

    所有 我使用这样的代码来绘制图像 import matplotlib pyplot as plt plt imshow array cmap jet plt show 但是 现在我想得到句柄 im of im plt imshow arra
  • 应该学习没有 jQuery 的 angularjs 吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我是客户端 JavaScript 的新手 在一个网络项目中 我发现了 AngularJS 并使用了一些基础知识 我应该学习 jQuery 还是只
  • laravel nova 隐藏索引页面上的编辑按钮

    如何禁用 nova 索引页面上的编辑 删除按钮并仍然允许在详细信息页面中 如果我将创建一个策略 这将禁用到处的操作 我想允许在详细信息页面中编辑和删除 但只想删除这些按钮从索引 正在做类似的事情 public function update
  • 使用 rvest 抓取时,在缺失值的地方输入 NA

    我想用rvest抓取一个页面 其中包含最近一次会议上演讲的标题和运行时间 然后将这些值组合成一个tibble library tibble library rvest url lt https channel9 msdn com Event
  • 使用动态类型从匿名对象获取值是不好的做法吗?

    注意 我的问题与 ASP Net 无关 我有一个使用 LINQ 与匿名集合绑定的 GridView 我希望在网格中的事件处理程序中从绑定对象获取一个值 该对象无法转换为任何静态类型 因为它的类型是匿名的 为了解决这个问题我使用动态类型来获取
  • Android - 使用意图从手机内存中打开文件

    我正在开发一个应用程序 它将手机中的 txt 文件作为输入并将其打印在 TextView 上 public class MainActivity extends AppCompatActivity Button button Intent
  • Android中位图压缩后如何保存Exif数据

    我需要从 SD 卡获取图像 创建 旋转并保存更改后的图像 我尝试使用这段代码 Bitmap original BitmapFactory decodeFile file getAbsolutePath ExifInterface origi