ゆるゆるプログラミング

・画像の大きさの取得

ここでは、JPEG画像の大きさを取得するソースコードを解説します。以下がそのソースコード例です。

ImageSize.java
001:    import java.awt.image.BufferedImage;
002:    import java.io.File;
003:    import javax.imageio.ImageIO;
004:    import java.io.IOException;
005:    
006:    public class ImageSize {
007:    	public static void main( String[] args ) {
008:    		// 画像サイズ
009:    		int width, height;
010:    		// ファイル名
011:    		String inname;
012:    		// 画像格納クラス
013:    		BufferedImage img = null;
014:    
015:    		// 入力した引数が1つ以上かを調べる
016:    		if ( 1 > args.length ) {
017:    			// 入力した引数が1つ未満の場合、使用方法を表示する
018:    			System.out.println( "ImageSize [入力JPEG名]" );
019:    			return;
020:    		}
021:    
022:    		// 入力JPEG名をinnameに代入(拡張子".jpg"省略なし)
023:    		inname  = args[ 0 ];
024:    
025:    		try {
026:    			// inname(入力JPEG)を読み込んでimgにセット
027:    			img = ImageIO.read( new File( inname ) );
028:    		} catch (Exception e) {
029:    			// inname(入力JPEG)の読み込みに失敗したときの処理
030:    			 e.printStackTrace();
031:    			return;
032:    		}
033:    
034:    		// 画像の横方向のピクセル数をwidthに代入
035:    		width = img.getWidth();
036:    
037:    		// 画像の縦方向のピクセル数をheightに代入
038:    		height = img.getHeight();
039:    
040:    
041:    		// 画像サイズを表示
042:    		System.out.println( "横方向のピクセル=" + width );
043:    		System.out.println( "縦方向のピクセル=" + height );
044:    	}
045:    }

ImageSizeを実行

C:\talavax\javasample>java ImageSize sampleimage001.jpg

1つ目の引数で渡したJPEGファイルの大きさ(横と縦のピクセル数)を表示します。

実行結果

横方向のピクセル=1600
縦方向のピクセル=1280

画像サイズの取得に成功すると、上記のようなメッセージを表示します。

次に、与えた引数が1つ未満の場合の実行結果について解説します。

ImageSizeを引数なしで実行

C:\talavax\javasample>java ImageSize

実行結果

ImageSize [入力JPEG名]

引数が1未満の場合、プログラムの引数に何を渡せばよいかを表示するようにしています。

ここからは、このソースコードを上から順番に解説していきます。

001:    import java.awt.image.BufferedImage;
002:    import java.io.File;
003:    import javax.imageio.ImageIO;
004:    import java.io.IOException;

Javaのクラスライブラリの中から「java.awt.image.BufferedImage」と「java.io.File」と「javax.imageio.ImageIO」と「java.io.IOException」というパッケージにあるクラスを、このプログラム内で使うために記述します。 この記述により、ImageIOクラスBufferedImageクラスが利用できるようになります。

006:    public class ImageSize {

クラス名を、ImageSizeとしています。

007:    	public static void main( String[] args ) {

このmainメソッドからプログラムを実行します。

008:    		// 画像サイズ
009:    		int width, height;
010:    		// ファイル名
011:    		String inname;
012:    		// 画像格納クラス
013:    		BufferedImage img = null;

このプログラムで使う変数を宣言しています。どのように使われているかは、後ろのソースコードで。

015:    		// 入力した引数が1つ以上かを調べる
016:    		if ( 1 > args.length ) {
017:    			// 入力した引数が1つ未満の場合、使用方法を表示する
018:    			System.out.println( "ImageSize [入力JPEG名]" );
019:    			return;
020:    		}

1つ以上の引数が与えられたかをチェックし、1つ未満の場合に、使い方のメッセージを表示し、returnによってmainメソッドを抜けています。

022:    		// 入力JPEG名をinnameに代入(拡張子".jpg"省略なし)
023:    		inname  = args[ 0 ];

与えられた引数をそれぞれ、入力JPEG名の変数(inname)に代入しています。

025:    		try {
026:    			// inname(入力JPEG)を読み込んでimgにセット
027:    			img = ImageIO.read( new File( inname ) );
028:    		} catch (Exception e) {
029:    			// inname(入力JPEG)の読み込みに失敗したときの処理
030:    			 e.printStackTrace();
031:    			return;
032:    		}

入力JPEG名の変数(inname)を読み込んで、BufferedImageクラスのimgに格納しています。この処理には、ImageIOクラスreadメソッドを使います。

ImageIO.readメソッド

public static BufferedImage read( File input ) throws IOException
■Fileオブジェクトを復元した結果をBufferedImageに格納します。

  パラメータ input : Fileオブジェクト

  戻り値     inputを復元したBufferedImageaを返します。

try { ~ } catchは、失敗する可能性がある処理を波括弧で囲み、その処理に失敗したときにcatch { ~ }の波括弧で囲まれた処理を実行するということです。この場合は、JPEGファイル名が不正であったり、存在していなかったり、フォーマットが違っているなどが原因で処理が失敗する可能性があります。処理が失敗するとreturnによってmainメソッドを抜けるようにしています。

034:    		// 画像の横方向のピクセル数をwidthに代入
035:    		width = img.getWidth();
036:    
037:    		// 画像の縦方向のピクセル数をheightに代入
038:    		height = img.getHeight();

BufferedImageクラスgetWidthメソッドgetHeightメソッドで画像のサイズを取得しています。

BufferedImage.getWidthメソッド

public static int getWidth()
■BufferedImageの幅を返します。
  パラメータ なし

  戻り値     横方向のピクセル数

BufferedImage.getHeightメソッド

public static int getHeight()
■BufferedImageの高さを返します。
  パラメータ なし

  戻り値     縦方向のピクセル数

041:    		// 画像サイズを表示
042:    		System.out.println( "横方向のピクセル=" + width );
043:    		System.out.println( "縦方向のピクセル=" + height );

全ての処理が正常終了すると、ここまで処理が実行されます。

■関連コンテンツ

画像ファイル形式 画像ファイル形式について解説

■新着情報

2017.11.17 N値化 カラー画像をN値化する方法について解説
2017.11.16 最も近い値の取得 指定値に最も近い配列の値を取得する方法を解説
2017.10.02 アルファ値(透過) アルファ値(透過)について

■広告

法人向けのETC専用カード

~約8,000名の受講生と80社以上の導入実績~ 企業向けプログラミング研修ならCodeCamp

日本最大級ショッピングサイト!お買い物なら楽天市場

Topへ