ImageMagick を使って画像の縦横サイズを縮小する

公開日: : 最終更新日:2014/01/26 ImageMagick ,

ガラケーを使った案件で、100KB制限のために画像ファイルを縮小する必要があった。ImageMagick を使ってファイルサイズ(縦横サイズ)を縮小してみたので、そのスニペットをメモしておいた。

作成したスニペット

Gist に登録済み。

package net.tomoyamkung;
 
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
public class ImageUtil {
 
    /**
     * ImageMagick を使って画像の縦横サイズを縮小する。
     * 
     * @param srcPath 縮小したい画像ファイルパス
     * @param destPath 縮小した画像ファイルパス(このパスに画像ファイルが生成される)
     * @throws IOException プロパティファイルの読み込みに失敗した場合
     * @throws InterruptedException ImageMagick の実行に失敗した場合
     */
    public static void scaleDownFileSize(String srcPath, String destPath) throws IOException, InterruptedException {
        AppProperties instance = AppProperties.getInstance();
        String imageMagickPath = instance.get("imagemagick.path");
        String geometry = instance.get("image.geometry");
        
        ProcessBuilder pb = new ProcessBuilder(
                imageMagickPath,
                "-geometry", geometry,
                srcPath, destPath);
        
        Process p = pb.start();
        p.waitFor();
    }
}
package net.tomoyamkung;
 
import java.io.IOException;
import java.util.Properties;
 
public class AppProperties {
 
    private static AppProperties instance;
    
        /** 参照するプロパティファイル(クラスパス上のあること) */
    private static final String PROP_FILE_NAME = "app.properties";
    
    private Properties prop;
    
    /**
     * コンストラクタ。
     * 
     * シングルトン。
     * 
     * @throws IOException
     */
    private AppProperties() throws IOException {
        prop = new Properties();
        prop.load(this.getClass().getClassLoader().getResourceAsStream(PROP_FILE_NAME));
    }
    
    /**
     * インスタンスを生成する。
     * 
     * @return AppProperties クラスのインスタンス
     * @throws IOException インスタンスの取得に失敗した場合
     */
    public static synchronized AppProperties getInstance() throws IOException {
        if(instance == null) {
            instance = new AppProperties();
        }
        return instance;
    }
 
    public String get(String key) {
        return prop.getProperty(key).trim();
    }
}
# 縮小後の画像の縦横サイズ(単位はピクセル)
image.geometry = 240x240
 
# ImageMagick の convert コマンドの絶対パス
imagemagick.path = C:/xxx/ImageMagick-6.8.3-Q16/convert.exe

ファイル構成

  • AppProperties.java
    • プロパティファイルを扱うシングルトン
  • ImageUtil.java
    • 画像の縦横サイズを縮小するメソッドが1つ定義されている
  • app.properties
    • 設定を切り出したプロパティファイル

使用したソフトウェアのバージョン

Java のバージョンは次の通り。

$ java -version
java version "1.7.0_11"
Java(TM) SE Runtime Environment (build 1.7.0_11-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

ImageMagick は次のものを使用。

  • ImageMagick-6.8.3-Q16

画像の縮小方法

ImageMagick の convert コマンドを geometry オプションを付けて実行すると、ファイルサイズを指定したものに縮小できる。その処理を ImageUtil#scaleDownFileSize で行なっている。

convert コマンドは外部コマンドなので ProcessBuilder を使って実行する。

Googleアドセンス用(PC)

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

関連記事

icatch-puzzle-212154_640

ImageMagick を使って画像を結合する方法

前回に引き続き ImageMagick ネタです。今回は画像を結合する方法を調べてみました。

記事を読む

icatch-man-thumbs-up

ImageMagick を使ってサムネイル画像を作成する方法

またまた ImageMagick ネタです。今回はサムネイル画像を作成する方法を調べてみました。

記事を読む

icatch-lock-6311261312401

ImageMagick を使って Exif を取り除く方法

プライベートで撮影した写真をブログとかどこかの Web サービスにアップロードしたり、人に渡すときは

記事を読む

Googleアドセンス用(PC)

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


− 2 = 四

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Googleアドセンス用(PC)

icatch-jersey_multi_pathparams
Jerseyの@PathParamはスラッシュの間に複数指定できる

http://hoge-api/user/{id}.{format}

icatch-vagrant_box_customize
VagrantのBoxファイルをカスタマイズして独自のBoxファイルを作成する

配布されている Vagrant の Box ファイルを使って検証環境を

icatch-2015-006-1
バリデーションチェックにJava8のOptionalを使ってスマートに書く(自分比)

Web アプリのバリデーションチェックにアノテーションを使うことが増え

icatch-2015-005-1
ユニットテストの偏りを防ぐ命名規則の付け方

ユニットテスト名に以下の命名規則を付けるようにして二ヶ月ぐらい経った。

icatch-2015-004-1
Vagrantで起動したCentOS上のOctopressをホストOSから確認する設定

タイトルの通りだが、Vagrant を使って起動した CentOS に

→もっと見る

PAGE TOP ↑