画像ファイルのリサイズ
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 が使えると幅が増えて面白いです。

