PHP GD 枠付文字パネルファイル生成機

[ コード例 ]


<?php

/**
 * GD 文字列パネル描画ファイル生成
 * argv : 1: 生成ファイル名,  2: 横サイズ 3: 縦サイズ 4: フォント色 5:背景色 6:枠色
 *        7: 枠サイズ
 *        8: 書込文字列 9: 文字サイズ 10 : 背景透明度 (0 - 127) (8-10 オプション)
 */

// == 引数取得 == //
$fnm = $argv[1];
$xsz = $argv[2];
$ysz = $argv[3];

// 色指定 //
$rgb_font = $argv[4];
$rgb_fill = $argv[5];
$rgb_frame = $argv[6];
//  isset($argv[10]) ? $argv[10] : "";

// 枠サイズ //
$frlen = $argv[7]; 

// 文字 //
$text = isset($argv[8]) ? $argv[8] : "";
$textsz = isset($argv[9]) ? $argv[9] : "";
$alpha = isset($argv[10]) ? $argv[10] : 0;

// Linux 引数の" が認識されてない対策 //
$text = str_replace("_", " ", $text);

// 引数を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);
}


// 画像の新規生成 //
$img = imagecreate($xsz, $ysz);

# 色を作る #
// 文字 //
$imcol_font = ImageColorAllocate($img, $fontdecs[0], $fontdecs[1], $fontdecs[2]);
// 背景は透明度指定あり //
$imcol_fill = ImageColorAllocateAlpha($img, $filldecs[0], $filldecs[1], $filldecs[2], $alpha);
// 枠 //
$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";
}

// 背景を描画する //
/* img, x1, y1, x2, y2, color */
imagefilledrectangle($img, 0, 0, $xsz, $ysz, $imcol_fill);

// 枠線幅 //
imagesetthickness($img, $frlen);

// 文字を書き込む //
/* img, テキストサイズ, アングル, X, Y, color, font, text */
$textx = (int)($frlen) + (int)($textsz / 2);
$texty = (int)($frlen + $textsz) + (int)($textsz / 2);
ImageTTFText($img, $textsz, 0, $textx, $texty, $imcol_font, $font, $text);

// 枠を引く //
/* img, x1, y1, x2, y2, color */
imagerectangle($img, 0, 0, $xsz, $ysz, $imcol_frame);

// ファイルに出力 //
$filepath = pathinfo($fnm);
$ext = mb_strtolower($filepath['extension']);
$res = 1;
try {
  if ($ext === "jpg" || $ext === "jpeg") {
    imagejpeg($img, $fnm, 100);
  }
  else if ($ext === "png") {
    imagepng($img, $fnm, 9);
  }
  else if ($ext === "gif") {
    imagegif($img, $fnm, 100);
  }
}
catch (Exception $ex) {
  $res = 0;
}

// 解放 //
imagedestroy($img);

// 連想配列に格納 //
$responce = [];
$responce["Result"] = $res;

// JSONに変換して出力 //
//echo json_encode($responce, JSON_PRETTY_PRINT);
echo json_encode($responce);

?>


[ 生成例 ]

      

コメントを残す