こんにちは、GMOアドマーケティングのKMです。
検証用画像をたくさん用意したいときなどに便利そうだったので、PHP GDを使って画像の動的生成を試してみました。
例えばパラメーター経由で画像サイズや色、文字列、フォーマットなどを指定できるように作っておくと、検証したい内容に応じてちょうど良い感じの画像をサクサク用意することができそうです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?php $text = $_GET['t'] ?: ''; $format = (isset($_GET['f']) && in_array($_GET['f'], array('jpg', 'png'))) ? $_GET['f'] : 'jpg'; $width = (int) $_GET['w'] ?: 100; $height = (int) $_GET['h'] ?: 100; $text_color_r = (int) $_GET['tcr'] ?: 0; $text_color_g = (int) $_GET['tcg'] ?: 0; $text_color_b = (int) $_GET['tcb'] ?: 0; $bg_color_r = (int) $_GET['bcr'] ?: 255; $bg_color_g = (int) $_GET['bcg'] ?: 0; $bg_color_b = (int) $_GET['bcb'] ?: 0; $im = @imagecreatetruecolor($width, $height) or die('Cannot Initialize new GD image stream'); $bg_color = imagecolorallocate($im, $bg_color_r, $bg_color_g, $bg_color_b); imagefilledrectangle($im, 0, 0, $width, $height, $bg_color); $text_color = imagecolorallocate($im, $text_color_r, $text_color_g, $text_color_b); imagestring($im, 1, 10, 10, $text, $text_color); if ($format === 'jpg') { header('Content-Type: image/jpeg'); imagejpeg($im, null, 100); } else if ($format === 'png') { header('Content-Type: image/png'); imagepng($im); } imagedestroy($im); |
ドキュメントの基本をなぞるくらいで十分便利に使うことができます。これをWebブラウザからアクセスできるところへ配置してアクセスしてみると画像が出力されます。ここでは例として example.jp でアクセスするものとします。
例えば何かしら画像の入稿機能の検証をしようと一枚払い出してみます。どこかから問題のない画像を探してきたり別のツールで書き出したりするよりずっと快適に適当な画像が得られます。
https://example.jp/img.php?w=200&h=200
次に更新機能の検証をしようと、例えば「update」などと文字列を付与して払い出してみます。目的や状況のメモにもなって助かります。
https://example.jp/img.php?w=200&h=200&t=update
フォーマットが変わって上書き入稿された場合の挙動も検証しておきます。以前問題があったので慎重です。
https://example.jp/img.php?f=png&w=200&h=200&t=update2
一括アップロード機能の検証などで手元に多くの画像が欲しい場合には、シェルで一気にダウンロードしてくるなども簡単です。
1 2 3 |
for i in {1..3}; do wget -O "img-${i}.jpg" "https://example.jp/img.php?w=200&h=200&t=${i}"; done |
以上になります。
まだまだ多くの機能があるようですので理解を深めてみたいです。
参考ドキュメント: https://www.php.net/manual/ja/book.image.php