QA@IT

javaの画像処理について

2610 PV

javaの画像処理を勉強中です。

jpg画像の読み込み処理における検証についての質問なのですが。

現在JavaServletの仕組みでstrutsのアクションFormから得た画像のbyte配列をFormFileクラスのgetInputStreamメソッドでInputStreamを取得し、それをImageIO#read()で画像データを読み込んでいます。
しかし、ファイルサイズが10MBくらいで画素数が10000万画素くらいの画像を読み込む際に
サーバーのスペック不足の為、OutOfMemortErrorのJava heap spaceが発生してしまいます。

---------------------------------------------------------------
    FormFile image=(FormFile)form.get("image");
    ImageIO.read(image.getInputStream())            ←ここでjavaヒープエラー
---------------------------------------------------------------

JVMの設定も見直したのですが改善されず、
また同じファイルサイズで画素数の小さい画像は問題なく読み込めるのでおそらく画素数が原因かと思っています。

そこで、画像の画素数の検証処理を追加しようと考えているのですが、
ImageIO#read()を使わずに画像の画素数を求める処理がわかりません。

またImageIO#read()でJava heap spaceエラーとなる原因は画像の画素数以外にも何かあるのでしょうか。

試しに、画像をアップロードしてサーバに保存しておけるようなWEBサービスをいくつか利用してみましたが、
ファイルサイズの他に画素数を指定しているサービスはいくつかありましたが、その他はファイルの拡張子やファイルサイズくらいでした。(そのサービスの仕組みが同じ仕組みを使っているのかは定かではありませんが…)

以上、どなたかご教授をお願いいたします。

回答

検索エンジンで「アップロードするファイルのサイズを調べる」
で検索するとJavaScriptやVBScriptでチェックする方法がヒットしますが、
目的に合いませんでしょうか。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。