Я пытаюсь использовать ImageIO для изменения поля комментария JPEG (COM) файла.Я читаю метаданные, делаю некоторые изменения в DOM (изменить атрибут поля комментария), затем сохраняю / распечатываю метаданные.Но мои изменения не показаны.Это код (в простом тестовом классе со статическим main ()), 'file' установлен.
ImageWriter writer = ImageIO.getImageWritersBySuffix("jpeg").next();
ImageReader reader = ImageIO.getImageReader(writer);
reader.setInput(new FileImageInputStream(file));
RenderedImage img = reader.read(0);
IIOMetadata meta = reader.getImageMetadata(0);
IIOMetadataNode root1 = (IIOMetadataNode) meta.getAsTree("javax_imageio_jpeg_image_1.0");
String comment1 = getCommentFromDOM(root1);
System.out.println("comment 1 = " + comment1);
String comment2 = getCommentFromDOM(root1);
System.out.println("comment 2 = " + comment2);
meta.setFromTree("javax_imageio_jpeg_image_1.0", root1);
//meta.reset();
IIOMetadataNode root2 = (IIOMetadataNode) meta.getAsTree("javax_imageio_jpeg_image_1.0");
String comment3 = getCommentFromDOM(root2);
System.out.println("comment 3 = " + comment3);
Метод getCommentFromDOM () просто проходит по дереву и получает атрибут комментария в comтег, а затем он изменяет поле комментария, но возвращает исходное значение.
...
if(md.getNodeName().equalsIgnoreCase("com")) {
String comment = md.getAttribute("comment");
md.setAttribute("comment", "FOOOOOOOOOO");
return comment;
}
...
Поэтому, когда эта программа будет выполнена, она выведет:
comment 1 = originalcomment
comment 2 = FOOOOOOOOOOO
comment 3 = originalcomment
DOM был изменен, но похоже, что метод meta.setFromTree () не использовал новое дерево.Я также попытался запустить meta.reset (), который должен очистить метаданные, но это также, похоже, не влияет на мета-объект.
Может кто-нибудь увидеть, что я сделал неправильно в этом очень простом ImageIOпроверить?