detaillierte Erläuterung der Imagick -PHP -Erweiterungsbibliothek: Fügen Sie den Bildern Textmarkierung hinzu
TextmarkierungIn 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:
annotateImage()
-Methode Text hinzufügen. 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.
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:
convert image.png -font Arial -pointsize 20 \ -draw "gravity south \ fill black text 0,12 'Copyright' \ fill white text 1,11 'Copyright'" \ result.png
reaktionsschnell PHP -Code:
<?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; ?>
Reproduktionsbild:
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:
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
PHP -Code:
<?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; ?>
Reproduktionsbild:
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:
convert image.png -font Arial -pointsize 20 \ -draw "gravity south \ fill black text 0,12 'Copyright' \ fill white text 1,11 'Copyright'" \ result.png
PHP -Code:
<?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; ?>
Reproduktionsbild:
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:
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
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:
<?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; ?>
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:
convert image.png -font Arial -pointsize 20 \ -draw "gravity south \ fill black text 0,12 'Copyright' \ fill white text 1,11 'Copyright'" \ result.png
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:
<?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; ?>
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:
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
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:
<?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; ?>
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:
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
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:
<?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; ?>
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:
$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');
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:
$draw->setFillColor('red');
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!