Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Apache Sanselan库在jpg文件中重写XMP XML?_Java_Apache Commons_Jpeg_Xmp - Fatal编程技术网

Java 如何使用Apache Sanselan库在jpg文件中重写XMP XML?

Java 如何使用Apache Sanselan库在jpg文件中重写XMP XML?,java,apache-commons,jpeg,xmp,Java,Apache Commons,Jpeg,Xmp,我想将XMP写入jpg。我使用apachesanselan库。在下面的代码中,我试图读取XMP XML并将其再次写入同一个文件,但得到了异常(ImageReadException:Unexpected EOF.) 如果输入和输出文件不同,代码工作正常 File newfile = new File("./img/newfile.jpg"); //output file xmpWriter.updateXmpXml(new ByteSourceFile(file), new BufferedOut

我想将XMP写入jpg。我使用apachesanselan库。在下面的代码中,我试图读取XMP XML并将其再次写入同一个文件,但得到了异常(ImageReadException:Unexpected EOF.)

如果输入和输出文件不同,代码工作正常

File newfile = new File("./img/newfile.jpg"); //output file
xmpWriter.updateXmpXml(new ByteSourceFile(file), new BufferedOutputStream(new FileOutputStream(newfile)), xmpXml);
但是如果我读写同一个文件,我会得到一个异常

    org.apache.sanselan.ImageReadException: Unexpected EOF.
    at org.apache.sanselan.common.BinaryFileFunctions.readAndVerifyBytes(BinaryFileFunctions.java:129)
    at org.apache.sanselan.formats.jpeg.JpegUtils.traverseJFIF(JpegUtils.java:61)
    at org.apache.sanselan.formats.jpeg.xmp.JpegRewriter.analyzeJFIF(JpegRewriter.java:204)
    at org.apache.sanselan.formats.jpeg.xmp.JpegXmpRewriter.updateXmpXml(JpegXmpRewriter.java:187)
    at Editor$1.mouseClicked(Editor.java:147)
    at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

Sanselan已经加入Apache,并将在不久的将来作为Apache Commons Imaging 1.0发布。您可能想尝试更近期的库构建,可能您发现的问题已经解决。您可以在这里找到每日快照:
xmpWriter.updateXmpXml(新的ByteSourceFile(文件)、新的BufferedOutputStream(新的FileOutputStream(文件))、xmpXml)以破坏性方式读取和写入同一文件。难怪。我更新到了新版本,但现在字符串xmpXml=Sanselan.getXmpXml(文件);Sansealan不被认可。如何使用新库读取xmp xml?我也尝试了使用新库,得到了相同的异常org.apache.commons.imaging.ImageReadException:意外的EOF。我遇到了相同的问题(Android上的Sanselan 0.97)。当我意识到我在评论/回答一个三年前的问题时,我想我还是分享一下我的解决方法吧。很明显,使用一个临时目标文件temp.jpg。然后,在更新temp.jpg后,只需将temp.jpg复制到dest.jpg即可。Sanselan已加入Apache,并将在不久的将来作为Apache Commons Imaging 1.0发布。您可能想尝试更近期的库构建,可能您发现的问题已经解决。您可以在这里找到每日快照:
xmpWriter.updateXmpXml(新的ByteSourceFile(文件)、新的BufferedOutputStream(新的FileOutputStream(文件))、xmpXml)以破坏性方式读取和写入同一文件。难怪。我更新到了新版本,但现在字符串xmpXml=Sanselan.getXmpXml(文件);Sansealan不被认可。如何使用新库读取xmp xml?我也尝试了使用新库,得到了相同的异常org.apache.commons.imaging.ImageReadException:意外的EOF。我遇到了相同的问题(Android上的Sanselan 0.97)。当我意识到我在评论/回答一个三年前的问题时,我想我还是分享一下我的解决方法吧。很明显,使用一个临时目标文件temp.jpg。然后,在更新temp.jpg之后,只需将temp.jpg复制到dest.jpg。
    org.apache.sanselan.ImageReadException: Unexpected EOF.
    at org.apache.sanselan.common.BinaryFileFunctions.readAndVerifyBytes(BinaryFileFunctions.java:129)
    at org.apache.sanselan.formats.jpeg.JpegUtils.traverseJFIF(JpegUtils.java:61)
    at org.apache.sanselan.formats.jpeg.xmp.JpegRewriter.analyzeJFIF(JpegRewriter.java:204)
    at org.apache.sanselan.formats.jpeg.xmp.JpegXmpRewriter.updateXmpXml(JpegXmpRewriter.java:187)
    at Editor$1.mouseClicked(Editor.java:147)
    at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)