gpt4 book ai didi

java - 用 Sanselan 编写 EXIF XPKEYWORDS

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:50:41 25 4
gpt4 key购买 nike

我一直在研究将标签写入图像的方法,类似于 Windows Live 照片库的工作方式。我玩过几个不同的库(元数据提取器、jhead、jheader、sanselan),但真正发现 Sanselan 可以适应我需要的数据写回。

我关注了 Apache 的 WriteExifMetadataExample到 T & 它可以完美地更新 GPS 数据和光圈。

然后我尝试修改示例以更新 EXIF_TAG_XPKEYWORDS 而不是 EXIF_TAG_APERTURE_VALUE

在上面链接的示例中,我将 TiffOutputField.create 行替换为以下内容:

String currentTagsAsString = new String((byte[]) jpegMetadata.findEXIFValue(ExifTagConstants.EXIF_TAG_XPKEYWORDS).getValue());
System.out.println("current tags: '" + currentTagsAsString + "'");
String newTag = "h e l l o";
String newTagsAsString = currentTagsAsString.trim() + " ; " + newTag + " ";
System.out.println("new desired tags: '" + newTagsAsString + "'");
TiffOutputField keywords = new TiffOutputField(ExifTagConstants.EXIF_TAG_XPKEYWORDS, FieldType.FIELD_TYPE_BYTE, newTagsAsString.length(), newTagsAsString.getBytes());
exifDirectory.removeField(ExifTagConstants.EXIF_TAG_XPKEYWORDS);
exifDirectory.add(keywords);

除了注释掉光圈和GPS更新代码外,其余的我都不管了。我承认字节数组的格式让我有点困惑,所以这很可能就是问题所在。

我没有收到任何警告/错误/等等。该过程正常完成,但新图像文件不包含更新的标签。为什么新图像不包含更新的标签?有没有更简单/更好的方法?

更新:我已编辑代码以改为使用 1.0 RC commons-imaging API,但结果是一样的。为了完整起见,我在此处包含了我使用的代码

TiffImageMetadata metadata = toTiffMetadata(Imaging.getMetadata(inputFile));
System.out.println(metadata.getFieldValue(MicrosoftTagConstants.EXIF_TAG_XPKEYWORDS));
TiffOutputSet outputSet = metadata.getOutputSet();
TiffOutputDirectory exif = outputSet.getOrCreateExifDirectory();
exif.removeField(MicrosoftTagConstants.EXIF_TAG_XPKEYWORDS);
exif.add(MicrosoftTagConstants.EXIF_TAG_XPKEYWORDS, "helloworld;goodbye;");
writeFileWithNewTag(inputFile,destinationFile,outputSet);

如果我使用像 EXIF_TAG_XPAUTHOR 这样的东西,新代码会很好用,但是使用 EXIF_TAG_XPKEYWORDS 不会产生任何错误或警告或消息,而且新文件只是不包含新标签数据

最佳答案

我使用这段代码成功添加了 XP 关键字标签:

private static void rewriteXpKeywords(String fileIn, String fileOut) throws Exception {
TiffImageMetadata exif;
IImageMetadata meta = Imaging.getMetadata(new File(fileIn));
if (meta instanceof JpegImageMetadata) {
exif = ((JpegImageMetadata)meta).getExif();
} else if (meta instanceof TiffImageMetadata) {
exif = (TiffImageMetadata)meta;
} else {
return;
}
TiffOutputSet outputSet = exif.getOutputSet();
TiffOutputDirectory exifDir = outputSet.findDirectory(TiffDirectoryConstants.DIRECTORY_TYPE_EXIF);
exifDir.removeField(AllTagConstants.EXIF_TAG_XPKEYWORDS);
exifDir.add(AllTagConstants.EXIF_TAG_XPKEYWORDS, "helloworld;goodbye;");

ExifRewriter rewriter = new ExifRewriter();
FileOutputStream fos = null;
try {
fos = new FileOutputStream(new File(fileOut));
rewriter.updateExifMetadataLossy(new File(fileIn), fos, outputSet);
} finally {
if (fos != null) {
fos.close();
}
}
}

你怎么知道它没有“修改数据”?你用什么检查它?

关于java - 用 Sanselan 编写 EXIF XPKEYWORDS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15593707/

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