ImagesetStyle()は、PHPのGD拡張機能によって提供される関数であり、ライン描画に「スタイル」(つまり、ピクセルシーケンス)を設定するために使用されるため、事前定義された点線および破線、点線、またはその他の複雑なラインタイプを使用すると、 ImageLine() 、 ImagePolygon()などを使用した後、この機能を使用した後、 IMGCOLの特別な機能を使用した後、描画機能を呼び出す際に使用できます。 IMG_COLOR_STYLEDBRUSHEDブラシと組み合わせて使用されます)ラインを描くとき、スタイルごとにラインを描画します。 PHP +1
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">imagesetstyle</span></span><span> ( GdImage|resource </span><span><span class="hljs-variable">$image</span></span><span> , </span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$style</span></span><span> )
</span></span>$画像: ImageCreatetrueColor()またはImageCreate()などによって返される画像リソースまたはGDIMAGEオブジェクト。
$スタイル:いくつかの「ピクセル色」で構成される配列(空の配列ではありません)。配列要素は通常、 ImageColorAllocate() / ImageColorallocatealpha()によって返されるカラー識別子(積分)であり、透明ピクセルを表すために一定のIMG_COLOR_TRASSPARENTを含めることもできます。関数は正常に返され、失敗した場合はfalseを返します。 Php
$スタイルは、 [赤、赤、赤、白、白]などの「ピクセルパターン」の文字列と考えてください。線を描き、特別な色のIMG_COLOR_STYLEDを使用しているとき、GDはラインに沿って順番にピクセルを読み取ります。色の値に遭遇したら、対応するピクセルを描画し、透明な値に遭遇したら、スキップして、ダッシュライン、ドット、ラインなどの効果を形成します。スタイルアレイが長く、組み合わせがより複雑なほど、より多くのラインタイプを作成できます。 Tecfa
IMG_COLOR_STYLED : ImageLine()などの関数の色パラメーターとして使用され、現在のスタイル配列を使用して行が描画されることを示します。
IMG_COLOR_BRUSHED / IMG_COLOR_STYLEDBRUSHED :ブラシ(ブラシ)と組み合わせて使用される特別なカラー定数(より複雑な描画シーンに使用できます)。
IMG_COLOR_TRASSPARENT :透明なピクセルは、スタイルアレイで表されます。
これらの定数は、PHP画像/GD定数テーブルで説明されています。 Php
次の例は、キャンバスを作成し、スタイルを定義し、 ImageLine()を使用した対角線の点線を描画する方法を示しています。次に、画像をPNGファイルとして(またはブラウザによって直接表示)出力します。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 頭(画像をブラウザに直接出力する場合)</span></span><span>
</span><span><span class="hljs-comment">// header('Content-Type: image/png');</span></span><span>
</span><span><span class="hljs-comment">// キャンバスを作成します</span></span><span>
</span><span><span class="hljs-variable">$w</span></span><span> = </span><span><span class="hljs-number">300</span></span><span>;
</span><span><span class="hljs-variable">$h</span></span><span> = </span><span><span class="hljs-number">200</span></span><span>;
</span><span><span class="hljs-variable">$im</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatetruecolor</span></span><span>(</span><span><span class="hljs-variable">$w</span></span><span>, </span><span><span class="hljs-variable">$h</span></span><span>);
</span><span><span class="hljs-comment">// 色の分布</span></span><span>
</span><span><span class="hljs-variable">$white</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecolorallocate</span></span><span>(</span><span><span class="hljs-variable">$im</span></span><span>, </span><span><span class="hljs-number">255</span></span><span>, </span><span><span class="hljs-number">255</span></span><span>, </span><span><span class="hljs-number">255</span></span><span>);
</span><span><span class="hljs-variable">$black</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecolorallocate</span></span><span>(</span><span><span class="hljs-variable">$im</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>);
</span><span><span class="hljs-variable">$red</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecolorallocate</span></span><span>(</span><span><span class="hljs-variable">$im</span></span><span>, </span><span><span class="hljs-number">255</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>);
</span><span><span class="hljs-comment">// 背景を埋めます</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagefilledrectangle</span></span><span>(</span><span><span class="hljs-variable">$im</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$w</span></span><span>-</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-variable">$h</span></span><span>-</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-variable">$white</span></span><span>);
</span><span><span class="hljs-comment">// スタイルを定義します:5 赤ピクセル,5 白いピクセル —— 明確な点線を形成します</span></span><span>
</span><span><span class="hljs-variable">$style</span></span><span> = [
</span><span><span class="hljs-variable">$red</span></span><span>, </span><span><span class="hljs-variable">$red</span></span><span>, </span><span><span class="hljs-variable">$red</span></span><span>, </span><span><span class="hljs-variable">$red</span></span><span>, </span><span><span class="hljs-variable">$red</span></span><span>,
</span><span><span class="hljs-variable">$white</span></span><span>, </span><span><span class="hljs-variable">$white</span></span><span>, </span><span><span class="hljs-variable">$white</span></span><span>, </span><span><span class="hljs-variable">$white</span></span><span>, </span><span><span class="hljs-variable">$white</span></span><span>
];
</span><span><span class="hljs-comment">// セットスタイル</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagesetstyle</span></span><span>(</span><span><span class="hljs-variable">$im</span></span><span>, </span><span><span class="hljs-variable">$style</span></span><span>);
</span><span><span class="hljs-comment">// スタイルを使用してラインを描画します:特別な色を入力します IMG_COLOR_STYLED</span></span><span>
</span><span><span class="hljs-comment">// 知らせ:imageline() 最後のパラメーターは、カラーインデックスまたは特別定数を受け入れます</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imageline</span></span><span>(</span><span><span class="hljs-variable">$im</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-variable">$w</span></span><span> - </span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-variable">$h</span></span><span> - </span><span><span class="hljs-number">10</span></span><span>, IMG_COLOR_STYLED);
</span><span><span class="hljs-comment">// ファイルに保存します(例),または使用します imagepng($im); ブラウザへの出力</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagepng</span></span><span>(</span><span><span class="hljs-variable">$im</span></span><span>, </span><span><span class="hljs-keyword">__DIR__</span></span><span> . </span><span><span class="hljs-string">'/dashed_example.png'</span></span><span>);
</span><span><span class="hljs-comment">// 無料のリソース</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$im</span></span><span>);
</span></span>上記のコードは、 dashed_example.pngを生成し、スタイルごとにループする対角線に点線が表示されます。キーポイント: ImagesEttyle()はスタイル配列を設定し、線を描くときにIMG_Color_Styledを使用してスタイルで描画します。 Tecfa Php
より繊細な破線が必要な場合は、スタイルのいくつかのエントリをIMG_COLOR_TRASSPARENTに設定して、ピクセルが描かれていないことを示し、ギャップを形成することができます。
<span><span><span class="hljs-variable">$style</span></span><span> = [</span><span><span class="hljs-variable">$black</span></span><span>, </span><span><span class="hljs-variable">$black</span></span><span>, IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT];
</span><span><span class="hljs-title function_ invoke__">imagesetstyle</span></span><span>(</span><span><span class="hljs-variable">$im</span></span><span>, </span><span><span class="hljs-variable">$style</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imageline</span></span><span>(</span><span><span class="hljs-variable">$im</span></span><span>, </span><span><span class="hljs-number">20</span></span><span>, </span><span><span class="hljs-number">50</span></span><span>, </span><span><span class="hljs-number">280</span></span><span>, </span><span><span class="hljs-number">50</span></span><span>, IMG_COLOR_STYLED);
</span></span>これにより、2ピクセルごとに2つの黒い点が描かれ、2ピクセルをスキップして繰り返します。 Php
GDは、「Brush」( ImagesetBrush()を介して)をサポートして、複雑な線を描画します。スタイルとブラシの両方をライン用に設定し、描画時にIMG_COLOR_STYLEDBRUSHEDを使用すると、GDはスタイルインデックスとブラシピクセルを組み合わせてレンダリングします。この使用法は、スタイルによって異なるブラシエフェクトを切り替える必要があるシーン(点線など、各セグメントのパターンが異なる)に適しています。特定の詳細については、GDマニュアルのブラシの章を参照してください。 PHP +1
スタイル配列は空にすることはできません。空の配列を渡すと障害が発生します。 Php
スタイル要素タイプ:配列要素は、割り当てられたカラーインデックス( ImageColorAllocate() RETURN VALUE)またはIMG_COLOR_TRASSPARENT定数である必要があります。 RGBアレイを直接記述しても有効になりません。 Tecfa
スタイルの長さと効果:スタイルアレイが長くなればなるほど、柔軟性が高くなりますが、メモリと計算もより多く消費します(通常、スタイルの長さが短くなります)。
ライン方向/スラッシュの問題:いくつかのスラッシュスタイルに影響を与える歴史の初期のPHP/GDバグがありましたが、この機能は最新のPHPバージョンでは安定しています。奇妙な問題に遭遇した場合は、最初にPHPとGDの拡張機能を確認し、小さな例を手動でデバッグします。 php mwkworks.com
画像カラーモードとの互換性:通常、真のカラー画像でスタイルを使用しても構いません。インデックスカラー画像の色の制限数に注意してください。 ImageCreateTrueColor()を使用すると、多くの色の互換性の問題を回避できます。 Php
スタイル +透明なピクセルを使用して、点線の境界線または進行中のバースケールを作成します。
ランタイム(たとえば、必要なダッシュの長さとギャップの長さに基づいて配列を計算する)でスタイルアレイを動的に生成して、簡単に多重化とパラメーター化します。
より複雑なテクスチャ(シングルピクセルではなくパターン化されたセグメント)が必要な場合は、 ImagesEtbrush()を組み合わせるか、小さなパターンで繰り返し描画することを検討してください。 Php