• 締切済み

ファイル形式が分かる方法はないでしょうか?

画面(HTML)からアップロードされたファイル(ByteArrayInputStream)から ファイル形式を知る方法はないでしょうか? 例えばこのファイルはgifとかjpegとかが知りたいのです。 ByteArrayInputStream bis = new ByteArrayInputStream(form.getUploadListImage()); ここからファイルの形式が分かる事ってできるのでしょうか? お願いします。。

みんなの回答

  • Gishi
  • ベストアンサー率57% (11/19)
回答No.3

ImageReader を使うことで、 画像のフォーマットを特定できます。 以下のコードを実行してみてください。 import java.io.*; import java.util.*; import java.awt.*; import java.awt.image.*; import javax.imageio.*; import javax.imageio.stream.*; public class DetectImageFormat {   public static void main(String[] args) throws Exception {     // ByteArrayInputStream でもOKです     InputStream in = new FileInputStream(args[0]);     ImageInputStream   imageIn = ImageIO.createImageInputStream(in);     Iterator<ImageReader> readers = ImageIO.getImageReaders(imageIn);          if (readers.hasNext()) {       System.out.println("format: " + readers.next().getFormatName());     } else {       System.out.println("unknown image format");     }     in.close();   } }

noname#235174
noname#235174
回答No.2

#1です >どうすればシグネチャは取得できるのでしょうか? 単純にByteArrayInputStream#read(byte[] b, int off, int len) メソッドで先頭の数バイトを読み、調べるだけです。 各ファイルフォーマットには固有のヘッダが存在するので たとえばGIFなら0x47,0x49,0x46が先頭3byteになっているはずです。 テキストエディタで開いてもGIFという文字が先頭に出てきます。 JPEGなら先頭2byteは0xFF,0xD8です。

noname#235174
noname#235174
回答No.1

ストリームの先頭数バイトを見て判断するのはどうでしょうか? 必ずフォーマット固有のシグネチャが入っているはずです。

usb_memory
質問者

補足

返信ありがとうございます。 >ストリームの先頭数バイトを見て判断するのはどうでしょうか? >必ずフォーマット固有のシグネチャが入っているはずです。 どうすればシグネチャは取得できるのでしょうか? また、 ByteArrayInputStream bis = new ByteArrayInputStream(form.getUploadListImage()); BufferedImage image = ImageIO.read(bis); のようにBufferedImageにキャストして簡単にファイル形式が取得できないかAPI見るなどして調べたのですが、BufferedImageにはファイル形式を取得できるようなメソッドは見つかりませんでした。 他に方法はないものでしょうか? よろしくお願いします。

関連するQ&A