Bilder in PHP mit GD bearbeiten

Das Internet wäre ohne Bilder ziemlich langweilig. Das Verwalten und Bearbeiten von Hunderten oder Tausenden von Bildern für Ihre Website kann jedoch Kopfschmerzen verursachen. Wenn sich Ihr Website-Design ändert, müssen Sie möglicherweise alle Ihre Bilder ändern. Beispielsweise müssen Sie möglicherweise alle Ihre Bilder in Graustufen konvertieren oder ihre Größe auf 50% ihrer ursprünglichen Größe ändern. Möglicherweise möchten Sie auch verschiedene Bilder komprimieren oder beschneiden. Dies manuell durchzuführen ist zeitaufwändig und fehleranfällig, kann jedoch mit ein wenig Programmierkenntnissen automatisiert werden.

In diesem Tutorial erfahren Sie mehr über die GD (Graphic Draw) -Bibliothek in PHP. Sie werden sehen, wie diese Bibliothek verwendet werden kann, um Bilder durch Ändern der Größe, Zuschneiden, Drehen oder Filtern zu verändern.

Was ist GD??

PHP kann mehr als nur HTML für Besucher bereitstellen. Es hat zum Beispiel die Fähigkeit, Bilder zu manipulieren. Nicht nur das, Sie können auch Ihre eigenen Bilder von Grund auf erstellen und sie dann entweder speichern oder den Benutzern zur Verfügung stellen.

PHP kann fast alle grundlegenden Bildbearbeitungsbedürfnisse mit der GD-Bibliothekskürzel für Graphic Draw verarbeiten. 

Konfiguration

Wenn Sie unter Windows arbeiten, können Sie die php_gd2.dll Datei als Erweiterung in php.ini. Wenn Sie etwas wie XAMPP verwenden, finden Sie das php_gd2.dll Datei im Verzeichnis xampp \ php \ ext. Sie können mit der Funktion auch überprüfen, ob GD auf Ihrem System installiert ist phpinfo ();. Wenn Sie durch die resultierende Ausgabe blättern, werden Sie Folgendes ähnlich finden.

Sie können auch die Anforderungen und Installationsseiten besuchen, um mehr über den Installationsprozess zu erfahren.

Bilder mit PHP GD erstellen

Der erste Schritt zur Manipulation von Bildern mit PHP besteht darin, sie als Bildressource in den Speicher zu laden. Dies kann erreicht werden, indem verschiedene Funktionen für verschiedene Formate verwendet werden. Alle diese Funktionen haben sehr ähnliche Namen, so dass sie leicht zu merken sind.

Erstellen Sie ein neues Image

Das imagecreatetruecolor () Diese Funktion ist hilfreich, wenn Sie keine Originalbildquelle haben, die Sie bearbeiten möchten. Es akzeptiert zwei ganzzahlige Parameter: eine Breite und Höhe. Wenn alles wie geplant gelaufen ist, wird eine Bildressource zurückgegeben. Die zurückgegebene Bildressource ist im Wesentlichen ein schwarzes Bild mit der angegebenen Breite und Höhe.

Laden Sie eine Bilddatei

Wenn Sie vorhaben, Bilder zu bearbeiten, die bereits gespeichert wurden, profitieren Sie von Funktionen wie imagecreatefromjpeg (), imagecreatefrompng (), und imagecreatefromgif (). Diese erstellen eine Image-Ressource mit allen Daten aus der geladenen Image-Datei. Diese Funktionen akzeptieren einen einzelnen Parameter, der den Speicherort des Bildes angibt, das Sie entweder als URL oder als Dateipfad laden.

Erstellen Sie ein Bild aus einer Zeichenfolge

Mit der GD-Bibliothek können Sie auch Bilder aus einer Zeichenfolge mithilfe von erstellen imagecreatefromstring () Funktion in PHP. Denken Sie daran, dass Sie verwenden müssen base64_decode () auf der gegebenen Zeichenfolge vorher imagecreatefromstring (). Die Funktion kann automatisch erkennen, ob der Bildtyp JPG, PNG, GIF oder ein anderes unterstütztes Format ist.

Ein Bild drehen, skalieren, zuschneiden und spiegeln

Einige häufige Vorgänge, die Sie möglicherweise für eine Bildressource ausführen möchten, sind Rotation, Skalierung, Zuschneiden und Spiegeln.

Drehung

Sie können ein Bild, das Sie bereits im Skript geladen haben, mit dem Symbol drehen Imagerotate () Funktion. Das Bild wird im angegebenen Winkel gedreht, wobei die Bildmitte als Drehmittelpunkt verwendet wird. Der Winkel wird als Gleitkommawert bereitgestellt, und PHP betrachtet ihn als Gradwert für die Drehung. 

Manchmal hat das gedrehte Bild andere Abmessungen als die Originalversion. Dies bedeutet, dass Sie nach der Drehung einen nicht abgedeckten Bereich erhalten. Der dritte Parameter des Imagerotate () Mit dieser Funktion können Sie die Hintergrundfarbe des leeren Bereichs nach der Drehung festlegen.

Skalierung

Es ist sehr einfach, ein Bild mithilfe der GD-Bibliothek zu skalieren. Sie müssen nur die Bildressource sowie die Breite und Höhe an den Browser übergeben Imagescale () Funktion. Wenn Sie die Höhe weglassen, skaliert GD das Bild auf die angegebene Breite, wobei das Seitenverhältnis beibehalten wird. 

Sie können auch den Modus zum Skalieren des Bildes angeben. Es kann auf eingestellt werden IMG_NEAREST_NEIGHBOUR, IMG_BILINEAR_FIXED, IMG_BICUBIC, usw. Wichtig ist, dass Sie mit dieser Funktion eine neue skalierte Bildquelle zurückgeben, anstatt die ursprüngliche zu ändern.

Zuschneiden

Sie können jede Bildressource mit dem Bildausschnitt beschneiden imagecrop () Funktion in GD. Der erste Parameter ist die ursprüngliche Bildressource und der zweite Parameter ist ein assoziatives Array mit den Schlüsseln x, y, Breite, und Höhe, Festlegen der Position und Abmessungen des Zuschneidefensters.

Das obige Schmetterlingsbild wurde mit folgendem Code beschnitten:

$ im_php = imagecreatefromjpeg ('Pfad / zu / Bild'); $ size = min (imagesx ($ im_php), imagesy ($ im_php)); $ im_php = Bildausschnitt ($ im_php, ['x' => $ size * 0,4, 'y' => 0, 'width' => $ size, 'height' => $ size]); $ im_php = Imagescale ($ im_php, 300);

Grundsätzlich speichern wir die Länge der kleinsten Seite im $ size Variable. Diese Variable wird dann verwendet, um die Begrenzung unseres Beschneidungsrechtecks ​​zu definieren. Schließlich wird das Bild so verkleinert, dass es nur 300 Pixel breit und lang ist. Dies gibt uns ein quadratisches Bild in der richtigen Größe.

Spiegeln von Bildern

Bilder können mit, horizontal, vertikal oder in beide Richtungen gedreht werden Imageflip () Funktion. Sie akzeptiert die Bildressource, die Sie umdrehen möchten, als ersten Parameter und den Flip-Modus als zweiten Parameter. Der Flip-Modus kann auf eingestellt werden IMG_FLIP_HORIZONTAL, IMG_FLIP_VERTICAL, oder IMG_FLIP_BOTH.

Das obere linke Bild in der obigen Abbildung ist das Original. Das obere rechte Bild wurde mit erstellt IMG_FLIP_HORIZONTAL, Das untere linke Bild wurde mit erstellt IMG_FLIP_VERTICAL, und das Bild unten rechts wurde mit erstellt IMG_FLIP_BOTH. (Das Krähenbild stammt von Pixabay.)

Anwenden von Filtern auf ein Bild

GD hat auch eine sehr nützliche Funktion Bildfilter () Diese Funktion kann Filter auf verschiedene Bildressourcen anwenden, die mit den Funktionen der vorherigen Bilder geladen wurden. Diese Funktion kann abhängig vom angewendeten Filter verschiedene Parameter akzeptieren.

Geben Sie zunächst die Bildressource und den Namen des Filters an, den Sie anwenden möchten. Sie können einen der 12 vordefinierten Filtertypen festlegen, die in den Dokumenten erwähnt werden. 

  • IMG_FILTER_NEGATE: kehrt die Farben im Bild um
  • IMG_FILTER_GRAYSCALE: entfernt Farbe aus dem Bild
  • IMG_FILTER_BRIGHTNESS: Das Bild wird heller oder dunkler
  • IMG_FILTER_CONTRAST: erhöht den Bildkontrast 
  • IMG_FILTER_COLORIZE: färbt das Bild in einer ausgewählten Farbe
  • IMG_FILTER_EDGEDETECT: hebt die Ränder des Bildes hervor
  • IMG_FILTER_EMBOSS: ähnlich der Kantenerkennung, verleiht jedoch jeder Kante ein erhöhtes Aussehen
  • IMG_FILTER_GAUSSIAN_BLUR: verwischt das Bild mit der Gaußschen Methode
  • IMG_FILTER_SELECTIVE_BLUR: verwischt das Bild mit der selektiven Methode
  • IMG_FILTER_MEAN_REMOVAL: Ein Effekt zum Erstellen eines stilisierten Bildes
  • IMG_FILTER_SMOOTH: glättet gezackte Kanten im Bild
  • IMG_FILTER_PIXELATE: macht das Bild pixelig 

Einige Filter mögen NEGIEREN, GRAYSCALE, EDGE_DETECT und PRÄGEN brauche keine zusätzlichen Daten Andere Filter mögen HELLIGKEIT, KONTRAST und GLATT, kann einen zusätzlichen Parameter akzeptieren, der die Helligkeit, den Kontrast oder die Glätte des endgültigen Bildes angibt. Das PIXELATE Mit dem Parameter können Sie zwei zusätzliche Parameter angeben: die Blockgröße sowie den Pixelierungsmodus. Endlich, das COLORIZE filter akzeptiert vier Parameter, die die Werte für die rote, grüne und blaue Komponente sowie den Alphakanal bestimmen.

Das Bild oben links ist das Original. Das obere rechte Bild wurde mit dem erstellt COLORIZE filter, der linke unten wurde mit dem erstellt GRAYSCALE filtern und das Bild rechts unten wurde mit dem erstellt HELLIGKEIT Filter. (Dieses Schmetterlingsbild wurde in Pixabay gefunden.)

Andere nützliche Funktionen zur Bildbearbeitung

Sie sollten auch einige andere gängige GD-Funktionen kennen, die ab und zu nützlich sind.

Bildmaße abrufen

Sie können die Breite und Höhe einer Bildressource mithilfe von bestimmen imagesx () und imagesy () Funktionen.

Eine andere Funktion namens getimagesize () kann auch verwendet werden, um die Breite und Höhe eines Bildes zusammen mit seinem Typ abzurufen. Diese Funktion gibt ein Array mit Elementen zurück, die die Breite, Höhe und das Format des Bildes angeben. Die ersten beiden Elemente des Arrays beschreiben die Breite und Höhe und das dritte Element enthält eine Konstante, die das Dateiformat angibt: eines von IMAGETYPE_PNG, IMAGETYPE_GIF, usw.

Bild speichern

Nachdem Sie alle gewünschten Änderungen an einem Bild vorgenommen haben, möchten Sie es wahrscheinlich entweder im Browser ausgeben oder als Datei speichern. In beiden Fällen müssen Sie eine der GD-Ausgabefunktionen wie verwenden imagejpeg (), imagepng (), oder imagegif (). Sie übergeben Ihre Bildressource an eine dieser Ausgabefunktionen. Wenn Sie das Bild in einer Datei speichern möchten, geben Sie auch einen Dateinamen an. Sie können die Qualität des Ausgabebilds auch mit einem dritten optionalen Parameter steuern, abhängig vom Bildtyp.

Ändern der Größe aller Bilder in einem Verzeichnis

Wenden wir das bisher erworbene Wissen an, um etwas Praktisches zu tun. In diesem Abschnitt werden wir die Größe aller JPEG-Bilder in einem bestimmten Verzeichnis auf eine Breite von 640 Pixel ändern. Die Höhe wird automatisch basierend auf den Abmessungen des Originalbilds berechnet.

Wir speichern die verkleinerten Bilder in einem neuen Ordner mit dem Titel Größe geändert. Alle Originalbilder haben in diesem Fall die gleichen Abmessungen, der Code funktioniert jedoch bei Bildern mit unterschiedlichen Größen und Seitenverhältnissen einwandfrei.

$ directory = 'Nature /'; $ images = glob ($ directory. "*. jpg"); foreach ($ images als $ image) $ im_php = imagecreatefromjpeg ($ image); $ im_php = Imagescale ($ im_php, 640); $ new_height = imagesy ($ im_php); $ new_name = str_replace ('- 1920x1080', '-640x'. $ new_height, Basisname ($ image)); imagejpeg ($ im_php, $ directory.'Resized /'.$ neuer_name); 

Im obigen Code beginnen wir mit der Verwendung von glob () Funktion zum Finden aller Bilder mit einem .jpg Erweiterung im Verzeichnis mit dem Titel Natur. Die Bilddateien werden in einem Array gespeichert, und wir werden sie nacheinander durchlaufen.

Da alle Bilder, deren Größe geändert werden soll, JPEGs sind, verwenden wir die imagecreatefromjpeg () Funktion, um sie in das Skript zu laden. Das Imagescale () Die Funktion wird dann verwendet, um das Bild in unserem Fall auf eine bestimmte Breite von 640 Pixel zu ändern. Wir haben keine feste Höhe angegeben, daher wird die Höhe automatisch berechnet.

Jede der ursprünglichen Bilddateien hatte -1920 x 1080 an den Dateinamen angehängt werden, um seine Abmessungen anzugeben. Wir gebrauchen str_replace () auf den ursprünglichen Dateinamen und ersetzen -1920X1080 mit die neue Bildgröße.

Zum Schluss speichern wir die verkleinerten Bilder in einem Ordner mit dem Namen Größe geändert mit den neuen Dateinamen. Sie können auch einen dritten Parameter an den übergeben imagejpeg () Funktion zum Einstellen der Qualität der gespeicherten Bilddatei. Wenn der dritte Parameter nicht angegeben wird, werden die Bilder mit einer Standardqualität von 75 gespeichert.

Wenden Sie Graustufen- und Kontrastfilter für jedes Bild in einem Verzeichnis an

Dieses Mal wenden wir zwei verschiedene Filter für jedes Bild in unserem Verzeichnis an und speichern das Endergebnis in einem anderen Verzeichnis, ohne Änderungen am Dateinamen vorzunehmen. Lassen Sie uns in den Code eintauchen, und ich werde später erklären, was jede Funktion bewirkt.

$ directory = 'Nature /'; $ images = glob ($ directory. "*. jpg"); foreach ($ images als $ image) $ im_php = imagecreatefromjpeg ($ image); imagefilter ($ im_php, IMG_FILTER_GRAYSCALE); Bildfilter ($ im_php, IMG_FILTER_CONTRAST, -25); $ neuer_name = Basisname ($ image); imagejpeg ($ im_php, $ directory.'Grayscale /'.$ neuer_name); 

Wie Sie sehen, laden wir die Bilder von der Natur Verzeichnis genau wie beim vorherigen Beispiel. Wir verwenden jedoch die Bildfilter () Funktion diese Zeit, um Filter auf die geladene Bildressource anzuwenden. 

Beachte das Bildfilter () ändert das Originalbild und kehrt zurück WAHR oder FALSCH basierend auf dem Erfolg oder Misserfolg der Operation. Das unterscheidet sich vom Imagescale () Funktion, die wir im vorherigen Abschnitt verwendet haben, die die skalierte Bildressource zurückgegeben hat.

Beachten Sie außerdem, dass der Kontrastfilter Werte von -100 bis 100 akzeptiert. Negative Werte bedeuten mehr Kontrast und positive Werte bedeuten weniger Kontrast. Dies ist das Gegenteil von dem, was manche Leute erwarten könnten! Bei einem Wert von 0 bleibt das Bild unverändert.

Der Helligkeitsfilter hingegen hat minimale und maximale Grenzwerte von -255 und 255. Der negative Wert bedeutet in diesem Fall minimale Helligkeit und der positive Wert impliziert maximale Helligkeit.

Wir erhalten den Dateinamen aus dem Dateipfad mit der Basisname () Funktion und speichern Sie dann das Bild mit der imagejpeg () Funktion.

Abschließende Gedanken

Ziel dieses Tutorials war es, Sie mit der GD-Bibliothek in PHP vertraut zu machen und Ihnen zu zeigen, wie Sie all diese Funktionen einsetzen können, um Ihnen das Leben zu erleichtern. Sie können die Beispiele am Ende des Tutorials als Anleitung zum Erstellen eigener Bildbearbeitungsskripts verwenden. Beispielsweise können Sie die Größe eines Bildes nur ändern, wenn es breiter als ein bestimmter Grenzwert ist, indem Sie seine Breite mithilfe von bestimmen imagesx () Funktion.

All diese Funktionen bieten viele Möglichkeiten, um die Bildbearbeitung zu vereinfachen und am Ende viel Zeit zu sparen. Wenn Sie Fragen zu diesem Tutorial haben, teilen Sie mir dies bitte in den Kommentaren mit.