Heim >Backend-Entwicklung >PHP-Tutorial >PHP Master | Hinzufügen von Textwasserzeichen mit Imagick

PHP Master | Hinzufügen von Textwasserzeichen mit Imagick

Christopher Nolan
Christopher NolanOriginal
2025-02-25 16:13:09124Durchsuche

detaillierte Erläuterung der Imagick -PHP -Erweiterungsbibliothek: Fügen Sie den Bildern Textmarkierung hinzu

Textmarkierung

In diesem Artikel wird mithilfe der Imagick -Erweiterungsbibliothek von PHP Text Wasserzeichen zu Bildern hinzufügen. Wir werden eine Vielzahl von Methoden untersuchen, einschließlich einfacher Textüberlagerung, das Erstellen transparenter Textwasserzeichen mit Schriftmasken und fortgeschritteneren Textkachelnstechniken.

Schlüsselpunkte:

  • Imagick ist eine leistungsstarke PHP -Erweiterungsbibliothek, mit der Bilder verarbeitet werden können, einschließlich des Hinzufügens von Textwasserzeichen.
  • Textwasserzeichen können erreicht werden, indem eine Imagick -Klasse -Instanz erstellt, ein Bild gelesen, die Schrifteigenschaften mithilfe der ImagickDraw -Instanz festgelegt und dann das Bild mithilfe der annotateImage() -Methode Text hinzufügen.
  • Es gibt verschiedene Möglichkeiten, Textwasserzeichen hinzuzufügen, einschließlich der Überlagerung von Textzeichenfolgen direkt auf dem Bild, erstellen transparenter Textwasserzeichen mit Schriftmasken und dem gesamten Bild über das gesamte Bild, um das Entfernen von Wasserzeichen zu erschweren.
  • Imagickdraw -Klasse bietet mehrere Möglichkeiten zum Anpassen von Wasserzeichen -Text, z. B. setFillColor() Schriftfarbe ändern, setFontSize() Schriftgröße ändern, setFont() Schrift ändern, setFillOpacity() Transparenz hinzufügen und annotateImage() Position und rotatieren Text hinzufügen.

In früheren Artikeln beschrieb Timothy Boronczyk, wie man Wasserzeichen mit Imagick- und Overlay -Bildern erstellt. In diesem Artikel wird angezeigt, wie mit einfachem Text ähnliche Effekte erzielt werden können. Derzeit ist die Imagick API -Dokumentation von PHP sehr knapp, aber es gibt viele Beispiele für Befehlszeilen auf der ImageMagick -Website, mit denen wir beginnen werden. Das Konvertieren des Befehlszeilencodes in PHP -Code ist nur eine Frage der Suche nach der entsprechenden Methode zur Ausführung derselben Funktion. Das folgende Beispiel verwendet ein zufälliges gutaussehendes Guy -Bild.

PHP Master | Adding Text Watermarks with Imagick

Text auf Bild zeichnen

Das einfachste Textwasserzeichen besteht darin, Strings direkt auf dem Bild zu überlagern. Das Beispiel für die Befehlszeile lautet wie folgt:

<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>

reaktionsschnell PHP -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>

Reproduktionsbild:

PHP Master | Adding Text Watermarks with Imagick

Dieses Beispiel ist sehr einfach und die Code -Kommentare sind sehr klar. Obwohl wirksam, ist der Kontrast zwischen Text und Bild zu stark und der Effekt nicht weich genug.

transparente Text mit der Schriftmaske erstellen

Um den Textmark -Text weicher zu gestalten, können Sie eine Schriftmaske verwenden, um transparenten Text zu erstellen. Beispiel für Befehlszeile:

<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>

PHP -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>

Reproduktionsbild:

PHP Master | Adding Text Watermarks with Imagick

Dieses Beispiel erstellt mehrere Bilder. Das erste Bild $watermark ist ein Graustufenbild. Das zweite Bild $mask verwendet reines Schwarz, um den Teil darzustellen, um transparent und weiß zu sein, um das zu erhaltene Teil darzustellen. Beim Auftragen von Masken durch ein Kombinationsbild sind alle grauen Schatten, die in $mask aufgrund von Anti-Aliasing-Effekten zu finden sind, durchscheinend, was zu glatteren Kanten führt. Im Befehlszeilenversionscode werden die Außenkanten des transparenten Bildes vor dem Überlagern des Wasserzeichens beschnitten, aber es scheint einen Fehler zu geben, der verhindert, dass die compositeImage() -Methode den vom setGravity() definierten Ort behält. Dies bedeutet, dass, wenn die Kante beschnitten ist, das Wasserzeichen seine untere rechte Position verliert und sich in die obere linke Ecke neu positioniert. Um dieses Problem zu beheben, hat die erstellte Farbpalette die gleiche Größe wie das Quellbild, sodass kein Zuschneiden auftritt.

Textkachel

Das letzte Beispiel speichert den Text über das gesamte Bild, wodurch das Entfernen des Wasserzeichens noch schwieriger wird. Befehlszeile:

<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:

<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>

Reproduktionsbild:

PHP Master | Adding Text Watermarks with Imagick

Beachten Sie, dass die Transparenz hier mit setFillOpacity() anstatt eine Bildmaske zu verwenden.

Zusammenfassung

Für mich ist die Bildverarbeitung in PHP zu einem der angenehmsten Aspekte der Sprache geworden, und ich hoffe, dass Imagick in zukünftigen Versionen zusammengebündet wird. Wenn Sie nach Möglichkeiten suchen, einen Beitrag zu leisten, empfehle ich Ihnen, andere Befehlszeilenbeispiele in PHP umzuwandeln und Ihre Ergebnisse dann in das offizielle PHP -Handbuch zu veröffentlichen, damit andere lernen und genießen können.

(Bild aus Fotolien)

(Folgende FAQs, das Format und der Inhalt wurden nach dem ursprünglichen Text angepasst, und Pseudo-Ursprungskreationen wurden gemacht)

Häufig gestellte Fragen zum Hinzufügen von Textwasserzeichen in PHP unter Verwendung von Imageick (FAQ)

F: Wie füge ich ein Bild mit Imagick in PHP Textwasserzeichen hinzu?

A: Verwenden Sie Imagick in PHP zum Hinzufügen von Textwasserzeichen zu einem Bild, Sie müssen zunächst eine Instanz der Imageick -Klasse erstellen und das Bild darin lesen. Erstellen Sie dann eine Imagickdraw -Instanz und setzen Sie die Schriftarten. Danach können Sie mit der Methode AnnotateImage () Text zum Bild addieren. Verwenden Sie schließlich die Methode writeImage (), um das Bild in das Dateisystem zu schreiben. Hier ist ein grundlegendes Beispiel:

<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>

F: Wie ändere ich die Schriftfarbe des Wasserzeichen -Textes in Imagick?

A: Sie können die Methode setFillColor () der Imagickdraw -Klasse verwenden, um die Schriftfarbe des Wasserzeichen -Textes in Imagick zu ändern. Diese Methode akzeptiert Zeichenfolgen, die Farben darstellen. Um beispielsweise die Schriftfarbe auf Rot einzustellen, können Sie Folgendes tun:

<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>

F: Wie ändere ich die Schriftgröße des Wasserzeichen -Textes in Imagick?

a: Sie können die Methode setFontSize () der Imagickdraw -Klasse verwenden, um die Schriftgröße des Wasserzeichen -Textes in Imagick zu ändern. Diese Methode akzeptiert Ganzzahlen, die die Schriftgröße darstellen. Um beispielsweise die Schriftgröße auf 30 festzulegen, können Sie Folgendes ausführen:

<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>

F: Wie ändere ich die Schrift des Wasserzeichen -Textes in Imagick?

A: Sie können die Methode der Imagickdraw -Klasse setfont () verwenden, um die Schrift des Wasserzeichen -Textes in Imagick zu ändern. Diese Methode akzeptiert Zeichenfolgen, die den Schriftartamen darstellen. Um beispielsweise die Schriftart auf "Arial" einzustellen, können Sie Folgendes tun:

<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>

F: Wie lokalisiert ich den Wasserzeichen -Text in Imagick?

a: Sie können die methode der imageicke classe für die Position des Wasserzeichens in Imagick verwenden. Diese Methode akzeptiert vier Parameter: Imagickdraw -Instanz, X- und Y -Koordinaten des Textes, des Rotationswinkels des Textes und der Textzeichenfolge. Zum Beispiel, um Text in Koordinaten zu positionieren (10, 45), können Sie Folgendes tun:

<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>

F: Wie dreht ich den Wasserzeichen -Text in Imagick?

a: Sie können die methode der Imagick -Klasse für AnnotateImage () verwenden, um den Rotationswinkel des Wasserzeichentextes in Imagick einzustellen. Der vierte Parameter dieser Methode ist der Rotationswinkel des Textes. Um den Text beispielsweise um 45 Grad zu drehen, können Sie Folgendes tun:

<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>

F: Wie speichern Sie Wasserzeichenbilder in Imagick?

A: Sie können die Methode der Imagick -Klasse schreiben, um das Wasserzeichenbild zu retten. Diese Methode akzeptiert eine Zeichenfolge, die den Dateipfad darstellt. Um beispielsweise ein Bild als "Watermarked_image.png" zu speichern, können Sie Folgendes tun:

<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>

F: Wie füge ich Imagick transparenten Wasserzeichen -Text hinzu?

A: Sie können die Methode der SetFillopacity () der Imagickdraw -Klasse verwenden, um Imagick transparenten Wasserzeichen -Text hinzuzufügen. Diese Methode akzeptiert die schwimmenden Punktzahlen, die die Deckkraft -Ebene darstellen. Um beispielsweise die Deckkraft auf 0,5 zu setzen, können Sie Folgendes ausführen:

<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>

F: Wie füge ich den Textmark -Text in Imagick Schatten hinzu?

A: Sie können den Textmark -Text in Imagick Schatten hinzufügen, indem Sie den Text zweimal zeichnen (einmal für Schatten, einmal für den Text selbst). Schatten können erstellt werden, indem die Füllfarbe auf Schwarz eingestellt und die Textposition ausgefallen ist. Zum Beispiel:

<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>

F: Wie füge ich mehrere Bilder in Imagick Wasserzeichen -Text hinzu?

A: Um mehrere Bilder in Imagick zu Wasserzeichen -Text hinzuzufügen, können Sie das Bild durchlaufen und das Wasserzeichen auf jedes Bild anwenden. Hier ist ein grundlegendes Beispiel:

<code class="language-php">$draw->setFillColor('red');</code>

Das obige ist der detaillierte Inhalt vonPHP Master | Hinzufügen von Textwasserzeichen mit Imagick. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn