au絵文字を画像ファイルにする

(2007.10.31)

ケータイメールなどをPCで表示するために、絵文字の画像ファイルを用意したいことがあります。au (KDDI) が絵文字データファイルを配布しているので、それをPNG形式に変換します。

入手

元データは次の場所からダウンロードできます;

弊社は、お客様に対して、絵文字の表示を可能としたEZweb対応移動機向けホームページ、コンテンツ又はアプリケーション (メールの閲覧、保存ソフトを含む) の開発及びその提供を目的とする場合に限り、・・・

とあるので、ケータイ関連以外での使用は不可です。

データ変換

ファイル形式がイラストレータ (.ai) なので、PNG形式に変換してやります。元のデータは、余白があったりなかったりで、大きさがまちまちです。

ImageMagick の convert コマンドが簡単です。画像情報は コマンドで表示できます。

convert は、例えば、次のように書きます。

convert 入力ファイル名 -trim -resize 24x24 -transparent "#FFFFFF" 出力ファイル名
-trim
余白を切り詰めます
-resize 幅x高さ
幅、高さに収まるように縮小します。縦横の比率は維持します。
-transparent 色
指定した色の部分を透明にします。

-transparent は色を指定するので、余白の色が違う画像や、画像の内部で白を使っていると、どうも今ひとつてす。-trimのように余白を認識してくれるといいのですが、方法が分かりませんでした。

また、-resize でサイズを指定すると、小さめの画像も指定した大きさに合うように縮小するので、ほかの画像と同じ大きさになってしまいます。これだと個別に修正しないといけません。

identify コマンドでそれぞれの元画像ファイルを見てみると、24x24ドットを基本とし、26x26ドットのものが最大のようでした。

Rubyで一括変換します。次のように書きました。ファイル名が画像の名前になっているので、別ファイルに保存します。

#!/usr/bin/ruby

SRC_DIR = "/home/hori/icon_image"
OUTPUT_DIR = "/home/hori/au_img_new"

File.open(OUTPUT_DIR + "/list.txt", 'w') {|listf|
  Dir.glob(SRC_DIR + "/*.ai").each {|inname|
    base = File.basename(inname, ".ai")
    code = base[0, 3]; name = base[3..-1]

    listf.puts "#{code}\t#{name}"
    `convert '#{inname}' -trim -transparent white -resize 75% #{OUTPUT_DIR}/#{code}.png`
  }
}

これで画像ファイルの出来上がりです。