Diese Klasse ist eine Alternative zum Paket Intervention Image für eine flexiblere Arbeit mit Text auf dem Bild. Verwenden Sie es, wenn Sie Text in einen bestimmten Bereich einpassen , die Schriftgröße automatisch berechnen und die Zeilenhöhe ändern müssen. Die Textzeichnungsmethode kann auch die tatsächliche Größe der Inschriften zurückgeben, was beispielsweise das Platzieren von Blöcken untereinander ermöglicht.
Zusätzlich zur flexiblen Arbeit mit Text bietet die Klasse eine Bild-API ähnlich dem Interventionspaket. Einschließlich intelligenter Größenänderung von Postern, Filtern, Zeichnen von Formen und Überlagern anderer Bilder.
Wenn Sie Composer in Ihrer Arbeit nicht verwenden, könnten Sie auch an der Einfachheit der Klasse und dem Fehlen jeglicher Abhängigkeiten interessiert sein. Beachten Sie, dass diese Klasse nur PHP-GD-Treiber unterstützt. Sie können Ihre Klasse auch problemlos erben – alle Methoden der übergeordneten Klasse können überschrieben werden.
Der poster editor lässt sich am besten schnell und einfach mit Composer installieren.
Sie können die Klasse jedoch direkt anfordern, ohne einen Lader zu verwenden – die Leistung wird dadurch in keiner Weise beeinträchtigt.
php composer.phar require antonlukin/poster-editor
Im Fehlerfall geben die Klassenmethoden eine Ausnahme zurück.
Daher ist es am besten, sie innerhalb eines Blocks try..catch aufzurufen.
// Using composer
require_once __DIR__ . ' /vendor/autoload.php ' ;
// Or directly
// require_once __DIR__ . '/PosterEditor.php';
try {
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 600 , 600 );
$ image -> show ();
} catch ( Exception $ e ) {
echo $ e -> getMessage ();
} $image->get()
Rufen Sie die Bildressource ab, um rohe GD-Befehle zu verwenden.
$image->set(instance $resourse)
Legen Sie die Bildressource fest, nachdem Sie rohe GD-Befehle verwendet haben.
$image->make(mixed $data)
Erstellen Sie eine neue Bildinstanz aus Datei- oder Binärdaten.
$image->insert(mixed $data, array $options = array())
Fügen Sie eine bestimmte Bildquelle mit einer optionalen Position über das aktuelle Bild ein. Der erste Parameter kann Binärdaten oder ein Pfad zu einer Datei oder einer anderen Klasseninstanz sein. Optionen ist ein Array von relativen x/y-Versatzkoordinaten von der oberen linken Ecke und einer Deckkraft von 0 bis 100, wobei 0 keine Transparenz bedeutet. Standardmäßig wird das Bild zentriert sein.
$image->canvas(int $width, int $height, array $options = array())
Initialisieren Sie die Leinwand nach Breite und Höhe. Die Optionen für die Hintergrundfarbe liegen in einer Reihe von Farb-/Deckkrafteinstellungen vor. Standardmäßig schwarze Leinwand ohne Deckkraft.
$image->show(string $format = null, int $quality = 90)
Sendet eine HTTP-Antwort mit dem aktuellen Bild im angegebenen Format und in der angegebenen Qualität. Format ist eine Dateibilderweiterung. Standardmäßig werden die Antwortdaten im Typ des aktuellen Bildes codiert. Wenn noch kein Bildtyp definiert ist, gibt die Methode JPEG-codierte Daten zurück. Die Qualität wird für alle Dateitypen auf einen Bereich von 0 (schlechte Qualität, kleine Datei) bis 100 (beste Qualität, große Datei) normalisiert. Der Standardwert ist 90. Das PNG-Format ist verlustfrei und die Qualität beeinflusst nur die Bildgröße und die Komprimierungsgeschwindigkeit.
$image->save(string $path, int $quality = 90, string $format = null)
Speichern Sie den aktuellen Status des Bildobjekts im Dateisystem. Definieren Sie optional einen bestimmten Pfad, in dem das Bild gespeichert werden soll. Der Bildtyp wird durch die Dateierweiterung definiert. Wenn keine Erweiterung verfügbar ist, werden die Antwortdaten im Typ des aktuellen Bildes codiert. Wenn noch kein Bildtyp definiert ist, gibt die Methode JPEG-codierte Daten zurück. Optional können Sie dies mit dem Formatparameter überschreiben. Die Qualität wird für alle Dateitypen auf einen Bereich von 0 (schlechte Qualität, kleine Datei) bis 100 (beste Qualität, große Datei) normalisiert. Der Standardwert ist 90. Das PNG-Format ist verlustfrei und die Qualität beeinflusst nur die Bildgröße und die Komprimierungsgeschwindigkeit.
$image->destroy()
Gibt den mit der aktuellen Bildinstanz verknüpften Speicher frei, bevor das PHP-Skript endet. Normalerweise werden Ressourcen nach Abschluss des Skripts automatisch zerstört.
$image->width()
Gibt die Höhe des aktuellen Bildes in Pixel zurück.
$image->height()
Gibt die Höhe des aktuellen Bildes in Pixel zurück.
$image->resize(int $width, int $height)
Ändert die Größe des aktuellen Bildes basierend auf der angegebenen Breite und Höhe. Achtet nicht auf das Seitenverhältnis. Um die Größe proportional zu ändern, verwenden Sie upsize und downsize -Methoden.
$image->upsize(int $width = null, int $height = null)
Bild auf der größten Seite vergrößern. Berechnet anhand des Verhältnisses für die auf Null gesetzte Breite oder Höhe.
$image->downsize(int $width = null, int $height = null)
Bild auf der größten Seite verkleinern. Berechnet anhand des Verhältnisses für die auf Null gesetzte Breite oder Höhe.
$image->crop(int $width, int $height, array $options = array())
Schneiden Sie einen rechteckigen Teil des aktuellen Bildes mit der angegebenen Breite und Höhe aus. Definieren Sie optionale XY-Koordinaten, um die obere linke Ecke des Ausschnitts an eine bestimmte Position zu verschieben.
$image->fit(int $width, int $height, string $position = 'center')
Kombinieren Sie Zuschneiden und Größenänderung, um das Bild auf intelligente Weise zu formatieren. Die Methode findet automatisch das am besten passende Seitenverhältnis für das aktuelle Bild, schneidet es aus und passt die Größe an die angegebene Größe an. Mögliche Positionen sind standardmäßig top-left , top , top-right , bottom-left , bottom , bottom-right , right , left und center .
$image->line(int $x1, int $y1, int $x2, int $y2, array $options = array())
Zeichnen Sie im aktuellen Bild eine Linie vom x-y-Punkt 1 zum x-y-Punkt 2. Verwenden Sie die Optionen param, um Farb-, Deckkraft- und Breitenwerte festzulegen.
$image->rectangle(int $x, int $y, int $width, int $height, array $options = array())
Zeichnen Sie ein farbiges Rechteck auf das aktuelle Bild. Verwenden Sie die Optionen param, um die Werte für Farbe, Deckkraft, Dicke und Umriss festzulegen.
$image->ellipse(int $x, int $y, int $width, int $height, array $options = array())
Zeichne eine Ellipse. Verwenden Sie die Optionen param, um Farb-, Deckkraft- und Umrisswerte festzulegen.
$image->brightness(int $level = 0)
Ändern Sie die Helligkeit des aktuellen Bildes um die angegebene Stufe. Verwenden Sie Werte zwischen -100 für minimale Helligkeit 0 für keine Änderung und +100 für maximale Helligkeit.
$image->contrast(int $level = 0)
Ändern Sie den Kontrast des aktuellen Bildes um die angegebene Stufe. Verwenden Sie Werte zwischen -100 für minimalen Kontrast 0 für keine Änderung und +100 für maximalen Kontrast.
$image->grayscale()
Verwandeln Sie ein Bild in eine Graustufenversion.
$image->blur()
Wenden Sie einen Unschärfebildeffekt an.
$image->invert()
Farben eines Bildes umkehren.
$image->blackout()
Zeichnen Sie ein schwarzes Deckkraftrechteck auf das Bild.
$image->rotate(int $angle, array $options = array())
Bild drehen. Legen Sie einen Winkel in Grad und optional die Farbe der nicht abgedeckten Zone nach der Drehung fest.
$image->text(string $text, array $options = array(), array &$boundary = array())
Zeichnen Sie Text auf das Bild. Mögliche Optionen:
Verwenden Sie die Grenze, um die tatsächlichen Abmessungen des gezeichneten Textfelds zu erhalten. Detaillierte Beispiele finden Sie weiter unten.
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 1200 , 630 , ' bottom ' )-> blackout ( 50 );
$ logo = new PosterEditor PosterEditor ();
$ logo -> make ( ' images/logo.png ' )-> downsize ( 150 , null );
$ image -> insert ( $ logo , array ( ' x ' => 50 , ' y ' => 50 ))-> show ();
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 1200 , 630 );
$ image -> grayscale ()-> brightness (- 40 );
$ image -> text (
' Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat Lorem ipsum dolor sit amet ' , // phpcs:ignore
array (
' x ' => 100 ,
' y ' => 100 ,
' width ' => 1000 ,
' height ' => 400 ,
' horizontal ' => ' center ' ,
' vertical ' => ' center ' ,
' fontpath ' => ' fonts/opensans.ttf ' ,
' fontsize ' => 24 ,
' lineheight ' => 1.75 ,
' color ' => ' #ffffff ' ,
' opacity ' => 0 ,
' debug ' => true ,
)
);
$ image -> show ( ' jpg ' , 70 );
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 900 , 600 );
$ image -> blackout ( 70 );
$ image -> text (
' Lorem ipsum dolor d d 4 g sit amet, consectetur adipiscing et, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex eas commodo consequat sdfsdfl ' , // phpcs:ignore
array (
' x ' => 100 ,
' y ' => 100 ,
' width ' => 600 ,
' height ' => 400 ,
' horizontal ' => ' justify ' ,
' vertical ' => ' justify ' ,
' fontpath ' => ' fonts/opensans.ttf ' ,
' fontsize ' => 20 ,
' lineheight ' => 1.5 ,
' color ' => ' #ffffff ' ,
' opacity ' => 0 ,
' debug ' => true ,
)
);
$ image -> show ( ' png ' );
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> crop (
900 , 600 ,
array (
' x ' => ' 0 ' ,
' y ' => ' 100 '
)
);
$ image -> grayscale ()-> brightness (- 40 );
$ image -> text (
' Large title with unknown height. Can be multi-line ' ,
array (
' x ' => 50 ,
' y ' => 100 ,
' width ' => 800 ,
' fontpath ' => ' /fonts/merriweather.ttf ' ,
' fontsize ' => 48 ,
' lineheight ' => 1.5 ,
' color ' => ' #9999ff ' ,
),
$ boundary
);
$ image -> text (
' This text appears right after title using smart boundaries ' ,
array (
' x ' => 50 ,
' y ' => $ boundary [ ' y ' ] + $ boundary [ ' height ' ],
' width ' => 800 ,
' fontpath ' => ' /fonts/opensans.ttf ' ,
' fontsize ' => 20 ,
' lineheight ' => 1.5 ,
' color ' => ' #ff9999 ' ,
),
$ boundary
);
$ image -> show ();
$ image = new PosterEditor PosterEditor ();
$ image -> make ( ' images/bridge.jpg ' )-> fit ( 1000 , 630 , ' bottom ' );
$ image -> contrast ( 5 )-> brightness (- 30 )-> blur ();
$ image -> rectangle (
20 , 20 , 960 , 590 ,
array (
' color ' => ' #ffffff ' ,
' outline ' => true ,
' width ' => 4 ,
)
);
$ image -> ellipse (
200 , 200 , 200 , 200 ,
array (
' color ' => ' #00ff00 ' ,
' opacity ' => 50 ,
)
);
$ image -> ellipse (
800 , 200 , 200 , 200 ,
array (
' color ' => ' #ff0000 ' ,
' opacity ' => 50 ,
)
);
$ image -> rectangle (
480 , 280 , 80 , 140 ,
array (
' color ' => ' #0000ff ' ,
)
);
$ image -> line (
200 , 500 , 800 , 500 ,
array (
' color ' => array ( 255 , 255 , 0 ),
' opacity ' => 10 ,
' width ' => 4 ,
)
);
$ image -> show ( ' png ' );
Der gesamte Projektcode wird auf Github gespeichert. Der beste Weg, das Projekt zu unterstützen, besteht darin, einen Fehler zu melden oder neue Funktionen hinzuzufügen. Sie können hier auch ein Problem eröffnen oder einen Pull-Reguest senden.