1

バイト配列の形式の jpeg 画像があります。メタデータのコメント ノードを削除できる形式でバイト配列を取得するにはどうすればよいですか?

byte[] myimagedata = ...

ImageWriter writer = ImageIO.getImageWritersBySuffix("jpeg").next();
ImageReader reader = ImageIO.getImageReader(writer);

//Looking for file here but have byte array
reader.setInput(new FileImageInputStream(new File(Byte array cant go here)));

IIOMetadata imageMetadata = reader.getImageMetadata(0);
Element tree = (Element)   imageMetadata.getAsTree("javax_imageio_jpeg_image_1.0");
NodeList comNL = tree.getElementsByTagName("com");
IIOMetadataNode comNode;
if (comNL.getLength() == 0) {
    comNode = new IIOMetadataNode("com");
    Node markerSequenceNode = tree.getElementsByTagName("markerSequence").item(0);
    markerSequenceNode.insertBefore(comNode,markerSequenceNode.getFirstChild());
} else {
    comNode = (IIOMetadataNode) comNL.item(0);          
}
4

1 に答える 1

4

ImageInputStreamバイト配列から読み取るを作成する方法を (ちょうど) 尋ねているようです。javadocs を読んで、これはうまくいくはずだと思います:

new MemoryCacheImageInputStream(new ByteArrayInputStream(myimagedata))

このFileImageInputStreamクラスには、ファイル システム内のファイル以外から読み取ることができるコンストラクターがありません。

これFileCacheImageInputStreamもオプションですが、ファイルシステムに一時キャッシュ用のディレクトリを提供する必要があり、このコンテキストでは望ましくないようです。

于 2013-02-09T09:43:06.737 に答える