Bildgröße mit Perl auslesen (Code schon da, aber fehlerhaft)
Torwächter
- perl
0 Cheatah0 Torwächter0 Cheatah
0 hektor gjini
Hallo zusammen,
nachdem mir verschiedene Leute schon versucht haben zu helfen, die Lösung aber nur über Module zu handhaben war, habe ich nun einen Scriptstring aus einem Script ausgeschnitten.
Das Problem ist nur, dass nur gifs richtig berechnet werden, nicht aber jpgs.
Das Script:
#======================================
open (JPG , "$pic_dir/$pic") ;
undef $/;
$jpg=<JPG> ;
close(JPG) ;
#---
$pic_temp="$pic_dir/$pic";
#---
($width,$height)=&jpegsize($jpg) ;
$fsize=length($jpg);
#======================================
sub jpegsize {
my ($JPEG)=@ _ ;
my ($count)=2 ;
my ($length)=length($JPEG) ;
my ($ch)="" ;
my ($c1,$c2,$a,$b,$c,$d,$width,$height) ;
#---
while (($ch ne "\xda") && ($count<$length)) {
while (($ch ne "\xff") && ($count < $length)) {
$ch=substr($JPEG,$count,1);
$count++;
}
while (($ch eq "\xff") && ($count<$length)) {
$ch=substr($JPEG,$count,1);
$count++;
}
if ((ord($ch) >= 0xC0) && (ord($ch) <= 0xC3)) {
$count+=3;
($a,$b,$c,$d)=unpack("C"x4,substr($JPEG,$count,4));
$width=$c<<8|$d;
$height=$a<<8|$b;
return($width,$height);
} else {
($c1,$c2)= unpack("C"x2,substr($JPEG,$count,2));
$count += $c1<<8|$c2;
}
}
}
Über eure Hilfe würde ich mich sehr freuen.
Greetings
Torwächter
Hi,
nachdem mir verschiedene Leute schon versucht haben zu helfen, die Lösung aber nur über Module zu handhaben war,
was spricht dagegen, Image::Size einzusetzen? Exakt dafür ist das Modul da.
habe ich nun einen Scriptstring aus einem Script ausgeschnitten.
Wenn dieses Script nicht "Image/Size.pm" heißt, würde ich es mit Vorsicht handhaben.
my ($JPEG)=@ _ ;
Ähm, bist Du sicher, dass Du richtig kopiert hast? Mir ist irgendwie relativ klar, warum es hier Probleme gibt. Insgesamt ist der Code übrigens mindestens stilistisch nicht wirklich gut - Du solltest Image::Size einsetzen.
Cheatah
Ich weiß, Image::Size wäre sehr gut, doch leider bin ich bei Kontent.de (zumindest die Bilder u. Scripte) die lassen mich keine Module installieren.
Allzuviel spricht doch nicht gegen das Decoden des Bildercodes, oder ?
---
Ich hab nun nochmal den Code verbessert "@ _"-Fehler behoben usw.
Nun werden aber nicht in allen jpgs die Größen richtig ausgegeben, warum das ?
Greetings
Torwächter
Hi,
Ich weiß, Image::Size wäre sehr gut, doch leider bin ich bei Kontent.de (zumindest die Bilder u. Scripte) die lassen mich keine Module installieren.
dann ist Kontent.de nicht der Provider Deiner Wahl.
Allzuviel spricht doch nicht gegen das Decoden des Bildercodes, oder ?
Wenn man weiß wie es geht - nein. Image::Size macht schließlich exakt das gleiche.
Ich hab nun nochmal den Code verbessert "@ _"-Fehler behoben usw.
Nun werden aber nicht in allen jpgs die Größen richtig ausgegeben, warum das ?
Weil der Entwickler des Codes sich nicht so gut auskannte wie der von Image::Size. Möglicherweise stecken auch noch weitere Syntax- oder andere Fehler drin - wer weiß das schon? Augenscheinlich ist der Code nicht ideal; die Suche nach dem Fehler bedingt, dass Du das JPEG-Format _verstehst_, und ergo den Code genauso gut (oder besser) selbst schreiben könntest.
Damit Du das nicht zu tun brauchst, gibt es Image::Size.
Cheatah
P.S.: Übrigens ist Image::Size laut cpan.org "Rdpf?", das "p" steht für "reiner Perl-Code". Das bedeutet: Wenn Du eigene Perl-Scripts verwenden kannst, kannst Du auch dieses Modul installieren.
Hi,
nachdem mir verschiedene Leute schon versucht haben zu helfen, die Lösung aber nur über Module zu handhaben war,
was spricht dagegen, Image::Size einzusetzen? Exakt dafür ist das Modul da.
habe ich nun einen Scriptstring aus einem Script ausgeschnitten.
Wenn dieses Script nicht "Image/Size.pm" heißt, würde ich es mit Vorsicht handhaben.
my ($JPEG)=@ _ ;
Ähm, bist Du sicher, dass Du richtig kopiert hast? Mir ist irgendwie relativ klar, warum es hier Probleme gibt. Insgesamt ist der Code übrigens mindestens stilistisch nicht wirklich gut - Du solltest Image::Size einsetzen.
Cheatah