Skript zum Bearbeiten eines Bildes
Gerd
- perl
Hallo,
ich benötige ein Perl-Skript, das jpg-Bilder in der Größe ändert,
z.B. auf eine bestimmte Breite von 100 Pixeln, zwecks Einsparung
von Speicherplatz und Ladezeit.
Ich kenne mich nun mit dieser Materie nicht so aus, wie sind
diese Dateien aufgebaut, wie arbeitet der Kompressions-
algorithmus ?
Puh, viele Fragen auf einmal, kann mir jemand helfen etwa
durch Benennung einer entsprechenden Website und/oder einem
Beispielcode ?
Vielen Dank und Gruß
Gerd.
Hallo Gerd,
ich benötige ein Perl-Skript, das jpg-Bilder in der Größe ändert,
z.B. auf eine bestimmte Breite von 100 Pixeln, zwecks Einsparung
von Speicherplatz und Ladezeit.
Es gibt afaik keine Perl-eigenen Lösungen zur Grafikbearbeitung, nur Module, die als Schnittstelle zu verschiedenen Grafik-Programmen fungieren. Als Beispiel sei das Programm Image Magick (http://www.imagemagick.org/) genannt. Auf der Downloadseite findest du auch die API für Perl, das Modul Image::Magick, nebst Anleitung (http://www.imagemagick.org/www/perl.html).
mfg Siechfred
Hallo,
ich benötige ein Perl-Skript, das jpg-Bilder in der Größe ändert,
z.B. auf eine bestimmte Breite von 100 Pixeln, zwecks Einsparung
von Speicherplatz und Ladezeit.
Hab ich.
Beispielcode ?
Ja, mit Hilfe des Modules GD, weil ich unter Linux Image::Magick große Schwierigkeiten beim Installieren hatte.
Du benötigst zusätzlich das Modul GD. Nachteil: Mit GD kannst du keine gifs bearbeiten.
#!/usr/bin/perl -w
use strict;
use GD;
my $verkleinerungsfaktor = 6;
opendir(DIR,'.') or die "Cant open directory : $!\n";
while (defined($_ = readdir(DIR))) {
if ($_ =~ /^.+?.jpg$/i) {
push @grafiken, $_;
}
}
closedir DIR;
my $anzahl = @grafiken;
for (my $i = 0; $i < $anzahl; $i++) {
my $image = newFromJpeg GD::Image($grafiken[$i]);
my($srcW,$srcH) = $image->getBounds();
my($destW,$destH) = ($srcW /$verkleinerungsfaktor, $srcH / $verkleinerungsfaktor);
my $smallimage = new GD::Image($destW,$destH);
$smallimage->copyResized($image,0,0,0,0,$destW,$destH,$srcW,$srcH);
my $picdata = $smallimage->jpeg(50);
open (PIC,">small" . $grafiken[$i]) or die "$!\n";
binmode PIC;
print PIC $picdata;
close PIC;
oder eine Lösung mit Image::Magick und Image::Size (Diese Module musst du auch zusätzlich installieren)
#!/usr/bin/perl -w
use strict;
use Image::Magick;
use Image::Size;
my @grafiken = ();
my $verkleinerungsfaktor = 2.5;
opendir(DIR,'.') or die "Cant open directory : $!\n";
while (defined($_ = readdir(DIR))) {
if ($_ =~ /^.+?.jpg$/i) {
push @grafiken, $_;
}
}
closedir DIR;
foreach (@grafiken) {
my $image = Image::Magick->new;
my $img = $image->Read(filename=>$_);
my ($x, $y) = imgsize($_);
my ($width, $height) = ($x / $verkleinerungsfaktor, $y / $verkleinerungsfaktor);
$img = $image->Resize("$width x $height");
$img = $image->Write(filename=>$_);
}
Du musst die Scripte natürlich auf deine Vorhaben anpassen.
Lies auch zusätzlich http://search.cpan.org/author/LDS/GD-2.06/GD.pm um das erste Script zu verstehen, und die Möglichkeiten von GD zu erkennen.
$xNeTworKx.
Beim ersten Script wurde ein Abschließendes } am Ende des Scripts vergessen.