Bilder verkleinern mit Perl und GD Library

Thumbnails oder einfach kleinere Bilder die auch gedreht sein können

Während in PHP diese Dinge mit Built-In-Funktionen erledigt werden können, ist es für Perl erforderlich daß die GD-Library installiert ist. Und so wird sie eingebunden, schlicht und einfach mit:

use GD;

Mit dem Bild was verkleinert werden soll, wird ein GD-Objekt erstellt womit auch die gegebenen Abmessungen ermittelt werden können. Damit werden die Abmessungen für das Kleinbild berechnet, wobei die neue Breite einfach nur vorgegeben wird. Damit wird ein neues GD-Objekt erstellt für das Kleinbild und auf dieses Objekt wird dann das Original kopiert.

# GD-Objekt aus dem Original my $gdori = GD::Image->newFromJpeg($path); # gegebene Höhe und Breite ermitteln my ($width,$height) = $gdori->getBounds(); # die neue Breite wird vorgegeben my $newwidth = $W; # berechne den Ratio und damit die neue Höhe my $rat = $width/$newwidth; my $newheight = $height/$rat; # nun kann das GD-Objekt für das Kleinbild erstellt werden my $gdthumb = new GD::Image($newwidth, $newheight); # Das Original wird auf das neue Objekt kopiert $gdthumb->copyResized($gdori,0,0,0,0,$newwidth,$newheight,$width,$height);

Falls das Bild gedreht werden muß, darüber gibt die Angabe der Orientation in den Exif-Daten eine Auskunft.

# evntl muß noch gedreht werden my $orientation = eval{ my $xf = Exif->new($f->read); $xf->{TiffTags}{Orientation}; } || 1; if($orientation == 8){ $gdthumb = $gdthumb->copyRotate270() } elsif($orientation == 6){ $gdthumb = $gdthumb->copyRotate90() } elsif($orientation == 3){ $gdthumb = $gdthumb->copyRotate180() }

Schließlich wird die Binary als PNG-Datei erzeugt, die weitere Verarbeitung hängt von der Anwendung ab (Speichern als Datein, Ausgabe im Browser usw.):

$binary = $gdthumb->png;

Datenschutzerklärung: Diese Seite dient rein privaten Zwecken. Auf den für diese Domäne installierten Seiten werden grundsätzlich keine personenbezogenen Daten erhoben. Das Loggen der Zugriffe mit Ihrer Remote Adresse erfolgt beim Provider soweit das technisch erforderlich ist. s​os­@rolf­rost.de.