Dies ist ein Querverweis von Perl Monks und Mahalo Antworten, wo ich noch keine zufriedenstellende Antwort erhalten habe. Vielen Dank für Ihre Zeit und Geist:Was bewirkt, dass die scaleX-Methode der Imager-Klasse fehlschlägt?
Warum erhalte ich diese Fehlermeldung aus perl
:
Can't call method "scaleY" on an undefined value at C:/strawberry/perl +/site/lib/ Image/Seek.pm line 137?
ich den Fehler im Titel bekommen, wenn das Bild Aufruf :: Sucht Modul von meinem Skript. Mein Skript ist im Grunde eine Neuaufbereitung des vom Modul vorgeschlagenen Codes.
Hier ist der Fehler wieder:
Can't call method "scaleY" on an undefined value at C:/strawberry/perl +/site/lib/ Image/Seek.pm line 137.
Hier ist mein Code:
#!/usr/local/bin/perl
use Imager;
use Image::Seek qw(loaddb add_image query_id savedb);
loaddb("haar.db");
my $img = Imager->new("photo-1.jpg")
or die Imager->errstr;
# my $img = Imager->new();
# $img->open(file => "photo-1.jpg")or die Imager->errstr;
add_image($img, 1);
savedb("haar.db");
Hier ist der Abschnitt des Bildes :: Sucht Modul das Problem verursacht:
sub add_image_imager {
my ($img, $id) = @_;
my ($reds, $blues, $greens);
require Imager;
my $thumb = $img->scaleX(pixels => 128)->scaleY(pixels => 128);
for my $y (0..127) {
my @cols = $thumb->getscanline(y => $y);
for (@cols) {
my ($r, $g, $b) = $_->rgba;
$reds .= chr($r); $blues .= chr($b); $greens .= chr($g);
}
}
addImage($id, $reds, $greens, $blues); }
Linie 137 ist:
my $thumb = $img->scaleX(pixels => 128)->scaleY(pixels => 128);
Wenn ich entfernen
->scaleY(pixels => 128)
dann Linie 129:
my @cols = $thumb->getscanline(y => $y);
gibt mir im Wesentlichen den gleichen Fehler.
An dieser Stelle versuche ich nur ein Bild zur Datenbank hinzuzufügen. Es gibt ein Bild in dem Verzeichnis, in dem ich das Skript ausführe, um das Bild namens "photo-216.jpg" hinzuzufügen. Wenn ich den Namen in "photo-1.jpg" oder "photo-0.jpg" ändere und die entsprechenden "add_image" und "query_id" auf 1 oder 0 ändere, ist das Ergebnis dasselbe.
Ich habe eine Datenbank, die 385 KB groß ist, die aus Ausführen von makedb.pl unten kommt, aber es ist mit Null-Zeichen gefüllt. Ich habe dieses "haar.db" umbenannt. Dies ist die Datenbank, die mir den Fehler gibt. Wenn ich die haar.db Datei als eine leere neu erstellen, dann hängt das Skript und nach ein paar Minuten, es diese andere Botschaft geben:
"This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information."
Wenn es keine „haar.db“ ist immer noch die Datei gibt mir der Fehler im Titel dieses Beitrags und im Gegensatz zum Ausführen von makedb.pl, gibt mir keine Datenbank namens "haar.db".
Übrigens bekomme ich mehrere Beispiele für Titelfehler dieses Beitrags auch beim Versuch, dieses Datenbank-Füllskript auszuführen: http://www.drk7.jp/pub/imgseek/t/makedb.pl.txt/, auf das ich schon vorher anspielte. Ich habe offensichtlich die TXT-Erweiterung entfernt, bevor ich es versuchte. Das Skript "makedb.pl" stammt von dieser japanischen Website: http://www.drk7.jp/MT/archives/001258.html.
Wenn ich makedb.pl in einem Verzeichnis von 2423 eingescannte Sammler Briefmarken Briefmarken laufen lassen, bekomme ich 362 Instanzen des Fehlers. Die 2423 Briefmarken sind die Nummer, die ich habe, nachdem ich die "kleinen" Thumbnail-Versionen entfernt habe, von denen ich ursprünglich dachte, dass sie das Problem verursachen könnten.
Könnte es sein, dass einige der Bilder weniger als 128 Pixel sind und das ist das Problem? Wenn dies jedoch wahr ist, warum wird die Datenbank mit Null-Zeichen gefüllt? ... Es sei denn, sie sind nicht wirklich null, obwohl der Editor, den ich benutze, Notebook ++, sagt, dass sie es sind.
Auch meine Bilder sind von Briefmarken, die nur manchmal perfekte Quadrate sind. Ansonsten sind sie manchmal "Landschaft", manchmal "Porträt". Vielleicht ist das Problem, wenn die "Landschaft" skalierten Bilder eine X-Achse von 128 Pixeln bekommen und dann ihre Y-Achse weniger oder viel weniger endet. Kann das sein?
Dank viel
** Immer ** "' string verwenden; '" und "' Warnungen verwenden; '". –
@socrtwo Ich mag die Strawberry Anstrengung, aber es scheint mir, dass Sie eine Menge Frustration vermeiden könnten, indem Sie AS Perl für jetzt verwenden. Wie auch immer, viel Glück mit Ihrem Projekt. –