Frage zu Image::Magick
$xNeTworKx
- perl
0 Sebastian0 AndreasW0 $xNeTworKx0 AndreasW
Hallo,
Ich habe zur Probe mal ein kleines Script gemacht, daß Fotos verkleinern soll :
#!/usr/bin/perl -w
use strict;
use Image::Magick;
use Image::Size;
my $image = Image::Magick->new;
my $img = $image->Read( filename=>'alt1.jpg' );
my ($x, $y) = imgsize('alt1.jpg');
my ($width, $height) = sprintf("%d %d", $x * .15, $y * .15);
$img = $image->Resize($width x $height);# Diese Zeile funktioniert nicht
$img = $image->Write( filename=>'smallalt1.jpg' );
das Problem ist, daß diese Zeile irgendwie keinen dynamischen Inhalt annehmen kann. Das Script funktioniert wunderbar wenn ich 2 fixe Werte dort hineinschreibe, also zB $img = $image->Resize('80x53'); , aber wenn es dymaisch sein soll, bekomme ich nur Fehlermeldungen wie : Argument "" isnt numeric in repeat (x), oder Use of uninitialized value in repeat (x). Was kann ich da tun ?
Hallo $xNeTworKx,
probiers doch mal mit:
$img = $image->Resize('$width x $height');
dann müsste es funktionieren...
Sebastian
Hallo,
$img = $image->Resize('$width x $height');
nein, leider auch nicht =(, so bleibt das Bild in der selben Größe, irgendwie klar, weil die Variablen mit ' nicht interpretiert werden.
$xNeTworKx.
Tach
Ich habe zur Probe mal ein kleines Script gemacht, daß Fotos verkleinern soll :
??????
$img = $image->Resize($width x $height);# Diese Zeile funktioniert nicht
das Problem ist, daß diese Zeile irgendwie keinen dynamischen Inhalt annehmen kann. Das Script funktioniert wunderbar wenn ich 2 fixe Werte dort hineinschreibe, also zB $img = $image->Resize('80x53');
weil $width x $height
was anderes ist als '80x53', selbst wenn 80 und 53 in den Variablen drinsteht.
$width."x".$height ergibt da was ähnlicheres ;-)
Abgesehen davon verstehe ich schon nicht, was Du mit
my ($width, $height) = sprintf("%d %d", $x * .15, $y * .15);
bewirken willst.
wie wäre es mit
my ($width, $height) = ($x * .15, $y * .15);
$img = $image->Resize($width."x".$height);
?
Ich kenn das Image::Magick nicht, aber Du sagst ja, daß '80x53' funktioniert...
Andreas
Hallo,
das Problem ist, daß diese Zeile irgendwie keinen dynamischen Inhalt annehmen kann. Das Script funktioniert wunderbar wenn ich 2 fixe Werte dort hineinschreibe, also zB $img = $image->Resize('80x53');
weil $width x $height
was anderes ist als '80x53', selbst wenn 80 und 53 in den Variablen drinsteht.
$width."x".$height ergibt da was ähnlicheres ;-)
Wenn ich es so mache, produziert Pwerl eine Endlosschleife, weis auch nicht warum. Ich habe schon so ziemlich alle Variationen ausprobiert, aber ohne Erfolg.
Abgesehen davon verstehe ich schon nicht, was Du mit
my ($width, $height) = sprintf("%d %d", $x * .15, $y * .15);
bewirken willst.
Ich will $width und %height auf ganze Zahlen runden. Ich weis ja nicht ob sich Längen und Höhenangaben, die in etwa so aussehen 80.3 x 60.2 mit der Methode $image->Resize vertragen. Sollte nur dazu dienen einen Fehlerbereich mal auszuschalten.
$xNeTworKx.
Hallo,
das Problem ist, daß diese Zeile irgendwie keinen dynamischen Inhalt annehmen kann. Das Script funktioniert wunderbar wenn ich 2 fixe Werte dort hineinschreibe, also zB $img = $image->Resize('80x53');
weil $width x $height
was anderes ist als '80x53', selbst wenn 80 und 53 in den Variablen drinsteht.
$width."x".$height ergibt da was ähnlicheres ;-)
Wenn ich es so mache, produziert Pwerl eine Endlosschleife, weis auch nicht warum. Ich habe schon so ziemlich alle Variationen ausprobiert, aber ohne Erfolg.
Abgesehen davon verstehe ich schon nicht, was Du mit
my ($width, $height) = sprintf("%d %d", $x * .15, $y * .15);
bewirken willst.
Ich will $width und %height auf ganze Zahlen runden. Ich weis ja nicht ob sich Längen und Höhenangaben, die in etwa so aussehen 80.3 x 60.2 mit der Methode $image->Resize vertragen. Sollte nur dazu dienen einen Fehlerbereich mal auszuschalten.
Das tut es aber nicht. sprintf gibt EINEN String zurück, der an das erste Listenelement der linken Liste (d.h. an $width) zugewiesen wird.
$height wird dabei nichts zugewiesen.
Mach doch
$param =
sprintf("%dx%d", $x * .15, $y * .15);
und übergib dann $param an die Methode.
Hallo,
Mach doch
$param =
sprintf("%dx%d", $x * .15, $y * .15);
und übergib dann $param an die Methode.
Es funktioniert jetzt. Scheint so, daß es wirklich irgendwie daran lag, daß es ein String anstatt einer Zahl war. also wegen dem sprintf .
So sieht es nun aus.
my $image = Image::Magick->new;
my $img = $image->Read( filename=>'alt1.jpg' );
my ($x, $y) = imgsize('alt1.jpg');
my ($width, $height) = ($x * .15, $y * .15);
$img = $image->Resize("$width x $height");
$img = $image->Write(filename=>'smallalt1.jpg' );
P.S. So wie es scheint, rundet das Modul die Zahlen automatisch, rauf bzw runter.
$xNeTworKx.