画像ファイルのリサイズ

AWK Users JP :: 画像のサムネイルを作成して HTML 形式にする では ImageMagic を用いてサムネイルを作成しましたが、これだと非常にオーバーヘッドが大きく処理も遅いので、xgawk に組み込まれている GD の機能を使って変換してみます。

個人的に Twitter の気になる発言を Gnome Notification Area に表示しているのですが、大きなアイコン (アバター?) が設定されていとかなり崩れてしまうので、適当なサイズに変換したいというのがモチベーションです。

#! /usr/local/bin/xgawk -f
# resize_image.awk
# GD 拡張でイメージをリサイズします
# usage: xgawk -f resize_image.awk image

@load gd

BEGIN {
    IGNORECASE = 1;
    file_name = ARGV[1];

    # ファイルの読み込み
    image_handler = gdImageCreateFromFile(file_name);

    # 読み込んだイメージのサイズを表示
    image_width  = gdImageSX(image_handler);
    image_height = gdImageSY(image_handler);

    # リサイズ後のイメージのサイズを設定 (アス非固定)
    new_width = 48;
    rate = new_width / image_width;
    new_height = rate * image_height;

    # 新しい画像のファイルハンドラーを作成
    new_image_handler = gdImageCreateTrueColor(new_width, new_height);

    # リサイズした画像をコピー
    gdImageCopyResampled(new_image_handler, image_handler, \
                       0, 0, 0, 0, new_width, new_height, \
                       image_width, image_height);

    # ファイルを出力
    gdImagePngName(new_image_handler, file_name ".png");

    # 後処理 (必須?)
    gdImageDestroy(image_handler);
}

実行結果は特に載せませんが、かなり高速で処理できているようです。

GD の機能は使う人は多用しているかもしれませんが、awk で GD が使えると幅が増えて面白いです。

tag_xgawk.png