Readyforのリターン用に多色のTシャツ画像を自動で作ってみた
概要
Readyforでリターン用の画像は一枚しか入れられません。例えば、こんな感じの画像です。これは4つの画像からできているのでこれを一枚にするワンライナー作りましたという記事です。
このコマンドとコマンドパラメータはchatGPTに教えてもらいました。いくつかの候補を上げてもらうのがとても便利。
コード書く前に何をしたいか考えてみる。
欲しい画像(そしてできた画像)はこんな感じです。
これは4つの画像の合成でできています。文字の表と裏の画像と、Tシャツの表と裏の画像4枚からできています。リターンにTシャツの色を豊富に用意するとなると、合成を手作業で行うのは大変です。手でやっていられないので、自動化を考えました。
考え方は至って簡単です。4つの画像を用意して、それを横に並べればいいでしょう。どの色でも同じ配列になるように画像のサイズを合わせておきます。画像は余白を考慮して座標を指定すればいいでしょう。
そこまで考えてchatGPTに「画像を横並びにするLinuxコマンドはない?」、「convertを使って複数の画像の位置を指定して合成するには?」などと聞くと方法を幾つかを教えてくれました。1時間ぐらいでできた作業ですが、google検索で探すよりはは手っ取り早い感じです。
実際に見ていきます。
imagemagick社のconvertを用います。システムに入っていない方はMacなら
brew install imagemagick
でインストールできます1。
1. Tシャツの画像の準備
UP-Tなどで独自のデザインでTシャツを作れますが、使ったサイトでは表と裏は一枚ずつしか出てこないです。
サイトのカートで色見本を試すことができます。WEBサイトで編集して編集済みのTシャツのサイズと色を選び、プレビューで表示した後、なるべく枠が残らないギリギリで画面キャプチャーしました。
-
Macだと
システム環境設定
→キーボード
→ショートカット
→スクリーンショット
にキーボードショートカットの記載があります。 -
Winだと例えば【パソコン】スクリーンショットの撮影と保存先の設定
用意した画像はこんな感じになります。スクリーンショットのファイル拡張子はpngとします。
2. Tシャツのサイズを幅を全部一定にします。
私の環境では幅1700pxぐらいでキャプチャーされたのですが、計算を簡単にするため例えば1500pxにリサイズします。
cd 対象のディレクトリ
ls *.png | awk '{print "convert " $1 " -resize 1500x " $1 ".jpg"}' | bash -C
3. 裏の文字と表の文字を作ります。
単にkeynoteで表示して画面キャプチャーしただけです。
これもリサイズします。150px幅にしました。
convert -resize 150x up.png up.jpg
convert -resize 150x down.png down.jpg
4. 次に横一列に並べます
imagemagickのconvertを使って文字”表"とTシャツの表と文字”裏"とTシャツの裏を一列に並べます。オフセットを100x100pxにします。背景も白にします。
ls *png.jpg |
xargs -n2 |
awk '{
print "convert -size 3500x1700 xc:none \\( up.jpg -geometry +100+100 \\) -composite \\( " $1 " -geometry +250+100 \\) -composite \\( down.jpg -geometry +1750+100 \\) -composite \\( " $2 " -geometry +1900+100 \\) -composite -background white -flatten OUT." ++i ".jpg"
}' |
bash -C
ポイントは表と裏のTシャツの2枚の画像を使って生成しますが、これをxargs -n2
で2つ区切りの行に変換することです。
convertのオプションですが、最終画像のサイズを-size
オプションで、各画像の位置を-geometory
と-composite
オプションで指定しています。また背景を白にするため、-background white -flatten
オプションを指定しています。
出力ファイル名はOUT.x.jpgです。xは数字です。最後にbash -C
で実行します。
実際には、パイプを一段ずつ足していってデバックするのがいいと思います。言わずもがなですが。
そうするとこんな感じの絵が各種の色で作られましたとさ。
めでたしめでたし。