gpt4 book ai didi

java - 使用 java commons-imaging 访问 jpeg 标签

转载 作者:太空宇宙 更新时间:2023-11-04 10:29:11 25 4
gpt4 key购买 nike

我如何在java中使用common-imagingsanselan访问(读/写)jpeg图像标签,这个link对这个主题有一些解释。

enter image description here

我使用上述库尝试了以下代码,只要 sanselan 一样长,但没有任何影响。

public static void addImageHistoryTag(File file) {
File dst = null;
IImageMetadata metadata = null;
JpegImageMetadata jpegMetadata = null;
TiffImageMetadata exif = null;
OutputStream os = null;
TiffOutputSet outputSet = new TiffOutputSet();

// establish metadata
try {
metadata = Sanselan.getMetadata(file);
} catch (ImageReadException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

// establish jpegMedatadata
if (metadata != null) {
jpegMetadata = (JpegImageMetadata) metadata;
}

// establish exif
if (jpegMetadata != null) {
exif = jpegMetadata.getExif();
}

// establish outputSet
if (exif != null) {
try {
outputSet = exif.getOutputSet();
} catch (ImageWriteException e) {
e.printStackTrace();
}
}

if (outputSet != null) {
// check if field already EXISTS - if so remove
TiffOutputField imageHistoryPre = outputSet
.findField(TiffConstants.EXIF_TAG_XPCOMMENT);
if (imageHistoryPre != null) {
System.out.println("REMOVE");
outputSet.removeField(TiffConstants.EXIF_TAG_XPCOMMENT);
}
// add field
try {
String fieldData = "Hallo";
TiffOutputField imageHistory = new TiffOutputField(
TiffConstants.EXIF_TAG_XPTITLE,
TiffFieldTypeConstants.FIELD_TYPE_BYTE,
fieldData.length(),
fieldData.getBytes());

TiffOutputDirectory exifDirectory = outputSet.getOrCreateExifDirectory();
exifDirectory.removeField(TiffConstants.EXIF_TAG_XPTITLE);
exifDirectory.add(imageHistory);

} catch (ImageWriteException e) {

e.printStackTrace();
}
}

try {
dst = new File("D:\\aa\\111.jpeg");
os = new FileOutputStream(dst);
os = new BufferedOutputStream(os);
} catch (IOException e) {
e.printStackTrace();
}

// write/update EXIF metadata to output stream
try {
new ExifRewriter().updateExifMetadataLossless(file,
os, outputSet);
} catch (ImageReadException e) {
e.printStackTrace();
} catch (ImageWriteException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (os != null) {
try {
os.close();
} catch (IOException e) {
}
}
}
}

此代码不会影响图像详细信息标签,因此我正在寻找可用于访问“标签字段”的正确常量

最佳答案

如果您使用commons-imaging,请勿使用Sanselan.getMetadata(file),使用Imaging.getMetadata(file)以保持一致。据我所知,Sanselan 已被弃用用于公共(public)成像。

此外,您可以尝试设置 MicrosoftTagConstants ,具体来说,EXIF_TAG_XPKEYWORDS。为此,您需要使用 this answer

关于java - 使用 java commons-imaging 访问 jpeg 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50221589/

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