Allgemeine Informationen zu Elektronik, Platinen, Programmierung, PCs und mehr...

von   am   | 4 Kommentare | aktualisiert am  | 7100 mal gelesen
46 mal als PDF heruntergeladen

Bilder skalieren mit PHP

   Bilder skalieren mit PHP

So leicht lassen sich Bilder mit PHP skalieren und neu abspeichern

Bilder skalieren mit PHP

Bilder ohne Grafikprogramm in einer anderen Größe abspeichern

Manchmal kommt es vor, dass man ein bereits online gestelltes Bild oder eine Grafik in einer anderen Größe braucht.
Man kann natürlich das Bild mit HTML oder auch CSS skalieren. Oder man nutzt PHP und nutzt die Funktion getimagesize(), um das für einen zu erledigen. Meistens geht das schneller als mit dem Grafikprogramm und das neue Bild muss nicht extra hochgeladen werden.
Du kannst übrigens direkt auf dieser Seite weiter unten das Skalieren von Bildern ausprobieren und dann unter dem angegebenen Link das Bild anschauen und herunterladen.

Um direkt zum Formular zur Bildskalierung zu kommen, einfach nach unten scrollen oder hier klicken.

PHP kann mit getimagesize() alle Eigenschaften eines Bildes auslesen. Diese Eigenschaften werden in der Variabel $image_attributes als Array gespeichert.
Der erste Wert enthält die Breite, der zweite Wert enthält die Höhe und der dritte Wert enthält den Dateitypen. Der vierte Wert enthält die korrekte Zeichenkette im Format 'heigt=xxx width=xxx', um das im IMG-Tag von HTML zu benutzen. Das brauchen wir hier aber nicht.

Hier mal die komplette Auflistung:
$image_attributes[0] => Breite des Bildes in Pixeln
$image_attributes[1] => Höhe des Bildes in Pixeln
$image_attributes[2] => Enthält einen numerischen Wert für den Bildtyp. (siehe Konstanten)
$image_attributes[3] => Enthält einen String für die Verwendung in HTML, leider für CSS nicht verwendbar.
$image_attributes[‘mime‘] => Enthält den MIME-Type des Bildes laut RFC.
$image_attributes[‘channels‘] => Enthält die Anzahl der Farbkanäle (also z.B. wieviel Bytes ein Pixel beansprucht).
$image_attributes[‘bits‘] => Enthält die Anzahl der Bits pro Farbkanal.

Aktuell können mit diesem Script JPG, GIF und PNG neu skaliert werden. Das wird ab Zeile 41 unterschieden, denn dort wird die neue Bilddatei erzeugt und gespeichert.
Wenn jemand Lust hat, das Script um die anderen Bilddateitypen zu erweitern, bitte ich um entsprechende Kommentare :-)
Folgende Dateitypen(Konstanten) gibt es:
GIF = 1
JPG = 2
PNG = 3
SWF = 4 -> kein Bilddateityp !!
PSD = 5
BMP = 6
TIF = 7 (intel byte order)
TIF = 8 (motorola byte order)
JPC = 9 -> JPEG2000
JP2 = 10
JPX = 11
JB2 = 12 -> kein Bilddateityp !!
SWC = 13 -> kein Bilddateityp !!
AIFF = 14
WBMP = 15
XBM = 16
ICO = 17

Natürlich ist nicht jeder Dateityp für eine Skalierung geeignet ;-)

Bei anderen Dateitypen als den ersten drei, bricht das Script in Zeile 73 ab.

Bild skalieren – die Berechnungen:

Mit $image_aspectratio = $image_width_old / $image_height_old wird dann das Seitenverhältnis berechnet, um mit diesem Wert nachher die neue Größe korrekt berechnen zu können.

Ab Zeile 22 wird je nach gewähltem $scale_mode die neue Breite und Höhe des skalierten Bildes berechnet.

Bedeutung von $scale_mode= :

-1: $image_dimension wird als neue Breite des Bildes aufgefasst.
Die Höhe wird so angepasst, dass das Seitenverhältnis des Bildes erhalten bleibt.

-2: $image_dimension wird als neue Höhe des Bildes aufgefasst.
Die Breite wird so angepasst, dass das Seitenverhältnis des Bildes erhalten bleibt.

0: $image_dimension wird als neue längste Seite des Bildes aufgefasst.
Die andere Seite wird entsprechend verkleinert, damit das Seitenverhältnis des Bildes erhalten bleibt.
Ideal für Thumbnails, die quadratisch sind.

1: $image_dimension wird als neue kürzeste Seite des Bildes aufgefasst.
Die andere Seite wird entsprechend vergrößert, damit das Seitenverhältnis des Bildes erhalten bleibt.
Ideal, wenn das Bild eine Mindestgröße nicht unterschreiten soll.

Der Aufruf der Funktion:

resizeImage ($filepath_old, $filepath_new, $image_dimension, $scale_mode)

Also zb:
$filepath_old = "../catalog/bild.jpg";
$filepath_new = "../catalog/bild_neu.jpg";
resizeImage ($filepath_old, $filepath_new, 300, $scale_mode = -1);

Hier das komplette Script, um Bilder zu skalieren:

(Bildquelle Yvonne Biondi Babycenter Schweiz)



Hier kannst du dein Bild skalieren:








Pfad zum Originalbild*:

neue Breite/Höhe in PX:

neuer Dateiname:

neue Dateiendung**:

Skalierungsmodus:


*kompletter Pfad, zb:
https://www.all4hardware4u.de/wp-content/uploads/2013/11/bild.jpg
**Achtung! Das Ändern der Dateiänderung entspricht nicht dem Exportieren zu einem anderen Dateityp!

 


Bewerte den Artikel, wenn du magst:
[Gesamt: 22 Durchschnitt: 4.9/5]

4 Kommentare

  1. Christoph

    Danke, das ist ein tolles Script!!!
    Ich habe es bei einem Projekt erfolgreich im Einsatz.
    Mir ist aufgefallen, dass es bei Bildern bei denen eine Seite größer als ca. 5.650px ist, Probleme gibt.
    Ist da etwas bekannt, bzw. wie kann ich das lösen?
    Vielen Dank!

    Bewerte diesen Kommentar, wenn du magst:
    [Gesamt: 2    Durchschnitt: 4/5]
    • Harry Milatz

      Hi Christoph,

      schön wenn dir das Script geholfen hat!
      Inwiefern zeigen sich da Probleme? Welche Fehlermeldung bekommst du?

      Gruss Harry

      Bewerte diesen Kommentar, wenn du magst:
      [Gesamt: 2    Durchschnitt: 5/5]
      • Christoph

        Hallo Harry,
        ich hab eines der betroffenen Bilder jetzt auch mit dem Formular auf deiner Seite getestet.
        Hier das Originalbild: http://neu.scharinger-reisen.at/images/reisen/WallfahrtnachInnsbruck/0001.jpg
        Neue Breite: 1000
        Scale Mode: -1
        Auch so funktioniert es nicht.
        Woran kann das liegen bzw. hast du einen Workaround für mich?
        Vielen Dank & beste Grüße

        Bewerte diesen Kommentar, wenn du magst:
        [Gesamt: 1    Durchschnitt: 5/5]
        • Harry Milatz

          Hi Christoph,

          also bei mir hier auf der Seite klappt das problemlos. Habe es eben mal auf 1000 Pixel Breite skaliert:
          https://www.all4hardware4u.de/wp-content/uploads/neu/test.jpg

          Du kannst es ja mal hier auf der Seite selbst probieren.

          Da muss also bei dir eventuell beim Server eine Einschränkung sein. Frag doch deinen Hoster mal. Welche PHP Version nutzt du? Das Script läuft eventuell nicht korrekt unter PHP7, das habe ich aber noch nicht geprüft.

          Gruss Harry

          Bewerte diesen Kommentar, wenn du magst:
          [Gesamt: 2    Durchschnitt: 4/5]

Kommentar verfassen

Du kannst auch mit einem deiner folgenden Profile kommentieren*:


* Zustimmung zur Datenschutzerklärung
Dieses Kommentarformular speichert Name, E-Mailadresse und Inhalt, sowie die IP-Adresse für maximal 60 Tage. Für detaillierte Informationen lies bitte unsere Datenschutzerklärung.
*

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert. - HTML ist erlaubt.Du kannst folgende HTML Tags und Attribute benutzen:
<a href="" title=""> <abbr title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strong> <pre style="" class="" title="" data-url=""> <span style="" class="" title="" data-url=""> .

Top
green

BILDSCHIRM OFF.
SPAREN ON!

Ein dunkler Monitor verbraucht im Gegensatz zu einem hellen bis zu 20% weniger Strom.
Daher spare ich jetzt Energie für dich.

Harrys Welt