ホームページ > バックエンド開発 > PHPチュートリアル > PHPグラフィックス画像操作

PHPグラフィックス画像操作

WBOY
リリース: 2016-08-08 09:20:09
オリジナル
848 人が閲覧しました

GDライブラリの紹介

GDは、グラフィックデバイスを指し、GDライブラリが提供する一連のAPIを通じて、画像を処理したり、新しい画像を直接生成したりするために使用される拡張ライブラリです。 。

テキスト処理に加えて、PHP は GD ライブラリを通じて JPG、PNG、GIF、SWF およびその他の画像を処理することもできます。 GD ライブラリは、画像の透かし入れや検証コードの生成などによく使用されます。

PHP にはデフォルトで GD ライブラリが統合されており、インストール時に有効にするだけで済みます。

<span>header("content-type: image/png"); $img=imagecreatetruecolor(100, 100); $red=imagecolorallocate($img, 0xFF, 0x00, 0x00); imagefill($img, 0, 0, $red); imagepng($img); imagedestroy($img);<span><span></span></span></span></preubuntu></divmicrosoft></p> <divmicrosoft yahei sans gb neue font-size:14px line-height:21px><p><span>線を描く</span></p> <p><divmicrosoft yahei sans gb neue font-size:14px><p><span>グラフィックスを操作するには、まず新しいキャンバスを作成し、imagecreatetruecolor関数を使用してトゥルーカラーの空白の画像を作成します: </span></p> <preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>$img = imagecreatetruecolor(100, 100);</span><p><span>のGDライブラリ内ブラシで使用される色は、imagecolorallocate 関数を通じて割り当てる必要があります。ブラシの色は、パラメーターを介して RGB カラー値を設定することによって決定されます: </span></p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>$red = imagecolorallocate($img, 0xFF, 0x00, 0x00);</span><p><span> 次に、線分関数 imageline を呼び出して線を描画します。最後に始点と終点を指定して線分を取得します。 </span></p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>imageline($img, 0, 0, 100, 100, $red);</span><p><span>線を描いた後、headerとimagepngを通して画像を出力します。 </span></p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>header("content-type: image/png"); imagepng($img);</span><p><span>最後に、imagedestroy を呼び出して、画像が占有しているメモリを解放できます。 </span></p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>imagedestroy($img);</span><p><span> 上記の手順を通じて、PHP でグラフィックを描画するのは非常に簡単であることがわかりますが、多くの場合、画像を出力するだけでなく、画像ファイルを取得する必要がある場合もあります。 imagepng関数を使用して、描画した画像をファイルに保存します。 </span></p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>imagepng($img, 'img.png');</span></preubuntu></preubuntu></preubuntu></preubuntu></preubuntu></preubuntu></divmicrosoft></p> <divmicrosoft yahei sans gb neue font-size:14px line-height:21px><p>画像内にテキストを描画</p> <p><divmicrosoft yahei sans gb neue font-size:14px><p><span> GD ライブラリでは、線の描画、背景の塗りつぶし、四角形の描画、テキストの描画など、さまざまな基本的なグラフィック操作を実行できます。 </span></p> <p><span>線を描くのと同様に、まず新しい画像を作成し、色を初期化する必要があります。 </span></p> <preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>$img = imagecreatetruecolor(100, 100); $red = imagecolorallocate($img, 0xFF, 0x00, 0x00);</span><p><span>次に、imagestring 関数を使用してテキストを描画します。この関数には、imagestring ( resource $image 、 int $font 、 int $x 、 int $y 、 string $s 、 int $col ) という多くのパラメータがあります。渡される $font はフォント サイズを設定し、x と y はテキストの表示位置を設定します。$s は描画されるテキスト、$col はテキストの色です。 </span></p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>imagestring($img, 5, 0, 0, "Hello world", $red); header("content-type: image/png"); imagepng($img); imagedestroy</span><span>($img); </span></preubuntu></preubuntu></divmicrosoft></p> <p><span>出力画像ファイル</span></p> <p><divmicrosoft yahei sans gb neue font-size:14px><p><span> imagepng がブラウザに画像を直接出力できることを以前に学びましたが、多くの場合、処理された画像をファイルに保存して、複数回使用されました。 path パラメーターを指定して、画像をファイルに保存します。 </span></p> <preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>$filename = 'img.png'; imagepng($img, $filename);</span><p><span>画像を png 形式で保存するには imagepng を使用し、画像を jpeg 形式で保存するには imagejpeg を使用し、画像を gif 形式で保存するには別の関数を使用する必要があります。 imagejpeg 画像は圧縮されているため、品質パラメータも設定できることに注意してください。 </span></p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>$filename = 'img.jpg'; ?imagejpeg($img, $filename, 80);</span></preubuntu></preubuntu></divmicrosoft></p> <p>画像検証コードを生成する</p> <p><divmicrosoft yahei sans gb neue font-size:14px><p><span> 単純な検証コードは、実際に画像内のいくつかの文字を出力します。これは、前の章で説明した imagestring 関数を通じて実現できます。 </span></p> <p><span>しかし、処理の面では、検証コードをより安全にし、他のプログラムが自動的に認識するのを防ぐために、検証コードに何らかの干渉処理を実行する必要があることがよくありますが、通常、いくつかのノイズポイントが描画されます。干渉線分を描画し、文字を傾けたり、ねじったりするなどの操作を行って出力します。 </span></p> <p><span>imagesetpixel を使用して点を描画してノイズ干渉を実現することもできますが、1 つの点だけを描画しても効果はほとんどないため、ここではループを使用してランダムに描画することがよくあります。 </span></p> <preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>for($i=0;$i<50;$i++) { imagesetpixel($im, rand(0, 100) , rand(0, 100) , $black); imagesetpixel($im, rand(0, 100) , rand(0, 100) , $green); } </span><span></span></preubuntu></divmicrosoft></p> <br><p><br></p> <pre name="code"><?php $img = imagecreatetruecolor(100, 40); $black = imagecolorallocate($img, 0x00, 0x00, 0x00); $green = imagecolorallocate($img, 0x00, 0xFF, 0x00); $white = imagecolorallocate($img, 0xFF, 0xFF, 0xFF); imagefill($img,0,0,$white); //生成随机的验证码 $code = ''; for($i = 0; $i < 4; $i++) { $code .= rand(0, 9); } imagestring($img, 5, 10, 10, $code, $black); //加入噪点干扰 for($i=0;$i<50;$i++) { imagesetpixel($img, rand(0, 100) , rand(0, 100) , $black); imagesetpixel($img, rand(0, 100) , rand(0, 100) , $green); } //输出验证码 header("content-type: image/png"); imagepng($img); imagedestroy($img);
ログイン後にコピー

画像に透かしを追加する

画像に透かしを追加するには、一般に 2 つの方法があります。1 つは画像に文字列を追加する方法で、もう 1 つは画像に透かしを追加する方法です。画像 ロゴまたはその他の画像を追加します。

ここで処理しているのは既存の画像なので、既存の画像から直接キャンバスを作成したり、imagecreatefromjpegで画像ファイルから直接画像を作成したりすることができます。

<span>$im = imagecreatefromjpeg($filename);</span><p><span>创建图像对象以后,我们就可以通过前面的GD函数,绘制字符串到图像上。如果要加的水印是一个logo图片,那么就需要再建立一个图像对象,然后通过GD函数imagecopy将logo的图像复制到源图像中。</span></p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>$logo = imagecreatefrompng($filename); imagecopy($im, $logo, 15, 15, 0, 0, $width, $height);</span><p><span>当将logo图片复制到原图片上以后,将加水印后的图片输出保存就完成了加水印处理。</span></p><preubuntu mono line-height:1.6em font-size:13px word-break:break-word><span>imagejpeg(</span><span>$im, $filename); </span></preubuntu></preubuntu></preubuntu></divmicrosoft></p> <br><p></p> <pre name="code"><?php //这里仅仅是为了案例需要准备一些素材图片 $url = 'http://www.iyi8.com/uploadfile/2014/0521/20140521105216901.jpg'; $content = file_get_contents($url); $filename = 'tmp.jpg'; file_put_contents($filename, $content); $url = 'http://wiki.ubuntu.org.cn/images/3/3b/Qref_Edubuntu_Logo.png'; file_put_contents('logo.png', file_get_contents($url)); //开始添加水印操作 $im = imagecreatefromjpeg($filename); $logo = imagecreatefrompng('logo.png'); $size = getimagesize('logo.png'); imagecopy($im, $logo, 15, 15, 0, 0, $size[0], $size[1]); header("content-type: image/jpeg"); imagejpeg($im);
ログイン後にコピー

版权声明:本文为博主原创文章,未经博主允许不得转载。

以上就介绍了PHP图形图像操作,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート