Как я могу получить доступ (прочитать / записать) теги изображений jpeg с помощью обычная визуализация или санселан в java, этот ссылка на сайт имеет некоторые пояснения по теме.
Я попробовал следующий код, используя указанную библиотеку, пока 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) {
}
}
}
}
Этот код не влияет на теги деталей изображения, поэтому я ищу правильную константу, которую можно использовать для доступа к «полю тегов».
@Alfabravo Я обновил вопрос, проверьте его




Если вы используете commons-imaging, не используйте Sanselan.getMetadata(file), используйте Imaging.getMetadata(file) для согласованности. Насколько мне известно, Sanselan не рекомендуется использовать для визуализации общего пользования.
Также вы можете попробовать установить MicrosoftTagConstants, в частности, EXIF_TAG_XPKEYWORDS. Для этого вам нужно использовать этот ответ.
Вы использовали тег [java]. Вы пробовали какой-нибудь код Java? Какую ошибку вы обнаружили?