Image::magick produziert nur grottenschlechte Bilder...
$xNeTworKx
- perl
0 Cruz
Hola,
zum ersten bin ich froh, dass das Forum wieder online ist, da ich seit Tagen mit anderen Foren nicht mehr bei meinem Problem weiterkomme und ihr seit jetzt sozusagen meine letzte Hoffnung.
Also ich habe ein kleines Script, dass mir Bilder (die später mal geuploadet werden) verkleinern soll. Ich brauche Image::Magick, da GD ja keine Gifs bearbeiten kann und Imager bei meinem Provider nicht installiert ist.
Das vom Script produzierten Bilder sind für die Katz, aber ich weiß nicht wieso. Hier 2 Beispiele:
Vorher: http://test.acid4u.com/test/ax396.jpg
Nachher: [lin:http://test.acid4u.com/test/ax396neu.jpg]
Vorher: http://test.acid4u.com/test/pic05.jpg
Nachher: http://test.acid4u.com/test/pic05neu.jpg
Hier mal das Script:
#!/usr/bin/perl -w
use strict;
use Image::Magick;
use Image::Size;
use CGI::Carp qw(fatalsToBrowser);
my @grafiken = ();
opendir (DIR,'.') or die "Cant open directory : $!n";
while (defined($_ = readdir DIR)) {
if ($_ =~ /^.+?.(jpe?g|gif|png)$/) {
push @grafiken, $_;
}
}
closedir DIR;
print "Content-type:text/html\n\n";
foreach(@grafiken) {
my $image = Image::Magick->new;
my $img = $image->Read($_);
my ($x, $y) = imgsize($_);
my ($filename,$extension) = ($1,$2) if $_ =~ /^(.+?).(jpe?g|gif|png)$/;
my ($width, $height) = ($x * .5, $y * .5);
$img = $image->Resize("$width x $height");
$img = $image->Write($filename.'neu.'.$extension);
}
print "DONE\n";
Was ich schon probiert habe, aber mit den selben Ergebnissen:
Statt Resize, Scale() probiert.
Statt Resize, Sample() probiert.
$image->Set(quality=>100) ausprobiert, aber da produzierte es entweder ein Bild mit Größe 0 oder wenn ich $img->Set... schrieb, bekam ich eine Fehlermeldung:
Can't call method "Set" without a package or object reference at ..... line 27, da ich nicht mal weiß, wo ich dieses Set überhaupt im Script anwenden soll, bei $image, oder $img und wo? Auf jeden Fall schien Set-> auch sowieso nixcht zu klappen.
Desweiteren weiß ich, dass es auch ohne diese Sachen, die ich bis jetzt probiert habe, funktioniert hat, weil als ich mir kurz Linux installierte, musste ich meine Scripts zu GD ändern, da man auf Linux anscheinend ein Profi sein musste um Image::Magick zu installieren. Dummerweise habe ich diese Scripts nicht mehr, wo ich nachschaun hätte können. Ich weiß auf jeden Fall, dass es so einfach, wie das obere Script war, aber wie man an den Bilder sehen kann, produziert es nur Mist, aber warum? Ich hoffe jemand hat hier noch irgendwelche Tips, weil ich weiß seit Tagen nicht mehr weiter.
$xNeTworKx.
Hallo Mensch mit kryptischen Namen,
probier doch mal ImageMagick ohne API direkt über Kommandozeile anzusprechen. Ich mache das seit je her so und hatte noch nie Probleme.
Syntax:
########################################################################################################################
sub generate_thumbnail
{
my $width = $_[0];
my $height = $_[1];
my $path = $_[2];
my $filename = $_[3];
my $thumbnail = "t_$filename";
my $ret = system("cp $path/$filename $path/$thumbnail");
if ($ret != 0)
{
die("generate_thumbnail: Could not duplicate image $!");
}
$ret = system("mogrify -geometry '" . $width . "x" . $height . ">' $path/$thumbnail");
if ($ret != 0)
{
die("generate_thumbnail: Could not create thumbnail $!");
}
return $thumbnail;
}
Gruß,
Cruz
Hi,
danke, aber ich weiß, dass das Script mal auch so funktioniert hat und es muss so funktionieren, da ich es später, wie ich schon sagte, benötige. Selbst wenn es aus der Kommandozeile funktionieren würde, hilft mir das leider bei meinem Script nicht viel weiter, da ich nicht weiß, was daran falsch ist.
$xNeTworKx.