現在の位置: ホーム> 最新記事一覧> Imagesetstyle機能とは何ですか? PHPで正しく使用する方法は?

Imagesetstyle機能とは何ですか? PHPで正しく使用する方法は?

gitbox 2025-09-26

概要

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_STYLEDImageLine()などの関数の色パラメーターとして使用され、現在のスタイル配列を使用して行が描画されることを示します。

  • IMG_COLOR_BRUSHED / IMG_COLOR_STYLEDBRUSHED :ブラシ(ブラシ)と組み合わせて使用​​される特別なカラー定数(より複雑な描画シーンに使用できます)。

  • IMG_COLOR_TRASSPARENT :透明なピクセルは、スタイルアレイで表されます。
    これらの定数は、PHP画像/GD定数テーブルで説明されています。 Php

基本例:点線の描画線(完全な例、直接実行できます)

次の例は、キャンバスを作成し、スタイルを定義し、 ImageLine()を使用した対角線の点線を描画する方法を示しています。次に、画像をPNGファイルとして(またはブラウザによって直接表示)出力します。

 <span><span><span class="hljs-meta">&lt;?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

一般的なトラップと予防策

  1. スタイル配列は空にすることはできません。空の配列を渡すと障害が発生します。 Php

  2. スタイル要素タイプ:配列要素は、割り当てられたカラーインデックス( ImageColorAllocate() RETURN VALUE)またはIMG_COLOR_TRASSPARENT定数である必要があります。 RGBアレイを直接記述しても有効になりません。 Tecfa

  3. スタイルの長さと効果:スタイルアレイが長くなればなるほど、柔軟性が高くなりますが、メモリと計算もより多く消費します(通常、スタイルの長さが短くなります)。

  4. ライン方向/スラッシュの問題:いくつかのスラッシュスタイルに影響を与える歴史の初期のPHP/GDバグがありましたが、この機能は最新のPHPバージョンでは安定しています。奇妙な問題に遭遇した場合は、最初にPHPとGDの拡張機能を確認し、小さな例を手動でデバッグします。 php mwkworks.com

  5. 画像カラーモードとの互換性:通常、真のカラー画像でスタイルを使用しても構いません。インデックスカラー画像の色の制限数に注意してください。 ImageCreateTrueColor()を使用すると、多くの色の互換性の問題を回避できます。 Php

高度な使用法の提案

  • スタイル +透明なピクセルを使用して、点線の境界線または進行中のバースケールを作成します。

  • ランタイム(たとえば、必要なダッシュの長さとギャップの長さに基づいて配列を計算する)でスタイルアレイを動的に生成して、簡単に多重化とパラメーター化します。

  • より複雑なテクスチャ(シングルピクセルではなくパターン化されたセグメント)が必要な場合は、 ImagesEtbrush()を組み合わせるか、小さなパターンで繰り返し描画することを検討してください。 Php

概要(キーポイントのレビュー)

  • ImagesetStyle()は、ピクセルスタイルの線の配列を設定するために使用され、イメージライン()などの関数で使用して点線、点線などを実現できます。PHP +1

  • スタイルアレイ要素はカラーインデックスまたはIMG_COLOR_TRASSPARENTでなければならず、配列は空にすることはできません。 Php

  • より複雑なライン効果が必要な場合は、ブラシ定数( IMG_COLOR_STYLEDBRUSHEDなど)またはImagesetBrush()と組み合わせて使用​​できます。 Php