gpt4 book ai didi

java - Apache Commons 成像 (EXIF) : Setting tags/tags missing

转载 作者:行者123 更新时间:2023-12-02 01:06:35 29 4
gpt4 key购买 nike

我正在使用 Apache Commons Imaging library (Java 8,你可以找到我的代码 here )并且我遇到了一些标签问题:

如果我打开例如的图像信息this Win 10 的 .jpg 文件,有“Origin”标签,例如“作者”和“获取日期”:

enter image description here

您可以找到 EXIF 标签列表 here它包括“作者”一项和附加的“艺术家”一项。 “Artist”标签似乎曾经存在于库中( source ),但 apidocs不要再列出它,并且 ExifTagConstants.TIFF_TAG_ARTIST 不存在。与“GPSAltitude”标签相同:根据 EXIF 列表它应该存在,但我似乎无法在库中找到它。

我尝试改用“Maker”标签:

final TiffOutputDirectory exifDir = outputSet.getOrCreateExifDirectory();
exifDir.removeField(ExifTagConstants.EXIF_TAG_MAKER_NOTE);
exifDir.add(ExifTagConstants.EXIF_TAG_MAKER_NOTE, "Test Maker");

但是 ExifTagConstants.EXIF_TAG_MAKER_NOTETagInfoUndefineds 类型似乎对 exifDir.add 无效。

我还尝试添加日期:

exifDir.removeField(ExifTagConstants.EXIF_TAG_DATE_TIME_DIGITIZED);
exifDir.add(ExifTagConstants.EXIF_TAG_DATE_TIME_DIGITIZED, "1970/01/01");

这只会引发异常:

org.apache.commons.imaging.ImageWriteException: Tag expects 20 byte(s), not 1

到目前为止,我成功写入的唯一标签是 ExifTagConstants.EXIF_TAG_USER_COMMENT

如何使用/编写这些标签(作者/艺术家、日期、海拔......)?

编辑:

我设法找到了两个标签:

exifDir.add(MicrosoftTagConstants.EXIF_TAG_XPAUTHOR, "Test Author");//Author
exifDir.add(GpsTagConstants.GPS_TAG_GPS_ALTITUDE, new RationalNumber(3, 1));//Altitude

...但它们没有写入文件。

exifDir.add(ExifTagConstants.EXIF_TAG_USER_COMMENT, "my comment");

有效,所以我知道它实际上是在编写标签,只是对上面两个不起作用。知道出了什么问题吗?

最佳答案

正如 @haraldK 已经提到的:GPS 数据不是实际 EFIX 目录的一部分,“Apache Commons Imaging”库中也是如此。

所以不要写海拔高度

double someDouble = 123.123456789;
int alt = (int) Math.round(someDouble*1000); //round to 3 decimal places
final TiffOutputDirectory exifDir = outputSet.getOrCreateExifDirectory();
exifDir.removeField(GpsTagConstants.GPS_TAG_GPS_ALTITUDE);
exifDir.add(GpsTagConstants.GPS_TAG_GPS_ALTITUDE, new RationalNumber(alt, 1000));

用途:

final TiffOutputDirectory gpsDir = outputSet.getOrCreateGPSDirectory();
gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_ALTITUDE);
gpsDir.add(GpsTagConstants.GPS_TAG_GPS_ALTITUDE, new RationalNumber(alt, 1000));

这会将“123.123”写入可通过 Windows 资源管理器查看的“高度”字段(右键单击图像 -> 属性 -> 详细信息) .

至于其他标签:

final TiffOutputDirectory exifDir = outputSet.getOrCreateExifDirectory();
final TiffOutputDirectory gpsDir = outputSet.getOrCreateGPSDirectory();
final TiffOutputDirectory rootDir = outputSet.getOrCreateRootDirectory();
final TiffOutputDirectory intDir = outputSet.getInteroperabilityDirectory(); //Not sure what this one is used for

//Writing into the "Authors" field
rootDir.removeField(MicrosoftTagConstants.EXIF_TAG_XPAUTHOR);
rootDir.add(MicrosoftTagConstants.EXIF_TAG_XPAUTHOR, "Me");

//Writing into the "Program Name" field
rootDir.removeField(ExifTagConstants.EXIF_TAG_SOFTWARE);
rootDir.add(ExifTagConstants.EXIF_TAG_SOFTWARE, "My App");

//Writing into the "Date taken" field
exifDir.removeField(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL);
exifDir.add(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL, "1970:01:01 12:34:56");

//Writing into the "Digitized Date"
exifDir.removeField(ExifTagConstants.EXIF_TAG_DATE_TIME_DIGITIZED);
exifDir.add(ExifTagConstants.EXIF_TAG_DATE_TIME_DIGITIZED, "1970:01:01 12:34:56");
//Not visible in "Properties" (use image editing software to see it)

//Writing the GPS time stamp
gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_DATE_STAMP);
gpsDir.add(GpsTagConstants.GPS_TAG_GPS_DATE_STAMP, "1970:01:01");
//Apparently only writes year & not visible in "Properties" (use image editing software to see it)

我还没有找到“获取日期”的正确标签,因此如果有人知道确切的标签,请对此答案发表评论。

关于java - Apache Commons 成像 (EXIF) : Setting tags/tags missing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57724093/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com