Как я могу получить доступ (чтение / запись) к тегам изображений jpeg, используя common-imaging или sanselan в Java, эта ссылка содержит некоторые пояснения оtopic.
![enter image description here](https://i.stack.imgur.com/vl7bi.png)
Я пробовал следующий код, используя упомянутую библиотеку, пока 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) {
}
}
}
}
Этот код не влияет на теги сведений об изображении, поэтому я ищу правильную константу, которую можно использовать для доступа к «полю тегов»