Beim Erstellen von Bildwasserzeichen mit PHP möchten wir häufig, dass Text an bestimmten Stellen im Bild genau angezeigt wird, z. B. der unteren rechten Ecke oder der unteren Mitte. Aber aufgrund der Größe der Schrift und der Breite jedes Zeichens wird die Berechnung der Position des Wasserzeichens oft problematisch. Glücklicherweise löst die ImageFontwidth () -Funktion von PHP dieses Problem für uns, insbesondere bei der Verwendung integrierter Schriftarten.
ImageFontwidth () ist eine der GD -Bibliotheksfunktionen von PHP, die die Pixelbreite jedes Zeichens in einer angegebenen Schriftnummer zurückgeben. Seine Syntax ist wie folgt:
int imagefontwidth(int $font);
Diese Funktion eignet sich nur für in der GD -Bibliothek eingebaute Schriftarten wie 1 bis 5 . Wenn Sie die TTF -Schriftart verwenden, die von ImagettfText () geladen wurde, verwenden Sie bitte die Größe von ImagetettFBBox (), um die Größe zu berechnen.
Beim Hinzufügen von Textwasserzeichen zum Bild müssen wir die Breite und Höhe des Wasserzeichentextes klarstellen, um die Startkoordinaten zu bestimmen. Wenn das Wasserzeichen beispielsweise in der unteren rechten Ecke angezeigt wird, müssen Sie die Breite des Wasserzeichentextes kennen, damit er als X -Koordinate von der rechten Seite des Bildes abgezogen werden kann.
Viele Personen verwenden jedoch direkt die Stringlänge als Breitenreferenz, was ungenau ist. Die Charakterbreite jeder Schrift kann unterschiedlich sein, und selbst in derselben Schriftart können unterschiedliche Charakterbreiten unterschiedlich sein (insbesondere in Monospace -Schriftarten und vergrößern Schriftarten).
Schauen wir uns ein bestimmtes Beispiel an. Wir möchten einen Text in der unteren rechten Ecke eines Bildes hinzufügen: „Copyright M66.net“.
<?php
// Bilder laden
$image = imagecreatefromjpeg('background.jpg');
// Schriftnummer und Text festlegen
$font = 4; // Eingebaute Schriftnummer 1-5
$text = 'Alle Rechte vorbehalten m66.net';
// Holen Sie sich Textbreite und Höhe
$textWidth = imagefontwidth($font) * strlen($text);
$textHeight = imagefontheight($font);
// Bildgröße erhalten
$imageWidth = imagesx($image);
$imageHeight = imagesy($image);
// Textfarbe festlegen(Weiß)
$textColor = imagecolorallocate($image, 255, 255, 255);
// Berechnen Sie die oberen linken Eckkoordinaten des Textes(Offset in der unteren rechten Ecke10Pixel)
$x = $imageWidth - $textWidth - 10;
$y = $imageHeight - $textHeight - 10;
// Text schreiben
imagestring($image, $font, $x, $y, $text, $textColor);
// Ausgabebild
header('Content-Type: image/jpeg');
imagejpeg($image);
// Ressourcen zerstören
imagedestroy($image);
?>
In diesem Code gibt ImageFontwidth ($ font) die Breite jedes Zeichens zurück. Strlen ($ text) gibt die Anzahl der Zeichen zurück und multipliziert die beiden, um die Pixelbreite des gesamten Textes zu erhalten. Subtrahieren Sie dann die Textbreite und die Ränder von der Bildbreite, und wir erhalten die genauen Koordinaten der unteren rechten Ecke.
ImageFontwidth () ist ein einfaches, aber sehr nützliches Werkzeug, mit dem Sie beim Umgang mit der Positionierung der Wasserzeichen mithilfe von GD-integrierten Schriftarten genauer sein können. Mit ImageFontheight () können Sie jede Position (oben links, oben rechts, in der Mitte usw.) genau steuern. In Situationen, in denen eine komplexere Textrenderung erforderlich ist, z. B. benutzerdefinierte TTF -Schriftarten, sollten Sie die Verwendung von ImagettFBBox () für komplexere Grenzberechnungen verwenden.
Mit ImageFontwidth () und ImageFontheight () werden wir den Bildern auch Wasserzeichen hinzufügen und effizient.