これまでのところ、GD を使用して描画の基本的なニーズを完了することができました。ただ、ImageString
は使用できるフォントが5つしかなくて見苦しいと感じることがあるので、以下の関数を使います。この機能により TTF フォントを使用できるようになりますが、これらのフォント用のファイルが必要です。
Header("Content-type: image/png");
$im = ImageCreate(400,250);
$col_back = ImageColorAllocate($im,136,200,152);
$col_write = ImageColorAllocate($im, 255,255,255);
$col_black = ImageColorAllocate($im,0,0,0);
ImageTTFText($im,160,15,40,220,$col_black,"C:/windows/fonts/verdana.ttf","PNG ");
// 新しい内容はこの文だけです。パラメータは次のとおりです:
// $im 言うまでもありません。この位置 160 がフォント サイズ (pt) です。 15 ひもは水平から反時計回りの傾斜角度です。
// 40,220 は水平方向と垂直方向の座標です。 ImageString との違いは、
//ImageString で指定された座標は文字列の左上隅であるのに対し、ImageTTFText で指定された座標は左下隅であることに注意してください。
// 次の $col_black は色です。
// "C:/windows/fonts/verdana.ttf" はフォント ファイルのパスで、Linux では "/.../....." です。
// 「http://....」でも構いません。ただし、私はこの方法で使用したことがないので、お勧めしません。
// 自分のマシン上にないものは結局信頼性が低く、重要なタスクを任せることができないからです。
//最後は出力する文字列です。これは特に注目すべき点です。
// ここの文字列は UTF-8 でエンコードする必要があります。 ! !
//ASCII コード 0~127 文字、ASCII コードは UTF-8 エンコーディングと等しいため、欧文文字列を出力するときに変換する必要はありません。
// 中国語を出力したい場合は、一連の変換が必要です。
// www.phpx.com は、悲しいことに GB2312 コードを UTF-8 コードに変換する関数を作成しました。
// 私の他の記事では、この関数の動作原理を具体的に分析しています。
ImagePNG($im);
ImageDestroy($im);
?>
ImageString 出力文字列が占める高さと幅を計算するのに役立つ ImageFontWidth() や ImageFontHeight() と同様に、ImageTTFBBox も役立ちます。 ImageTTFText 出力文字列の状況を計算します。戻り値は
8 個のメンバーの配列で、(この順序に注意してください) 左下、右下、右上、左上の水平座標と垂直座標です。試してみてください:
$p=ImageTTFBBox(160,0,"C:/windows/fonts/verdana.ttf","PNP");
for($i=0;$i<8;$ i+=2)
echo "(".$p[$i].",".$p[$i+1].")"."
";
?>
結果は次のようになります次のように:
(15,-1)
(306,-1)
(306,-117)
(15,-117)
なぜ負の数があるのでしょうか?私にも分かりません。これらの座標は何に対する相対的なものですか?何に対して相対的であっても、両者の相対的な位置は変わりません。したがって、これらは重要ではありません。左下の点がどこにあるべきかは、左右の横座標の差と上下の縦座標の差に基づいて計算できます。
さて、TTFフォントを使って文字列を出力する話は終わりましたが、「漢字を書くのに手間がかかる」という前の問題も解決しました。私の観点から見ると、GD には既存の画像を開いて処理し、再エクスポートするという最後の部分が残っています。
まず第一に、写真の情報を取得することが基本的です。以下の例を見てください:
$im=ImageCreateFromPNG("test.png");
// これは既存の画像を開きます。
// 非常に単純です。パラメータは画像のパス、戻り値は画像 ID です。
echo "画像の幅は ".ImageSX($im)."、高さは ".ImageSY($im).".";
// ImageSX() と ImageSY は、画像の幅と高さを取得します。それぞれ画像を作成する場合、それらはすべて 1 つのパラメータ (開かれた画像の ID) のみを必要とします。
?>
また、GDライブラリに属さない画像情報を取得する関数GetImageSizeがあります。
$p=GetImageSize("test.png");
for($i=0;$i<4;$i++) echo $p[$i]."
";
?>
結果は次のようになります:
50
100
3
width="50" height="100"
この関数は画像に関する情報を含む配列を返し、その 4 つの情報が返されることがわかります。要素は次のとおりです: 最初の 2 つは画像の幅と高さで、3 番目は画像の形式を表します: 1 = GIF、2 = JPG、3 = PNG、4 = SWF、5 = PSD、6 = BMP。最後です
要素は、画像の幅と高さを表すために HTML で使用される文字列です (とても便利です!)。たとえば、次のように使用できます:
....
$pic_name="....";
$pic_size=GetImageSize($pic_name);
?>
>
....
もう一度繰り返しますが、この関数は GD ライブラリに属しません。インストールされていない場合は GD ライブラリは PHP 環境でも使用できます。 !
サムネイルは頻繁に必要となる機能です。サムネイルは、GD の「コピーとサイズ変更」機能を使用して簡単に実装できます。
// 任意のサイズの画像を幅 200 ピクセルに縮小 (拡大) したいとします。
// Header("Content-type: image/jpeg");
$pic_name="test.jpg";
$ims=ImageCreateFromJPEG($pic_name);
// 元の画像を開きます。
$owidth=ImageSX($ims);
$oheight=ImageSY($ims);
// 元の画像の幅と高さを取得します。
$nheight=Round($oheight*200.0/$owidth);
// 新しい画像の高さを計算します。
$imt=ImageCreate(200,$nheight);
// 新しい画像を作成します。
ImageCopyResize($imt,$ims,0,0,0,0,200,$nheight,$owidth,$oheight);
// 新しい画像にコピーしてサイズ変更します。
// この関数には多くのパラメータがあります。まず、コピー先の画像と元の画像の ID です。
// 次の 4 つのパラメータは、コピー先の画像と元の画像のコピー位置の座標です。
// 元の画像の 20,30 から宛先画像の 10,0 にコピーする場合
// これらの 4 つのパラメータは 10,0,20,30 になります。
// 次の 4 つと最後の 4 つのパラメータは、コピー先の画像と元の画像のコピー領域の幅と高さです。
// たとえば、100x50 の領域を元の画像からコピー先にコピーします画像を作成して 50x25 に縮小します
//これらの 4 つのパラメータは 50,25,100,50 です。
// ここで使用するパラメータは、元の画像を新しい画像に完全にコピーすることです (コピー位置はすべて 0,0)
// 拡大または縮小に関係なく、元のサイズを幅 200 ピクセルに調整します。
// 200,$nheight は新しい画像の幅と高さ、$owidth,$oheight は元の画像の幅と高さです。
// この関数を使用するときは、パラメータの各セットで次の点に注意してください。
// 宛先イメージに関連するパラメータが最初に来て、元のイメージに関連するパラメータが最後に来ます。
ImageJPEG ($imt);
ImageDestroy ($imt);ご清聴ありがとうございました!一緒に進歩していきましょう!