[ コード例 ]
<?php
/**
* GD 画像 枠矩形描画付テキスト書き込み
* argv : 1 : ソースファイル名, 2 : デストファイル名, 3 : 書込み文字列
* 4 : フォント色, 5 : 背景色, 6 : フレーム色 (4-6 はオプショナル)
*/
// 引数取得 //
$srcfnm = $argv[1];
$dstfnm = $argv[2];
$text = $argv[3];
// 色指定 //
$rgb_font = $argv[4];
$rgb_fill = $argv[5];
$rgb_frame = $argv[6];
$rgb_font = !$rgb_font ? "00:00:ff" : $rgb_font; // フォント色 (既定は青)
$rgb_fill = !$rgb_fill ? "ff:ff:ff" : $rgb_fill; // 背景色 (既定は白)
$rgb_frame = !$rgb_frame ? "ff:00:00" : $rgb_frame; // 枠色 (既定は赤)
// 引数を16進文字列に分解して配列に入れる //
$fontcols = explode(":", $rgb_font);
$fillcols = explode(":", $rgb_fill);
$framecols = explode(":", $rgb_frame);
// +++ 色文字列を数値に変換 +++ //
// ImageColorAllocate用に10進配列にする //
$fontdecs = [];
foreach ($fontcols as $col) {
$fontdecs[] = hexdec($col);
}
$filldecs = [];
foreach ($fillcols as $col) {
$filldecs[] = hexdec($col);
}
$framedecs = [];
foreach ($framecols as $col) {
$framedecs[] = hexdec($col);
}
//var_dump($filldecs);
// 画像サイズ取得 //
list($width, $height, $type) = getimagesize($srcfnm);
$rectx2 = (int) $width - 16; // パネルの横幅
switch ($type) {
case IMAGETYPE_JPEG: // 2
$img = imagecreatefromjpeg($srcfnm);
break;
case IMAGETYPE_PNG: // 3
$img = imagecreatefrompng($srcfnm);
break;
case IMAGETYPE_GIF: // 1
$img = imagecreatefromgif($srcfnm);
break;
}
# 色を作る #
$imcol_font = ImageColorAllocate($img, $fontdecs[0], $fontdecs[1], $fontdecs[2]);
$imcol_fill = ImageColorAllocate($img, $filldecs[0], $filldecs[1], $filldecs[2]);
$imcol_frame = ImageColorAllocate($img, $framedecs[0], $framedecs[1], $framedecs[2]);
# UTF8へ変換 #
$text = mb_convert_encoding($text, 'UTF-8', 'auto');
// フォント //
if (DIRECTORY_SEPARATOR == "/") {
$font = "/usr/share/fonts/vlgothic/VL-Gothic-Regular.ttf";
}
else {
$font = "C:\Windows\Fonts\msgothic.ttc";
}
///usr/share/fonts/VL-Gothic-Regular.ttf
// 背景を描画する //
/* img, x1, y1, x2, y2, color */
imagefilledrectangle($img, 8, 8, $rectx2, 30, $imcol_fill);
// 枠線幅 //
imagesetthickness($img, 2);
// 枠を引く //
/* img, x1, y1, x2, y2, color */
imagerectangle($img, 8, 8, $rectx2, 30, $imcol_frame);
// 文字を書き込む //
$fsz = $width <= 500 ? 10 : 12; // 横幅が少ない場合、フォントを小さくする
/* img, テキストサイズ, アングル, X, Y, color, font, text */
ImageTTFText($img, $fsz, 0, 12, 26, $imcol_font, $font, $text);
//ImageTTFText($img, 11, 0, 12, 26, $imcol_font, $font, $text);
//ImageJPEG($img, "133458_05Text4.jpg");
//ImageJPEG($img, $dstfnm);
// ファイルに出力 //
$res = 1;
try {
if ($type == IMAGETYPE_JPEG) {
imagejpeg($img, $dstfnm, 100);
}
else if ($type == IMAGETYPE_PNG) {
imagepng($img, $dstfnm, 9);
}
else {
imagegif($img, $dstfnm, 100);
}
}
catch (Exception $ex) {
$res = 0;
}
// 解放 //
imagedestroy($img);
// 結果返却 連想配列に格納 //
$responce = [];
$responce["SrcW"] = $width;
$responce["SrcH"] = $height;
$responce["FSize"] = $fsz;
$responce["Result"] = $res;
// JSONに変換して出力 //
echo json_encode($responce, JSON_PRETTY_PRINT);
?>