ホームページ >バックエンド開発 >PHPチュートリアル >PHPマスター| Imagicickでテキスト透かしを追加します
Imagick PHP拡張ライブラリの詳細な説明:画像にテキストの透かしを追加
この記事では、PHPのImagicick拡張機能ライブラリを使用して画像にテキスト透かしを追加する方法を紹介します。シンプルなテキストオーバーレイ、フォントマスクを使用した透明なテキスト透かしの作成、より高度なテキストタイルテクニックなど、さまざまな方法を調査します。
キーポイント:
annotateImage()
setFillColor()
の位置と回転テキストなど、透け式テキストをカスタマイズする複数の方法を提供します。 setFontSize()
setFont()
setFillOpacity()
以前の記事では、ティモシー・ボロンチクは、ImagICKとオーバーレイの画像を使用して透かしを作成する方法について説明しました。この記事では、プレーンテキストを使用して同様の効果を達成する方法を示します。現在、PHPのImagick APIドキュメントは非常に不足していますが、ImageMagickのWebサイトには多くのコマンドラインの例があります。コマンドラインコードをPHPコードに変換することは、同じ関数を実行するために対応するメソッドを見つけるだけの問題です。次の例では、ランダムなハンサムな男の写真を使用します。 annotateImage()
画像にテキストを描画します
最も簡単なテキストの透かしは、画像に直接文字列をオーバーレイすることです。コマンドラインの例は次のとおりです レスポンシブPHPコード:
複製画像:
<code class="language-bash">convert image.png -font Arial -pointsize 20 \ -draw "gravity south \ fill black text 0,12 'Copyright' \ fill white text 1,11 'Copyright'" \ result.png</code>
<code class="language-php"><?php // 创建对象 $image = new Imagick('image.png'); // 水印文本 $text = 'Copyright'; // 创建新的绘图面板 $draw = new ImagickDraw(); // 设置字体属性 $draw->setFont('Arial'); $draw->setFontSize(20); $draw->setFillColor('black'); // 将文本定位在图像的右下角 $draw->setGravity(Imagick::GRAVITY_SOUTHEAST); // 在图像上绘制文本 $image->annotateImage($draw, 10, 12, 0, $text); // 稍微偏移位置,使用不同的颜色再次绘制文本 $draw->setFillColor('white'); $image->annotateImage($draw, 11, 11, 0, $text); // 设置输出图像格式 $image->setImageFormat('png'); // 输出新图像 header('Content-type: image/png'); echo $image; ?></code>
この例は非常に単純で、コードのコメントは非常に明確です。効果的ですが、テキストと画像のコントラストは強すぎ、効果は十分に柔らかくありません。
フォントマスクを使用して透明なテキストを作成します
透かしテキストをより柔らかくするには、フォントマスクを使用して透明なテキストを作成できます。コマンドラインの例:
phpコード:
複製画像:
<code class="language-bash">convert -size 300x50 xc:grey30 -font Arial -pointsize 20 \ -gravity center -draw "fill grey70 text 0,0 'Copyright'" \ fgnd.png convert -size 300x50 xc:black -font Arial -pointsize 20 -gravity center \ -draw "fill white text 1,1 'Copyright' \ text 0,0 'Copyright' \ fill black text -1,-1 'Copyright'" \ +matte mask.png composite -compose CopyOpacity mask.png fgnd.png stamp.png mogrify -trim +repage stamp.png composite -gravity south -geometry +0+10 stamp.png image.png \ result.png</code>
<code class="language-php"><?php // 创建对象 $image = new Imagick('image.png'); $watermark = new Imagick(); $mask = new Imagick(); $draw = new ImagickDraw(); // 定义尺寸 $width = $image->getImageWidth(); $height = $image->getImageHeight(); // 创建调色板 $watermark->newImage($width, $height, new ImagickPixel('grey30')); $mask->newImage($width, $height, new ImagickPixel('black')); // 水印文本 $text = 'Copyright'; // 设置字体属性 $draw->setFont('Arial'); $draw->setFontSize(20); $draw->setFillColor('grey70'); // 将文本定位在图像的右下角 $draw->setGravity(Imagick::GRAVITY_SOUTHEAST); // 在水印调色板上绘制文本 $watermark->annotateImage($draw, 10, 12, 0, $text); // 在蒙版调色板上绘制文本 $draw->setFillColor('white'); $mask->annotateImage($draw, 11, 13, 0, $text); $mask->annotateImage($draw, 10, 12, 0, $text); $draw->setFillColor('black'); $mask->annotateImage($draw, 9, 11, 0, $text); // 这是蒙版生效的必要条件 $mask->setImageMatte(false); // 将蒙版应用于水印 $watermark->compositeImage($mask, Imagick::COMPOSITE_COPYOPACITY, 0, 0); // 将水印叠加到图像上 $image->compositeImage($watermark, Imagick::COMPOSITE_DISSOLVE, 0, 0); // 设置输出图像格式 $image->setImageFormat('png'); // 输出新图像 header('Content-type: image/png'); echo $image; ?></code>
この例では、複数の画像が作成されます。最初の画像はグレースケールの画像であり、2番目の画像$watermark
は純粋な黒を使用して、透明で白である部分を表し、保持する部分を表します。組み合わせの画像を通してマスクを適用すると、アンチエイリアシング効果のために$mask
で見つかった灰色の影が半透明になり、よりスムーズなエッジが生じます。コマンドラインバージョンコードでは、透明な画像の外側のエッジが透かしを重ねる前にトリミングされていますが、$mask
で定義された場所をcompositeImage()
メソッドが保持するのを防ぐバグがあるようです。これは、エッジがトリミングされている場合、透かしは右下の位置を失い、左上隅に再配置することを意味します。この問題を解決するために、作成されたカラーパレットはソース画像と同じサイズであるため、トリミングは発生しません。 setGravity()
テキストタイリング
最後の例では、画像全体にテキストをタイル張り、透かしをさらに削除することがさらに困難になります。コマンドライン:
<code class="language-bash">convert image.png -font Arial -pointsize 20 \ -draw "gravity south \ fill black text 0,12 'Copyright' \ fill white text 1,11 'Copyright'" \ result.png</code>phpコード:
<code class="language-php"><?php // 创建对象 $image = new Imagick('image.png'); // 水印文本 $text = 'Copyright'; // 创建新的绘图面板 $draw = new ImagickDraw(); // 设置字体属性 $draw->setFont('Arial'); $draw->setFontSize(20); $draw->setFillColor('black'); // 将文本定位在图像的右下角 $draw->setGravity(Imagick::GRAVITY_SOUTHEAST); // 在图像上绘制文本 $image->annotateImage($draw, 10, 12, 0, $text); // 稍微偏移位置,使用不同的颜色再次绘制文本 $draw->setFillColor('white'); $image->annotateImage($draw, 11, 11, 0, $text); // 设置输出图像格式 $image->setImageFormat('png'); // 输出新图像 header('Content-type: image/png'); echo $image; ?></code>複製画像:
を使用して透明度が設定されていることに注意してください。 setFillOpacity()
概要 私にとって、PHPでの画像処理は言語の最も楽しい側面の1つになりました。今後のバージョンでImagicickが一緒にバンドルされることを願っています。貢献する方法を探している場合は、他のコマンドラインの例をPHPに変換し、他の人が学習して楽しむために結果を公式PHPマニュアルに投稿することをお勧めします。
(フォトリアからの写真)(以下はFAQで、フォーマットとコンテンツは元のテキストに従って調整されており、擬似オリジナルの作品が作成されました)
imagick(faq)を使用してPHPにテキスト透かしを追加することについてよく尋ねる質問
Q:PHPのImagicickを使用して画像にテキスト透かしを追加する方法は?
a:PHPでImagicickを使用してテキスト透かしを画像に追加すると、最初にImagicickクラスのインスタンスを作成して画像を読み取る必要があります。次に、imagickdrawインスタンスを作成し、フォントプロパティを設定します。その後、AnnotateImage()メソッドを使用して、画像にテキストを追加できます。最後に、WriteImage()メソッドを使用して、ファイルシステムに画像を書き込みます。基本的な例は次のとおりです
Q:Imagicickの透かしテキストのフォント色を変更するにはどうすればよいですか?<code class="language-bash">convert -size 300x50 xc:grey30 -font Arial -pointsize 20 \ -gravity center -draw "fill grey70 text 0,0 'Copyright'" \ fgnd.png convert -size 300x50 xc:black -font Arial -pointsize 20 -gravity center \ -draw "fill white text 1,1 'Copyright' \ text 0,0 'Copyright' \ fill black text -1,-1 'Copyright'" \ +matte mask.png composite -compose CopyOpacity mask.png fgnd.png stamp.png mogrify -trim +repage stamp.png composite -gravity south -geometry +0+10 stamp.png image.png \ result.png</code>a:ImagICKDRAWクラスのSetFillColor()メソッドを使用して、Imagicickの透かしテキストのフォント色を変更できます。この方法は、色を表す文字列を受け入れます。たとえば、フォントの色を赤に設定するには、次のことを行うことができます。
Q:Imagicickの透かしテキストのフォントサイズを変更するにはどうすればよいですか?
a:ImagICKDRAWクラスのsetFontSize()メソッドを使用して、ImagICKのウォーターマークテキストのフォントサイズを変更できます。この方法は、フォントサイズを表す整数を受け入れます。たとえば、フォントサイズを30に設定するには、次のことを行うことができます。
<code class="language-bash">convert image.png -font Arial -pointsize 20 \ -draw "gravity south \ fill black text 0,12 'Copyright' \ fill white text 1,11 'Copyright'" \ result.png</code>
Q:Imagicickの透かしテキストのフォントを変更するにはどうすればよいですか?
a:ImagicDrawクラスのsetFont()メソッドを使用して、ImagiCKの透かしテキストのフォントを変更できます。この方法は、フォント名を表す文字列を受け入れます。たとえば、フォントを「arial」に設定するには、次のことを行うことができます。
<code class="language-php"><?php // 创建对象 $image = new Imagick('image.png'); // 水印文本 $text = 'Copyright'; // 创建新的绘图面板 $draw = new ImagickDraw(); // 设置字体属性 $draw->setFont('Arial'); $draw->setFontSize(20); $draw->setFillColor('black'); // 将文本定位在图像的右下角 $draw->setGravity(Imagick::GRAVITY_SOUTHEAST); // 在图像上绘制文本 $image->annotateImage($draw, 10, 12, 0, $text); // 稍微偏移位置,使用不同的颜色再次绘制文本 $draw->setFillColor('white'); $image->annotateImage($draw, 11, 11, 0, $text); // 设置输出图像格式 $image->setImageFormat('png'); // 输出新图像 header('Content-type: image/png'); echo $image; ?></code>
Q:Imagicickで透かしテキストを見つける方法は?
a:ImagiCKクラスのAnnotateImage()メソッドを使用して、透かしテキストの位置をImagicickで設定できます。このメソッドは、ImagIckDrawインスタンス、テキストのxおよびy座標、テキストの回転角度、およびテキスト文字列の4つのパラメーターを受け入れます。たとえば、テキストを座標(10、45)に配置するには、次のことを行うことができます。
<code class="language-bash">convert -size 300x50 xc:grey30 -font Arial -pointsize 20 \ -gravity center -draw "fill grey70 text 0,0 'Copyright'" \ fgnd.png convert -size 300x50 xc:black -font Arial -pointsize 20 -gravity center \ -draw "fill white text 1,1 'Copyright' \ text 0,0 'Copyright' \ fill black text -1,-1 'Copyright'" \ +matte mask.png composite -compose CopyOpacity mask.png fgnd.png stamp.png mogrify -trim +repage stamp.png composite -gravity south -geometry +0+10 stamp.png image.png \ result.png</code>Q:Imagickで透かしテキストを回転する方法は?
a:ImagiCKクラスのAnnotateImage()メソッドを使用して、透かしテキストの回転角度をImagickで設定できます。このメソッドの4番目のパラメーターは、テキストの回転角です。たとえば、テキストを45度回転させるには、次のことを行うことができます。
Q:イメージに透かし式画像を保存する方法は?<code class="language-php"><?php // 创建对象 $image = new Imagick('image.png'); $watermark = new Imagick(); $mask = new Imagick(); $draw = new ImagickDraw(); // 定义尺寸 $width = $image->getImageWidth(); $height = $image->getImageHeight(); // 创建调色板 $watermark->newImage($width, $height, new ImagickPixel('grey30')); $mask->newImage($width, $height, new ImagickPixel('black')); // 水印文本 $text = 'Copyright'; // 设置字体属性 $draw->setFont('Arial'); $draw->setFontSize(20); $draw->setFillColor('grey70'); // 将文本定位在图像的右下角 $draw->setGravity(Imagick::GRAVITY_SOUTHEAST); // 在水印调色板上绘制文本 $watermark->annotateImage($draw, 10, 12, 0, $text); // 在蒙版调色板上绘制文本 $draw->setFillColor('white'); $mask->annotateImage($draw, 11, 13, 0, $text); $mask->annotateImage($draw, 10, 12, 0, $text); $draw->setFillColor('black'); $mask->annotateImage($draw, 9, 11, 0, $text); // 这是蒙版生效的必要条件 $mask->setImageMatte(false); // 将蒙版应用于水印 $watermark->compositeImage($mask, Imagick::COMPOSITE_COPYOPACITY, 0, 0); // 将水印叠加到图像上 $image->compositeImage($watermark, Imagick::COMPOSITE_DISSOLVE, 0, 0); // 设置输出图像格式 $image->setImageFormat('png'); // 输出新图像 header('Content-type: image/png'); echo $image; ?></code>
A:イメージッククラスのWriteImage()メソッドを使用して、ウォーターマーク画像を保存できます。この方法は、ファイルパスを表す文字列を受け入れます。たとえば、「watermarked_image.png」として画像を保存するには、次のことを行うことができます。
Q:Imagicickに透明な透かしテキストを追加するにはどうすればよいですか?
<code class="language-bash">convert -size 140x80 xc:none -fill grey \ -gravity NorthWest -draw "text 10,10 'Copyright'" \ -gravity SouthEast -draw "text 5,15 'Copyright'" \ miff:- | \ composite -tile - image.png result.png</code>
a:ImagicDdrawクラスのsetFillopacity()メソッドを使用して、透明な透かしテキストをImagICKに追加できます。この方法は、不透明度レベルを表す浮動小数点数を受け入れます。たとえば、不透明度を0.5に設定するには、次のことを行うことができます。
Q:Imagicickの透かしテキストにシャドウを追加する方法は?<code class="language-php"><?php // 创建对象 $image = new Imagick('image.png'); $watermark = new Imagick(); // 水印文本 $text = 'Copyright'; // 创建新的绘图面板 $draw = new ImagickDraw(); $watermark->newImage(140, 80, new ImagickPixel('none')); // 设置字体属性 $draw->setFont('Arial'); $draw->setFillColor('grey'); $draw->setFillOpacity(.5); // 将文本定位在水印的左上角 $draw->setGravity(Imagick::GRAVITY_NORTHWEST); // 在水印上绘制文本 $watermark->annotateImage($draw, 10, 10, 0, $text); // 将文本定位在水印的右下角 $draw->setGravity(Imagick::GRAVITY_SOUTHEAST); // 在水印上绘制文本 $watermark->annotateImage($draw, 5, 15, 0, $text); // 重复将水印叠加到图像上 for ($w = 0; $w < $image->getImageWidth(); $w += 140) { for ($h = 0; $h < $image->getImageHeight(); $h += 80) { $image->compositeImage($watermark, Imagick::COMPOSITE_OVER, $w, $h); } } // 设置输出图像格式 $image->setImageFormat('png'); // 输出新图像 header('Content-type: image/png'); echo $image; ?></code>A:テキストを2回描画することで、Imagickのウォーターマークテキストにシャドウを追加できます(1回、テキスト自体の場合は1回)。シャドウは、塗りつぶしの色を黒に設定し、テキストの位置を相殺することで作成できます。たとえば、
Q:Imagicickの複数の画像に透かしテキストを追加する方法は?
<code class="language-php">$imagick = new \Imagick(realpath('image.png')); $draw = new \ImagickDraw(); $draw->setFillColor('white'); $draw->setFont('Arial'); $draw->setFontSize(50); $imagick->annotateImage($draw, 10, 45, 0, 'Watermark Text'); $imagick->writeImage('watermarked_image.png');</code>A:Imagicickの複数の画像に透かしテキストを追加するには、画像をループして各画像に透かしを適用できます。基本的な例は次のとおりです
以上がPHPマスター| Imagicickでテキスト透かしを追加しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。