热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

读取并修改照片信息

背景不过多介绍,就是想获取并修改照片中的拍摄时间、经纬度等信息,并且当在windows环境下,图片会有标题、主题、描述等属性,如果可以,希望能够一并获取。可能是需求比较奇怪,这方面

背景不过多介绍,就是想获取并修改照片中的拍摄时间、经纬度等信息,并且当在windows环境下,图片会有标题、主题、描述等属性,如果可以,希望能够一并获取。

可能是需求比较奇怪,这方面的内容在国内很少,最终发现org.apache.commons-imaging包可以解决这个问题。


1.引入依赖

gradle:

implementation 'org.apache.commons:commons-imaging:1.0-alpha1'

maven:


org.apache.commons
commons-imaging
1.0-alpha1


2.代码举例

public void buildPhoto(File file) throws IOException, ImageReadException, ImageWriteException {
ImageMetadata imageMetadata = Imaging.getMetadata(file);
JpegImageMetadata metadata = (JpegImageMetadata) imageMetadata;
//遍历所有图片属性
for (ImageMetadata.ImageMetadataItem item : metadata.getItems()) {
System.out.println(item);
}
//获取标题属性的值
if (metadata.findEXIFValue(MicrosoftTagConstants.EXIF_TAG_XPTITLE) != null) {
Object titleValue = metadata.findEXIFValue(MicrosoftTagConstants.EXIF_TAG_XPTITLE).getValue();
System.out.println(titleValue);
}
//获取经纬度信息
TiffImageMetadata exif = metadata.getExif();
if (exif != null && exif.getGPS() != null) {
TiffImageMetadata.GPSInfo gpsInfo = exif.getGPS();
double lOngitudeAsDegreesEast= gpsInfo.getLongitudeAsDegreesEast();
double latitudeAsDegreesNorth = gpsInfo.getLatitudeAsDegreesNorth();
}
//修改某个属性值
TiffOutputSet out = exif.getOutputSet();
//获取TiffOutputDirectory
TiffOutputDirectory exifDirectory = out.getOrCreateExifDirectory();
//拍摄日期修改 注意日期格式为 yyyy:MM:dd HH:mm:ss
exifDirectory.removeField(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL);
exifDirectory.removeField(ExifTagConstants.EXIF_TAG_DATE_TIME_DIGITIZED);
exifDirectory.add(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL, "2022:01:01 00:00:00");
exifDirectory.add(ExifTagConstants.EXIF_TAG_DATE_TIME_DIGITIZED, "2022:01:01 00:00:00");

//gps信息修改
out.setGPSInDegrees(116.23128, 40.22077);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("path"));
//写图片
new ExifRewriter().updateExifMetadataLossless(file, bos, out);
}

照片属性遍历结果

ImageDescription: 'title'
Make: 'SONY'
Model: 'ILCE-7M3'
Orientation: 1
XResolution: 350
YResolution: 350
ResolutionUnit: 2
Software: 'ILCE-7M3 v3.10t'
DateTime: '2022:04:16 11:47:59'
YCbCrPositioning: 2
Rating: 4
RatingPercent: 75
ExifOffset: 4202
GPSInfo: 4958
XPTitle: 'title'
XPComment: 'this is a comments'
XPKeywords: '标记'
XPSubject: 'ubject'
PrintIM: 80, 114, 105, 110, 116, 73, 77, 0, 48, 51, 48, 48, 0, 0, 3, 0, 2, 0, 1, 0, 0, 0, 3, 0, 34, 0, 0, 0, 1, 1, 0, 0, 0, 0, 9, 17, 0, 0, 16, 39, 0, 0, 11, 15, 0, 0, 16, 39, 0, 0, -105... (106)
Padding: 28, -22, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0... (1928)
ExposureTime: 1/640 (0.002)
FNumber: 5
ExposureProgram: 2
PhotographicSensitivity: 100
Unknown Tag (0x8830): 2
Unknown Tag (0x8832): 100
ExifVersion: 48, 50, 51, 49
DateTimeOriginal: '2022:04:16 11:47:59'
DateTimeDigitized: '2022:04:16 11:47:59'
Unknown Tag (0x9010): '+08:00'
Unknown Tag (0x9011): '+08:00'
Unknown Tag (0x9012): '+08:00'
ComponentsConfiguration: 1, 2, 3, 0
CompressedBitsPerPixel: 3
BrightnessValue: 25044/2560 (9.783)
ExposureCompensation: 0
MaxApertureValue: 760/256 (2.969)
MeteringMode: 5
LightSource: 0
Flash: 16
FocalLength: 34
MakerNote: 83, 79, 78, 89, 32, 68, 83, 67, 32, 0, 0, 0, 102, 0, 3, 16, 4, 0, 16, 0, 0, 0, -84, 8, 0, 0, 0, 32, 7, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 32, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3... (37672)
FlashpixVersion: 48, 49, 48, 48
ColorSpace: 1
ExifImageWidth: 6000
ExifImageLength: 4000
InteropOffset: 2230
FileSource: 3
SceneType: 1
CustomRendered: 0
ExposureMode: 0
WhiteBalance: 0
DigitalZoomRatio: 1
FocalLengthIn35mmFormat: 34
SceneCaptureType: 0
Contrast: 0
Saturation: 0
Sharpness: 0
LensSpecification: 28, 75, 28/10 (2.8), 28/10 (2.8)
LensModel: 'E 28-75mm F2.8-2.8'
Padding: 28, -22, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0... (2060)
OffsetSchema: 4050
InteroperabilityVersion: 48, 49, 48, 48
GPSLatitudeRef: 'N'
GPSLatitude: 40, 13, 3693/250 (14.772)
GPSLongitudeRef: 'E'
GPSLongitude: 116, 13, 6576/125 (52.608)
Compression: 6
ImageDescription: ''
Make: 'SONY'
Model: 'ILCE-7M3'
Orientation: 1
XResolution: 72
YResolution: 72
ResolutionUnit: 2
Software: 'ILCE-7M3 v3.10'
DateTime: '2022:04:16 11:47:59'
JpgFromRawStart: 42798
JpgFromRawLength: 9229
YCbCrPositioning: 2


推荐阅读
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 本文介绍如何通过注册表编辑器自定义和优化Windows文件右键菜单,包括删除不需要的菜单项、添加绿色版或非安装版软件以及将特定应用程序(如Sublime Text)添加到右键菜单中。 ... [详细]
  • 本文探讨了卷积神经网络(CNN)中感受野的概念及其与锚框(anchor box)的关系。感受野定义了特征图上每个像素点对应的输入图像区域大小,而锚框则是在每个像素中心生成的多个不同尺寸和宽高比的边界框。两者在目标检测任务中起到关键作用。 ... [详细]
  • 如何高效创建和使用字体图标
    在Web和移动开发中,为什么选择字体图标?主要原因是其卓越的性能,可以显著减少HTTP请求并优化页面加载速度。本文详细介绍了从设计到应用的字体图标制作流程,并提供了专业建议。 ... [详细]
  • 苹果新专利或将引领无边框手机时代
    苹果公司最近公布了一项新的专利技术,该技术能够在设备屏幕中嵌入光线传感器,这标志着苹果在实现无边框手机设计上迈出了重要一步。这一创新将极大提升手机的屏占比,并可能为未来的iPhone带来革命性的变化。 ... [详细]
  • 本文介绍如何使用 Python 提取和替换 .docx 文件中的图片。.docx 文件本质上是压缩文件,通过解压可以访问其中的图片资源。此外,我们还将探讨使用第三方库 docx 的方法来简化这一过程。 ... [详细]
  • RT,个人博客图片管理(方便管理,大家 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • 帝国CMS多图上传插件详解及使用指南
    本文介绍了一款用于帝国CMS的多图上传插件,该插件通过Flash技术实现批量图片上传功能,显著提升了多图上传效率。文章详细说明了插件的安装、配置和使用方法。 ... [详细]
  • 百度服务再次遭遇技术问题,疑似DNS解析故障
    近日晚间,百度多项在线服务出现加载异常,包括移动端搜索在内的多个功能受到影响。初步迹象表明,问题可能与DNS服务器解析有关。 ... [详细]
  • 本文详细介绍了《问道》手游在2020年12月31日进行的服务器维护情况,以及此次更新中新增的跨年狂欢活动和寒假活动等内容。同时,文章还涵盖了其他重要的系统优化与修复信息。 ... [详细]
  • Win11扩展卷无法使用?解决扩展卷灰色问题的指南
    本文详细介绍了在Windows 11中遇到扩展卷灰色无法使用时的解决方案,帮助用户快速恢复磁盘扩展功能。 ... [详细]
  • 掌握 Photoshop 是学习网页设计的重要一步。本文将详细介绍 Photoshop 的基础与进阶功能,帮助您更好地进行图像处理和网页设计。推荐使用最新版本的 Photoshop,以体验更强大的功能和更高的效率。 ... [详细]
author-avatar
鲁有军_644
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有