- PR -

画像ファイルの縦横サイズを取得する方法

1
投稿者投稿内容
ogeretyou
会議室デビュー日: 2004/06/14
投稿数: 18
投稿日時: 2004-09-10 01:22
お世話になります。

ローカルに保存されているimageファイル(gif,jpeg)の画像サイズを取得する良い方法をご存知ないでしょうか。
JSPで画像を表示するプログラムを作成しているのですが、ある一定サイズ以上の縦横サイズのものに関しては、
最大値を指定して画像を表示するようにしたいと考えております。

そこで、Servletにてまずimageファイルの画像情報より縦横サイズを取得し、
最大値をオーバーしている場合は、画像ファイルの横縦比を計算し、表示領域に収まるように丸めるよう、
縦横サイズを求めたいのです。

何か良い方法がありましたら、よろしくお願いします。
未記入
大ベテラン
会議室デビュー日: 2003/11/24
投稿数: 121
投稿日時: 2004-09-10 08:34
ImageIO#read(File input)
BufferedImage#getWidth()
BufferedImage#getHeight()
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-09-10 17:29
unibon です。こんにちわ。

引用:

ogeretyouさんの書き込み (2004-09-10 01:22) より:
ローカルに保存されているimageファイル(gif,jpeg)の画像サイズを取得する良い方法をご存知ないでしょうか。
JSPで画像を表示するプログラムを作成しているのですが、ある一定サイズ以上の縦横サイズのものに関しては、
最大値を指定して画像を表示するようにしたいと考えております。


拝見していて疑問なのは、画像ファイル(GIF/JPEG)をデコードしないのかデコードするのか、が良く分かりません。デコードしてしまっているのならば、縦横のピクセル数は自ずと分かっているはずですので、ご質問には至らないような気がします。
すなわち、
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/awt/Image.html
に getWidth や getHeight メソッドがあるのでこれを使えば良いだけです。

それとも、デコードしないで求めるということでしょうか?
GIF ならファイルの先頭の固定の場所に縦横のピクセル数が格納されているので、
そこだけを読むだけで素早く求められます。
JPEG も似たような感じで求まるはずなのですが、JPEG 関係のファイル構造は GIF に比べればかなり複雑です。
Java の標準 API にそういう機能があるのかは分かりません。ないのかもしれません。

なお、Web アプリケーションならば、ブラウザ側に IMG タグで表示している画像の縦横のピクセル数を求める機能があるので、ブラウザ上の JavaScript でその値を求めて、あらためて縮尺を指定しなおすようなことができるかもしれません。ただ、この場合は、表示が小さくなる場合でもサーバー-ブラウザ間の画像データ量は小さくなりませんが。
さくらば
大ベテラン
会議室デビュー日: 2002/11/12
投稿数: 145
投稿日時: 2004-09-10 22:14
こんにちは、さくらばです。

引用:

unibonさんの書き込み (2004-09-10 17:29) より:
unibon です。こんにちわ。
それとも、デコードしないで求めるということでしょうか?
GIF ならファイルの先頭の固定の場所に縦横のピクセル数が格納されているので、
そこだけを読むだけで素早く求められます。
JPEG も似たような感じで求まるはずなのですが、JPEG 関係のファイル構造は GIF に比べればかなり複雑です。
Java の標準 API にそういう機能があるのかは分かりません。ないのかもしれません。



javax.imageio.ImageReader クラスを使えばデコードせずに縦横のピクセルを求める
ことができます。

# Image I/O ってそんなに使われていないのでしょうか?

使い方は下の URL の "画像ファイルの情報とサムネイル" のところを参照してください。
http://www5.airnet.ne.jp/sakuraba/java/laboratory/JDK1.4/Graphics/ImageIO/ImageIO.html
ogeretyou
会議室デビュー日: 2004/06/14
投稿数: 18
投稿日時: 2004-09-13 00:06
みなさん返信どもありがとうございます!

画像ビューアのようなWebアプリで、
登録時に画像サイズ制限(縦横)をせず、
表示の際に適当な大きさ(ページデザインがくずれない)に縦横比を保持したまま
縮小(拡大)して表示したい、というところから質問しました。

サムネイルのような画像の一括表示も考えており、
1ページに表示するサムネイルは、150×100の[jpg][gif]が7、8個。
登録する画像ファイルは300k位で制限をかける。
と考えています。

javax.imageio.ImageReaderクラスを試してみようと思います。
サムネイル表示とオリジナルイメージのサンプリングロードなど、もろに使えそうなので勉強します。

また、クライアント側(javascript)で処理する、というアイデアもなかったので、
もう少し考えてみたいと思います。

また報告します。よろしくお願いします。
1

スキルアップ/キャリアアップ(JOB@IT)