どせいたんさき。

ナスダヨー

Imagemagick で HTC Desire 用の壁紙画像を加工する

少し前に息抜きに作ったシェルスクリプト.不細工だけど……たぶん,動く.

で、(iPhoneと違って)ちゃんと壁紙が貼れるんだけど、480x800の画像1枚というわけではなく、横に長いのが使える。ただし7画面だから幅3360px必要かというと違って、ちょっとずつ重なってスクロールするので960x800の画像が必要で、しかも(なぜか)左右60pxは使われない。つまり、840x800のほぼ正方形の画像を作って、左右に60pxの余白を入れるというのがDesire用壁紙の作り方だそうだ。

壁紙のサイズについては上記の記事を参考にしました.しかしながら余白をカツカツに設定してしまうと背景をスクロールしたときの遊びで見えてしまうみたいなので画像を 880x800 px に変換して左右に 40px ずつの余白を入れるためのシェルスクリプトを書いてみました.

#!/bin/bash

FILE=${1:?}
EXT=${FILE##*.}
SIZE=`identify ${FILE} | awk '{print $3}'`

XSIZE=`echo ${SIZE} | awk -Fx '{print $1}'`
YSIZE=`echo ${SIZE} | awk -Fx '{print $2}'`

if [ `expr ${XSIZE} - ${YSIZE}` -le 0 ];
then
  TMPSIZE=`echo | awk "{printf \"%d\", ${XSIZE}*800/880}"`		
  XSHIFT=0
  YSHIFT=`echo ${YSIZE} ${TMPSIZE} | awk '{printf "%d", ($1-$2)/2}'`
  YSIZE=${TMPSIZE}
else
  TMPSIZE=`echo | awk "{printf \"%d\", ${YSIZE}*880/800}"`
  XSHIFT=`echo ${XSIZE} ${TMPSIZE} | awk '{printf "%d", ($1-$2)/2}'`
  YSHIFT=0
  XSIZE=${TMPSIZE}
fi

convert \
  \( -crop ${XSIZE}x${YSIZE}+${XSHIFT}+${YSHIFT} ${FILE} \) \
  -resize 880x800 \
  -gravity center -background \#000 -extent 960x800 \
  ${FILE%.*}_HTC.${EXT}


やっていることは以下のとおりです.

  1. 画像のサイズ取得,切り抜くサイズの計算
  2. 画像の切り抜き & 拡大縮小
  3. 画像の左右に黒い背景を付加する

convert の引数がごちゃごちゃして見にくくなっているけど,基本的に書かれた順番に処理されると分かればそんなに難しくないはず.画像の中心を切り抜く仕様になっているので端っこに重要なものがあると見切れるかもしれません.いちいちサイズ指定して変換するのがめんどくさい人向けです.