動機
格ゲーライクなゲームを作っててプログラムで使用する個別の画像を横一列に連結させたい。
しかしPhotoshopの手作業で連結するのがぶっちゃけしんどいので、手軽なところでPHPプログラムで連結させるのがいいかなーと思ったのが動機です(--;)
環境
Windows10, PHP&Apacheインストール済み
どうしたい?
こういう画像たちを
こうしたい
そしてどうした?
よく使われているImageMagickを使ってみようかと思ったものの、うまく手前のWindowsにインストールできなくてあきらめる。
(持ってきたDLLが「使えない」といわれたとき、やる気のひもが切れる音がした・・・・・・必要になった時また挑戦すればいいや)
しかたないのでデフォのGD関数を使うことに。
できあがったコード
<?php
################
## 画像を横にくっつけていくモジュール
################
##エラーチェック
if($argc<4){
echo "error01";
exit;
}
if(!(is_numeric($argv[1]) && is_numeric($argv[2]))){
echo "error02";
exit;
}
//画像のサイズ
$width = $argv[1];
$height = $argv[2];
//画像作成
$base = ImageCreateTrueColor($width * ($argc-3), $height);
//ピクセルブレンド停止 → PNGでα値を使用する
imageAlphaBlending($base, false);
imageSaveAlpha($base, true);
//透過色で埋める
$transparent = imageColorAllocateAlpha($base, 0xFF, 0xFF, 0xFF, 0);
imageFill($image, 0, 0, $transparent);
//合成開始
for($i = 3; $i < $argc; $i++){
echo $argv[$i]."\n";
$src = ImageCreateFromPng("./".$argv[$i]);
ImageCopy($base, $src, ($i-3) * $width, 0, 0, 0, $width, $height);
imagedestroy($src);
//データ削除
unlink("./".$argv[$i]);
}
//出力
imagepng ($base, "./gen/".$argv[3], 8);//圧縮率「8」
imagedestroy($base);
echo "generated\n";
?>
プログラムの使い方
使い方としてはまずPHPファイルのあるディレクトリ直下に合体させたい画像たちをコピーしておきましょう。
同じく「gen」ディレクトリも作成しておきましょう。
そしてコンソールで
php gattai.php 200 200 Swing01.png Swing02.png Swing03.png Swing04.png Swing05.png
とコマンドを打ちましょう。
第1,2パラメータは各画像の大きさ(全ての画像が同じ大きさであることが必須です)、第3から先はカレントディレクトリにある画像ファイル名です。
エラーなしで通れば、「gen」以下に第3パラメータの名前で合体したファイルが作成されているはずです。(ちなみに合体に使われた画像ファイルはunlinkで削除されます)
各自改良して使えば、ゲーム作りたい人には便利なんじゃないかな……っていうか皆さん、プログラマーならこれくらいやってますよね(苦笑)
別にPHPじゃなくてもPerlでもVBScriptでもRubyでもPythonでもコンパイルいらない言語ならなんでもOKです。
ちなみに初心者の方のために一応お伝えしておくと今回のプログラムは、PHPとApacheがインストールされてるPCかサーバ上で実行するのが前提です。
以上です。
参考URL
http://yozorabiyori.blog116.fc2.com/blog-entry-235.html