この記事では、PHP で折れ線グラフを描画するための GD ライブラリの使用法をコードを通して紹介します。これには、PHP での GD ライブラリの簡単な使用方法が含まれます。興味のある友人は、PHP で一緒に学ぶことができます。 image 関数を直接使用することもできますが、処理されるほとんどの画像は、PHP をコンパイルするときに GD ライブラリを必要とします。 GD ライブラリのインストールに加えて、サポートする必要がある画像形式に応じて、PHP で他のライブラリが必要になる場合があります。 GD ライブラリは、http://www.boutell.com/gd/ から無料でダウンロードできます。GD ライブラリの最新バージョンでは、GIF、JPEG、PNG、WBMP、XBM などの形式の画像がサポートされています。 . ファイルに加え、FreeType や Type 1 などのいくつかのフォント ライブラリもサポートしています。 GDライブラリの機能を利用することで、さまざまな点、線、幾何学図形、文字、色などの演算や加工を行うことができ、また、さまざまな形式の画像ファイルを作成したり読み込んだりすることもできます。
PHP では、GD ライブラリを介して画像を処理する操作は、まずメモリ上で処理され、操作が完了した後、ブラウザに出力されるか、ファイル ストリームの形式でサーバーのディスクに保存されます。イメージの作成は、以下に示す 4 つの基本的な手順で行う必要があります。
(1) キャンバスの作成: すべての描画デザインは背景画像上で完成する必要があり、キャンバスは実際には画像情報を保存するためにメモリ内で開かれる一時領域です。今後の画像操作はこの背景キャンバスに基づいて行われ、このキャンバスの管理はペイント時に使用するキャンバスと同様です。
(2) 画像の描画: キャンバスの作成後、このキャンバス リソースを使用して、画像の色を設定し、キャンバスを塗りつぶし、点、線分、さまざまな幾何学図形を描画し、画像にテキストを追加できます。多彩なポートレート機能も搭載。
(3) 出力画像: 画像全体の描画が完了したら、画像をサーバーが指定したファイルに特定の形式で保存するか、画像をブラウザーに直接出力して表示する必要があります。ユーザー。ただし、画像を出力する前に、header() 関数を使用して Content-type を送信し、ブラウザに通知する必要があります。今回はテキストではなく画像が送信されます。
(4) リソースの解放: 画像が出力されると、キャンバス内のコンテンツは使用できなくなります。システム リソースを節約するには、キャンバスが占有しているすべてのメモリ リソースを時間内にクリアする必要があります。
GD を使用して PHP で折れ線グラフを描画します。コードは次のとおりです:Class Chart{ private $image; // 定义图像 private $title; // 定义标题 private $ydata; // 定义Y轴数据 private $xdata; // 定义X轴数据 private $seriesName; // 定义每个系列数据的名称 private $color; // 定义条形图颜色 private $bgcolor; // 定义图片背景颜色 private $width; // 定义图片的宽 private $height; // 定义图片的长 /* * 构造函数 * String title 图片标题 * Array xdata 索引数组,X轴数据 * Array ydata 索引数组,数字数组,Y轴数据 * Array series_name 索引数组,数据系列名称 */ function __construct($title,$xdata,$ydata,$seriesName) { $this->title = $title; $this->xdata = $xdata; $this->ydata = $ydata; $this->seriesName = $seriesName; $this->color = array('#DC', '#B', '#EDB', '#DDDF', '#CBE', '#E', '#FF', '#FFF', '#AFC'); } /* * 公有方法,设置条形图的颜色 * Array color 颜色数组,元素取值为'#DC'这种形式 */ function setBarColor($color){ $this->color = $color; } /* * 绘制折线图 */ public function paintLineChart() { $ydataNum = $this->arrayNum($this->ydata); // 取得数据分组的个数 $max = $this->arrayMax($this->ydata); // 取得所有呈现数据的最大值 $max = ($max > )? $max : ; $multi = $max/; // 如果最大数据是大于的则进行缩小处理 $barHeightMulti = .; // 条形高缩放的比例 $lineWidth = ; $chartLeft = (+strlen($max))*; // 设置图片左边的margin $lineY = ; // 初始化条形图的Y的坐标 // 设置图片的宽、高 //$this->width = $lineWidth*count($this->xdata) + $chartLeft - $lineWidth/.; $margin = ; // 小矩形描述右边margin $recWidth = ; // 小矩形的宽 $recHeight = ; // 小矩形的高 $space = ; // 小矩形与条形图的间距 $tmpWidth = ; // 设置图片的宽、高 $lineChartWidth = $lineWidth*count($this->xdata) + $chartLeft - $lineWidth/. ; // 两个系列数据以上的加上小矩形的宽 if($ydataNum > ) { $tmpWidth = $this->arrayLengthMax($this->seriesName)**/ + $space + $recWidth + + $margin; } $this->width = $lineChartWidth + $tmpWidth; $this->height = ; $this->image = imagecreatetruecolor($this->width ,$this->height); // 准备画布 $this->bgcolor = imagecolorallocate($this->image,,,); // 图片的背景颜色 // 设置条形图的颜色 $color = array(); foreach($this->color as $col) { $col = substr($col,,strlen($col)-); $red = hexdec(substr($col,,)); $green = hexdec(substr($col,,)); $blue = hexdec(substr($col,,)); $color[] = imagecolorallocate($this->image ,$red, $green, $blue); } // 设置线段的颜色、字体的颜色、字体的路径 $lineColor = imagecolorallocate($this->image ,xcc,xcc,xcc); $fontColor = imagecolorallocate($this->image, x,xf,xf); $fontPath = 'font/simsun.ttc'; imagefill($this->image,,,$this->bgcolor); // 绘画背景 // 绘画图的分短线与左右边线 for($i = ; $i < ; $i++ ) { imageline($this->image,$chartLeft-,$lineY-$barHeightMulti*$max//$multi*$i,$lineChartWidth,$lineY-$barHeightMulti*$max//$multi*$i,$lineColor); imagestring($this->image,,,$lineY-$barHeightMulti*$max//$multi*$i-,floor($max/*$i),$fontColor); } imageline($this->image,$chartLeft-,,$chartLeft-,$lineY,$lineColor); imageline($this->image,$lineChartWidth-,,$lineChartWidth-,$lineY,$lineColor); $style = array($lineColor,$lineColor,$lineColor,$lineColor,$lineColor,$this->bgcolor,$this->bgcolor,$this->bgcolor,$this->bgcolor,$this->bgcolor); imagesetstyle($this->image,$style); // 绘制折线图的分隔线(虚线) foreach($this->xdata as $key => $val) { $lineX = $chartLeft + + $lineWidth*$key; imageline($this->image,$lineX,,$lineX,$lineY,IMG_COLOR_STYLED); } // 绘画图的折线 foreach($this->ydata as $key => $val) { if($ydataNum == ) { // 一个系列数据时 if($key == count($this->ydata) - ) break; $lineX = $chartLeft + + $lineWidth*$key; $lineY = $lineY-$barHeightMulti*($this->ydata[$key+])/$multi; // 画折线 if($key == count($this->ydata) - ) { imagefilledellipse($this->image,$lineX+$lineWidth,$lineY,,,$color[]); } imageline($this->image,$lineX,$lineY-$barHeightMulti*$val/$multi,$lineX+$lineWidth,$lineY,$color[]); imagefilledellipse($this->image,$lineX,$lineY-$barHeightMulti*$val/$multi,,,$color[]); }elseif($ydataNum > ) { // 多个系列的数据时 foreach($val as $ckey => $cval) { if($ckey == count($val) - ) break; $lineX = $chartLeft + + $lineWidth*$ckey; $lineY = $lineY-$barHeightMulti*($val[$ckey+])/$multi; // 画折线 if($ckey == count($val) - ) { imagefilledellipse($this->image,$lineX+$lineWidth,$lineY,,,$color[$key%count($this->color)]); } imageline($this->image,$lineX,$lineY-$barHeightMulti*$cval/$multi,$lineX+$lineWidth,$lineY,$color[$key%count($this->color)]); imagefilledellipse($this->image,$lineX,$lineY-$barHeightMulti*$cval/$multi,,,$color[$key%count($this->color)]); } } } // 绘画条形图的x坐标的值 foreach($this->xdata as $key => $val) { $lineX = $chartLeft + $lineWidth*$key + $lineWidth/ - ; imagettftext($this->image,,-,$lineX,$lineY+,$fontColor,$fontPath,$this->xdata[$key]); } // 两个系列数据以上时绘制小矩形及之后文字说明 if($ydataNum > ) { $x = $lineChartWidth + $space; $y = ; foreach($this->seriesName as $key => $val) { imagefilledrectangle($this->image,$x,$y,$x+$recWidth,$y+$recHeight,$color[$key%count($this->color)]); imagettftext($this->image,,,$x+$recWidth+,$y+$recHeight-,$fontColor,$fontPath,$this->seriesName[$key]); $y += $recHeight + ; } } // 绘画标题 $titleStart = ($this->width - .*strlen($this->title))/; imagettftext($this->image,,,$titleStart,,$fontColor,$fontPath,$this->title); // 输出图片 header("Content-Type:image/png"); imagepng ( $this->image ); } /* * 私有方法,当数组为二元数组时,统计数组的长度 * Array arr 要做统计的数组 */ private function arrayNum($arr) { $num = ; if(is_array($arr)) { $num++; for($i = ; $i < count($arr); $i++){ if(is_array($arr[$i])) { $num = count($arr); break; } } } return $num; } /* * 私有方法,计算数组的深度 * Array arr 数组 */ private function arrayDepth($arr) { $num = ; if(is_array($arr)) { $num++; for($i = ; $i < count($arr); $i++){ if(is_array($arr[$i])) { $num += $this->arrayDepth($arr[$i]); break; } } } return $num; } /* * 私有方法,找到一组中的最大值 * Array arr 数字数组 */ private function arrayMax($arr) { $depth = $this->arrayDepth($arr); $max = ; if($depth == ) { rsort($arr); $max = $arr[]; }elseif($depth > ) { foreach($arr as $val) { if(is_array($val)) { if($this->arrayMax($val) > $max) { $max = $this->arrayMax($val); } }else{ if($val > $max){ $max = $val; } } } } return $max; } /* * 私有方法,求数组的平均值 * Array arr 数字数组 */ function arrayAver($arr) { $aver = array(); foreach($arr as $val) { if(is_array($val)) { $aver = array_merge($aver,$val); }else{ $aver[] = $val; } } return array_sum($aver)/count($aver); } /* * 私有方法,求数组中元素长度最大的值 * Array arr 字符串数组,必须是汉字 */ private function arrayLengthMax($arr) { $length = ; foreach($arr as $val) { $length = strlen($val) > $length ? strlen($val) : $length; } return $length/; } // 析构函数 function __destruct(){ imagedestroy($this->image); } }
テストコードは次のとおりです:
$xdata = array('测试一','测试二','测试三','测试四','测试五','测试六','测试七','测试八','测试九'); $ydata = array(array(,,,,,,,,),array(,,,,,,,,)); $color = array(); $seriesName = array("七月","八月"); $title = "测试数据"; $Img = new Chart($title,$xdata,$ydata,$seriesName); $Img->paintLineChart();効果の画像は次のとおりです:
これでコードは終わりです。
今日はGDライブラリの簡単な使い方をいくつか学びましたので、まとめてみましょう!
GDライブラリとは何ですか? 、グラフィック デバイス、イメージ ツール ライブラリ、gd ライブラリは、グラフィックを処理するための PHP の拡張ライブラリです。GD ライブラリを使用して、画像を処理したり、画像を生成したりできます。 Web サイトでは、通常、GD ライブラリは、サムネイルの生成や画像への透かしの追加、または Web サイト データに関するレポートの生成に使用されます。
php は HTML テキストの出力に限定されません。 GD 拡張ライブラリを使用すると、PHP を使用してテキスト ボタン、検証コード、データ チャートなどの画像を動的に出力することもできます。 Ha は、画像を簡単に編集したり、サムネイルを処理したり、画像に透かしを追加したりすることができ、強力な画像処理機能を備えています。
まず、GD ライブラリと、簡単なグラフィックを描画するためのいくつかの手順について説明します。1. まず、キャンバスを作成します。ここでは、imagecreatetruecolor 関数を使用します。または、imagecreate を使用できるという違いがあります。後者は、パレットベースの画像を作成します
$img=imagecreatetruecolor(100,100)。これには、作成した画像の幅と高さに対応する 2 つのパラメータがあります
2. いくつかの必要な「染料ボックス」を設定します。 "
実際には、後で使用するいくつかの塗りつぶしの色を定義するためです。ここでは、この位置で均一に色を定義します。ここでは、imagecolorallocate 関数を使用します
$white=imagecolorallocate($img,0xFF,0xFF,0xFF)或者可以使用RGB的颜色命名方式 如$white=imagecolorallocate($img,255,255,255); $gray = imagecolorallocate($img, 0xC0, 0xC0, 0xC0); $darkgray = imagecolorallocate($img, 0x90, 0x90, 0x90); $navy = imagecolorallocate($img, 0x00, 0x00, 0x80); $darknavy = imagecolorallocate($img, 0x00, 0x00, 0x50); $red = imagecolorallocate($img, 0xFF, 0x00, 0x00); $darkred = imagecolorallocate($img, 0x90, 0x00, 0x00); $black=imagecolorallocate($img,0x00,0x00,0x00);
ここでは、さらに必要な色を定義します
3塗りつぶされた領域の色は、imagefill 関数
imagefill($img,0,0,$white) を使用すると、単純に背景色を塗りつぶすことを意味します。座標 x y
4 、円グラフなどのグラフィックを描画するには、imagefilledarc 関数が必要です
imagefilledarc() には、imagefilledarc($img,50,$i,100,50,0 など) のような比較的多くのパラメーターがあります。 ,45,$ red,IMG_ARC_PIE);
これは、それぞれ、赤色のワード img 画像上に 50、$i から始まり、角度 0 ~ 45 の範囲内で円弧を描くことを意味します
5。説明の質問を追加することもできます。たとえば、文字列を水平方向に追加するには、imagestring($img,1,20,40,"hello,world!",$red) を使用します。これは、img に赤い hello,world を書き込むことを意味します。座標として 20 40 を使用した画像。 Words
6. 画像出力
に関しては、まずブラウザに出力したい画像形式を伝える必要があります。たとえば、png を出力したい場合は、header("Content-type:image/png") を使用します。 );
次に、画像をブラウザに出力します、imagepng($img);
最後に、画像を破棄します、つまり、画像ストレージが占有しているメモリを解放します imagedestroy(img);,

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。

PHPでは、特性は方法が必要な状況に適していますが、継承には適していません。 1)特性により、クラスの多重化方法が複数の継承の複雑さを回避できます。 2)特性を使用する場合、メソッドの競合に注意を払う必要があります。メソッドの競合は、代替およびキーワードとして解決できます。 3)パフォーマンスを最適化し、コードメンテナビリティを改善するために、特性の過剰使用を避け、その単一の責任を維持する必要があります。

依存関係噴射コンテナ(DIC)は、PHPプロジェクトで使用するオブジェクト依存関係を管理および提供するツールです。 DICの主な利点には、次のものが含まれます。1。デカップリング、コンポーネントの独立したもの、およびコードの保守とテストが簡単です。 2。柔軟性、依存関係を交換または変更しやすい。 3.テスト可能性、単体テストのために模擬オブジェクトを注入するのに便利です。

SplfixedArrayは、PHPの固定サイズの配列であり、高性能と低いメモリの使用が必要なシナリオに適しています。 1)動的調整によって引き起こされるオーバーヘッドを回避するために、作成時にサイズを指定する必要があります。 2)C言語アレイに基づいて、メモリと高速アクセス速度を直接動作させます。 3)大規模なデータ処理とメモリに敏感な環境に適していますが、サイズが固定されているため、注意して使用する必要があります。

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

JavaScriptでは、nullcoalescingoperator(??)およびnullcoalescingsignmentoperator(?? =)を使用できます。 1.??最初の非潜水金または非未定されたオペランドを返します。 2.??これらの演算子は、コードロジックを簡素化し、読みやすさとパフォーマンスを向上させます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

SublimeText3 中国語版
中国語版、とても使いやすい
