LoginSignup
2
1

More than 5 years have passed since last update.

PHPでゲーム用の画像連結プログラムを作ったときのメモ

Last updated at Posted at 2017-02-06

動機

格ゲーライクなゲームを作っててプログラムで使用する個別の画像を横一列に連結させたい。
しかしPhotoshopの手作業で連結するのがぶっちゃけしんどいので、手軽なところでPHPプログラムで連結させるのがいいかなーと思ったのが動機です(--;)

環境

Windows10, PHP&Apacheインストール済み

どうしたい?

こういう画像たちを

Swing01.png
Swing02.png
Swing03.png
Swing04.png
Swing05.png

こうしたい

Swing01.png

そしてどうした?

よく使われている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

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1