Start · Sprachen · PHP · Referenz · imagesetbrush

imagesetbrush

Funktion

Setzt ein GD-Bild als Pinsel, der beim Zeichnen von Linien mit den Spezialfarben <code>IMG_COLOR_BRUSHED</code> oder <code>IMG_COLOR_STYLEDBRUSHED</code> verwendet wird.

seit PHP 4.0.6 Kategorie: image

Signatur

imagesetbrush(GdImage $image, GdImage $brush): bool

Beschreibung

imagesetbrush() weist einer GD-Bildressource ein Pinselbild zu. Ein Pinsel ist ein kleines Bild, das anstelle einzelner Pixel beim Zeichnen von Linien, Kurven oder anderen Formen verwendet wird. Jeder Punkt der Linie wird durch das Pinselbild ersetzt, was dekorative oder texturierte Linien ermöglicht.

Nachdem der Pinsel gesetzt wurde, muss beim Zeichnen die Spezialfarbe IMG_COLOR_BRUSHED angegeben werden (z. B. als Farb-Parameter in imageline() oder imagepolygon()). Soll der Pinsel zusätzlich einem Linienstil-Muster folgen, verwendet man stattdessen IMG_COLOR_STYLEDBRUSHED.

Das Pinselbild kann beliebig groß sein – je größer, desto mehr Rechenaufwand entsteht beim Zeichnen. Für Transparenzeffekte empfiehlt sich die Verwendung von Truecolor-Bildern mit Alpha-Kanal als Pinsel, um weiche Übergänge zu erzielen.

Typische Anwendungsfälle sind dekorative Diagramm-Linien, Wasserzeichen-Muster oder künstlerische Grafik-Effekte direkt in PHP ohne externe Bibliotheken.

Parameter

Name Typ Default Beschreibung
$image Pflicht GdImage Das Ziel-GD-Bild, dem der Pinsel zugewiesen wird. Wird typischerweise mit imagecreatetruecolor() oder imagecreatefromXXX() erzeugt.
$brush Pflicht GdImage Das Pinselbild, das beim Zeichnen mit IMG_COLOR_BRUSHED verwendet wird. Kann ebenfalls mit einer beliebigen GD-Bild-Erzeugungsfunktion erstellt werden.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler.

Beispiele

Linie mit einem einfachen Kreis-Pinsel zeichnen

<?php
// Ziel-Bild erstellen
$image = imagecreatetruecolor(400, 200);

// Hintergrund weiß füllen
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);

// Pinselbild erstellen: kleiner roter Kreis (20x20 px)
$brush = imagecreatetruecolor(20, 20);
imagesavealpha($brush, true);
$transparent = imagecolorallocatealpha($brush, 0, 0, 0, 127);
imagefill($brush, 0, 0, $transparent);
$red = imagecolorallocate($brush, 220, 50, 50);
imagefilledellipse($brush, 10, 10, 18, 18, $red);

// Pinsel dem Ziel-Bild zuweisen
imagesetbrush($image, $brush);

// Linie mit Pinsel zeichnen
imageline($image, 20, 100, 380, 100, IMG_COLOR_BRUSHED);

// Bild ausgeben
header('Content-Type: image/png');
imagepng($image);

imagedestroy($image);
imagedestroy($brush);
?>
(PNG-Bild mit einer horizontalen Linie aus roten Kreisen)

Diagonale Linie mit gestyltem Pinsel (STYLEDBRUSHED)

<?php
// Ziel-Bild
$image = imagecreatetruecolor(300, 300);
$bg = imagecolorallocate($image, 240, 240, 240);
imagefill($image, 0, 0, $bg);

// Pinselbild: kleines blaues Quadrat
$brush = imagecreatetruecolor(8, 8);
$blue = imagecolorallocate($brush, 30, 100, 200);
imagefill($brush, 0, 0, $blue);

// Pinsel setzen
imagesetbrush($image, $brush);

// Stil definieren: 1 = gezeichnet, 0 = Lücke
$style = [
    IMG_COLOR_BRUSHED,
    IMG_COLOR_BRUSHED,
    IMG_COLOR_BRUSHED,
    0,
    0,
];
imagesetstyle($image, $style);

// Diagonale Linie mit gestyltem Pinsel
imageline($image, 10, 10, 290, 290, IMG_COLOR_STYLEDBRUSHED);

header('Content-Type: image/png');
imagepng($image);

imagedestroy($image);
imagedestroy($brush);
?>
(PNG-Bild mit einer diagonalen gestrichelten Linie aus blauen Quadraten)

// Wichtig · Fallstricke

Pinsel-Lebensdauer: Das Pinselbild darf nicht zerstört werden (imagedestroy()), solange es noch als aktiver Pinsel genutzt wird. Das Zerstören des Pinsel-GdImage vor dem Zeichnen führt zu undefiniertem Verhalten oder einem Fehler.

Transparenz: Truecolor-Pinselbilder mit Alpha-Kanal (über imagesavealpha() und imagecolorallocatealpha()) ergeben weiche, transparente Pinseleffekte. Palette-Bilder unterstützen nur einfache Farb-Transparenz über imagecolortransparent().

Performance: Sehr große Pinselbilder können das Rendern bei langen Linien erheblich verlangsamen, da das Pinselbild für jeden Linienpunkt gestempelt wird.