Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. PHP
Code

Manipulieren von Bildern in PHP mit GD

by
Difficulty:IntermediateLength:MediumLanguages:

German (Deutsch) translation by Wei Zhang (you can also view the original English article)

Das Internet wäre ohne Bilder ziemlich langweilig. Die Pflege und Bearbeitung von Hunderten oder Tausenden von Bildern für Ihre Website kann jedoch Kopfschmerzen bereiten. 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. Sie können auch verschiedene Bilder komprimieren oder zuschneiden. Dies manuell zu tun ist zeitaufwendig und fehleranfällig, aber mit ein wenig Programmierwissen kann es automatisiert werden.

In diesem Tutorial lernen wir die GD (Graphic Draw) Bibliothek in PHP kennen. Sie werden sehen, wie diese Bibliothek verwendet werden kann, um Bilder zu manipulieren, indem Sie die Größe ändern, zuschneiden, drehen oder filtern.

Was ist GD?

PHP kann viel mehr als nur HTML für Besucher bereitstellen. Zum Beispiel hat es die Fähigkeit, Bilder zu manipulieren. Nicht nur das, sondern Sie können auch Ihre eigenen Bilder von Grund auf neu erstellen und sie dann entweder speichern oder für Benutzer bereitstellen.

PHP kann mit der GD library - kurz für Graphic Draw - fast alle Ihre grundlegenden Bildmanipulationsanforderungen bewältigen.

Konfiguration

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

PHP XAMPP GD

Sie können auch die Seite mit den Anforderungen und der Installation aufrufen, um mehr über den Installationsprozess zu erfahren.

Erstellen von Bildern mit PHP GD

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

Erstellen Sie ein neues Bild

Die Funktion imagecreatetruecolor () wird hilfreich sein, wenn Sie keine ursprüngliche Bildquelle haben, die Sie bearbeiten möchten. Es akzeptiert zwei ganzzahlige Parameter: eine Breite und eine Höhe. Es wird eine Bildressource zurückgeben, wenn alles wie geplant abgelaufen ist. Die zurückgegebene Bildressource ist im Grunde ein schwarzes Bild mit der angegebenen Breite und Höhe.

Laden Sie eine Bilddatei

Wenn Sie beabsichtigen, Bilder zu bearbeiten, die bereits irgendwo gespeichert sind, profitieren Sie von Funktionen wie imagecreatefromjpeg (), imagecreatefrompng () und imagecreatefromgif (). Diese erstellen eine Bildressource mit allen Daten aus der geladenen Bilddatei. 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 einem String mithilfe der Funktion imagecreatefromstring () in PHP erstellen. Denken Sie daran, dass Sie base64_decode () für die angegebene Zeichenfolge vor imagecreatefromstring () verwenden müssen. Die Funktion kann automatisch erkennen, ob der Bildtyp JPG, PNG, GIF oder ein anderes unterstütztes Format ist.

Drehen, skalieren, zuschneiden und spiegeln Sie ein Bild

Einige allgemeine Operationen, die Sie möglicherweise an einer Bildressource ausführen möchten, sind Rotation, Skalierung, Zuschneiden und Spiegeln.

Drehung

Sie können ein Bild, das Sie bereits in das Skript geladen haben, mit der Funktion imagerotate () drehen. Es wird das Bild unter dem angegebenen Winkel drehen, wobei der Bildmittelpunkt als Rotationsmittelpunkt verwendet wird. Der Winkel wird als Gleitkommawert bereitgestellt, und PHP berücksichtigt ihn als den Gradwert für die Drehung. Manchmal hat das gedrehte Bild eine andere Größe als die Originalversion. Das bedeutet, dass Sie nach der Rotation einen unbedeckten Bereich haben werden. Mit dem dritten Parameter der Funktion imagerotate () kann die Hintergrundfarbe des leeren Bereichs nach der Drehung festgelegt werden.

Skalierung

Es ist sehr einfach, ein Bild mit der GD-Bibliothek zu skalieren. Sie müssen nur die Bildressource sowie die Breite und Höhe an die Funktion imagescale () übergeben. Wenn Sie die Höhe weglassen, wird GD das Bild auf die angegebene Breite skalieren, während das Seitenverhältnis beibehalten wird. Sie können auch den Modus zum Skalieren des Bildes angeben. Es kann auf IMG_NEAREST_NEIGHBOUR, IMG_BILINEAR_FIXED, IMG_BICUBIC usw. eingestellt werden. Eine wichtige Sache, die Sie beachten müssen, ist, dass diese Funktion eine neue skalierte Bildquelle zurückgibt, anstatt die ursprüngliche zu ändern.

Zuschneiden

Sie können jede Bildressource mit der Funktion imagecrop () in GD zuschneiden. Der erste Parameter ist die ursprüngliche Bildressource und der zweite Parameter ist ein assoziatives Array mit den Schlüsseln x, y, width und height, die die Positionsdimensionen des Zuschneidefensters angeben.

Crop and Rotate Images Using PHP

Das obige Schmetterlingsbild wurde mit dem folgenden Code abgeschnitten:

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

Spiegeln von Bildern

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

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

Anwenden von Filtern auf ein Bild

GD hat auch eine sehr nützliche imagefilter () -Funktion, die Filter auf verschiedene Bildressourcen anwenden kann, die mit den Funktionen von vorherigen Bildern geladen werden. Diese Funktion kann abhängig von dem Filter, den Sie anwenden, verschiedene Parameter akzeptieren.

Geben Sie als Erstes die Bildressource und den Namen des Filters an, den Sie anwenden möchten. Sie können es auf 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: macht das Bild heller oder dunkler
  • IMG_FILTER_CONTRAST: Erhöht den Bildkontrast
  • IMG_FILTER_COLORIZE: Färbt das Bild auf eine ausgewählte Farbe
  • IMG_FILTER_EDGEDETECT: hebt die Kanten des Bildes hervor
  • IMG_FILTER_EMBOSS: ähnelt der Kantenerkennung, gibt aber 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, um ein stilisiertes Bild zu erstellen
  • IMG_FILTER_SMOOTH: glättet gezackte Ränder im Bild
  • IMG_FILTER_PIXELATE: lässt das Bild pixelig aussehen

Einige Filter wie NEGATE, GREYSCALE, EDGE_DETECT und EMBOSS benötigen keine zusätzlichen Daten. Andere Filter, wie BRIGHTNESS, CONTRAST und SMOOTH, können einen zusätzlichen Parameter akzeptieren, der die Helligkeit, den Kontrast oder die Glätte des endgültigen Bildes angibt. Mit dem Parameter PIXELATE können Sie zwei zusätzliche Parameter angeben: die Blockgröße sowie den Modus der Pixelierung. Schließlich akzeptiert der COLORIZE-Filter vier Parameter, die die Werte für die roten, grünen und blauen Komponenten sowie den Alpha-Kanal bestimmen.

Das Bild oben links ist das Original. Das Bild oben rechts wurde mit dem Filter COLORIZE erstellt, unten links wurde mit dem Filter GRAYSCALE und das Bild unten rechts mit dem Filter BRIGHTNESS erstellt. (Dieses Schmetterlingsbild wurde bei Pixabay gefunden.)

Andere nützliche Bildmanipulationsfunktionen

Sie sollten auch über einige andere allgemeine GD-Funktionen wissen, die von Zeit zu Zeit nützlich sind.

Bildabmessungen erhalten

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

Eine andere Funktion namens getimagesize () kann auch verwendet werden, um die Breite und Höhe eines Bildes zusammen mit seinem Typ zu erhalten. 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.

Ein Bild speichern

Sobald Sie alle gewünschten Änderungen an einem Bild vorgenommen haben, möchten Sie es wahrscheinlich entweder an den Browser ausgeben oder als Datei speichern. In jedem Fall müssen Sie eine der GD-Ausgabefunktionen wie imagejepg (), imagepng () oder imagegif () verwenden. Sie können die Qualität des Ausgabebilds auch mit einem dritten optionalen Parameter abhängig vom Bildtyp steuern. Sie können die Qualität des Ausgabebilds auch mit einem dritten optionalen Parameter abhängig vom Bildtyp steuern.

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

Lassen Sie uns das bisher erworbene Wissen anwenden, um etwas Praktisches zu tun. In diesem Abschnitt ändern wir die Größe aller JPEG-Bilder in einem bestimmten Verzeichnis auf 640 Pixel. Die Höhe wird automatisch basierend auf den Abmessungen des Originalbildes berechnet.

Wir speichern die Bilder in der Größe in einem neuen Ordner mit dem Titel Resized. Alle Originalbilder haben in diesem Fall die gleichen Abmessungen, aber der Code funktioniert ordnungsgemäß mit Bildern, die alle unterschiedliche Größen und Seitenverhältnisse haben.

Im obigen Code beginnen wir mit der Funktion glob (), um alle Bilder mit der Erweiterung .jpg im Verzeichnis Nature zu finden. Die Bilddatei wird in einem Array gespeichert und wir durchlaufen sie nacheinander.

Da alle Bilder, die wir in der Größe ändern möchten, JPEGs sind, verwenden wir die Funktion imagecreatefromjpeg (), um sie in das Skript zu laden. Die Funktion imagescale () wird dann verwendet, um das Bild auf eine bestimmte Breite zu skalieren - in diesem Fall 640 Pixel. Wir haben keine feste Höhe angegeben, daher wird die Höhe automatisch berechnet.

Jede der ursprünglichen Bilddateien hatte -1920x1080 an ihren Dateinamen angehängt, um ihre Abmessungen anzuzeigen. Wir verwenden str_replace () für den ursprünglichen Dateinamen und ersetzen -1920X1080 durch die neue Bildgröße.

Zum Schluss speichern wir die Bilder in der Größe in einem Ordner namens Resized mit den neuen Dateinamen. Sie können auch einen dritten Parameter an die Funktion imagejpeg () übergeben, um die Qualität der gespeicherten Bilddatei festzulegen. Wenn der dritte Parameter nicht angegeben wird, werden die Bilder in der Standardqualität 75 gespeichert.

Wenden Sie Graustufen- und Kontrastfilter auf jedes Bild in einem Verzeichnis an

Dieses Mal werden wir zwei verschiedene Filter auf jedes Bild in unserem Verzeichnis anwenden und das Endergebnis in einem anderen Verzeichnis speichern, ohne den Dateinamen zu ändern. Lass uns in den Code eintauchen und ich werde erklären, was jede Funktion später macht.

Wie Sie sehen können, laden wir die Bilder aus dem Verzeichnis "Nature" genauso wie beim vorherigen Beispiel. Allerdings werden wir dieses Mal die Funktion imagefilter () verwenden, um Filter auf die geladene Bildressource anzuwenden.

Beachten Sie, dass imagefilter () das ursprüngliche Bild ändert und TRUE oder FALSE basierend auf dem Erfolg oder dem Fehlschlagen der Operation zurückgibt. Dies unterscheidet sich von der im vorherigen Abschnitt verwendeten Funktion imagescale (), die die skalierte Bildressource zurückgegeben hat.

Eine weitere wichtige Anmerkung ist, 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 würden! Ein Wert von 0 wird das Bild unverändert lassen.

Der Helligkeitsfilter hat dagegen minimale und maximale Grenzen von -255 und 255. Der negative Wert bedeutet in diesem Fall minimale Helligkeit und der positive Wert bedeutet maximale Helligkeit.

Wir holen den Dateinamen aus dem Dateipfad mit der Funktion basename () und speichern dann das Bild mit der Funktion imagejpeg ().

Abschließende Gedanken

Das Ziel dieses Tutorials war, Sie mit der GD-Bibliothek in PHP vertraut zu machen und zu lernen, wie Sie all diese Funktionen nutzen können, um Ihr Leben einfacher zu machen. Sie können die Beispiele am Ende des Tutorials als Leitfaden zum Schreiben eigener Bildmanipulationsskripts verwenden. Beispielsweise können Sie die Größe eines Bildes nur dann ändern, wenn es breiter als ein vorgegebenes Limit ist, indem Sie seine Breite mit der Funktion imagesx () bestimmen.

All diese Funktionen eröffnen Ihnen viele Möglichkeiten, die Bildbearbeitung zu erleichtern und am Ende viel Zeit zu sparen. Wenn Sie Fragen zu diesem Tutorial haben, lassen Sie es mich bitte in den Kommentaren wissen.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.