Bildgröße abfragen
Jörg Wittemeier
- cgi
Hallo !
Gibt es eine Möglichkeit per cgi die Bildgröße (in Pixel, nicht kb) eines gif bzw jpg Bildes abzufragen?
Jörg
Hi,
Gibt es eine Möglichkeit per cgi die Bildgröße (in Pixel, nicht kb) eines gif bzw jpg Bildes abzufragen?
ja, allerdings mußt Du dazu entweder das Grafikformat erlernen oder ein Modul benutzen, dessen Programmierer Dir diese Arbeit abgenommen haben ;-)
Ich schlage Image::Size vor, das klingt jedenfalls ganz gut. Download wie bei jedem Modul über http://www.perl.com/CPAN/, Installation und Benutzung wie bei jedem Modul gemäß mitgelieferter Anleitung.
Cheatah
Hi
Beim GIF-Bild liegen die Grössenangaben in Byte 7-10 der Datei. Dabei sind die Bytes 7+8 die Bildbreite (im Little-Endian-Format) und Byte 9+10 die Bildhöhe (auch in Little-Endian).
Nicht wahr, Cheatah ;-))
P.S: Näheres findet man im Forumsarchiv Ende Januar 1999 zum Thema GIF-Format.
Grüsse
Tom
Hi,
Beim GIF-Bild liegen die Grössenangaben in Byte 7-10 der Datei. Dabei sind die Bytes 7+8 die Bildbreite (im Little-Endian-Format) und Byte 9+10 die Bildhöhe (auch in Little-Endian).
Nicht wahr, Cheatah ;-))
P.S: Näheres findet man im Forumsarchiv Ende Januar 1999 zum Thema GIF-Format.
:-)
Klar, stimmt schon (ungeprüft, aber es wird schon passen *g*). Das hilft bei JPEG allerdings nicht weiter - das Format ist aber bei http://www.wotsit.org beschrieben. Wenn Dir die Mühe nichts ausmacht, _sehr_ exakt zu arbeiten, ist die manuelle Prüfung vermutlich sogar der bessere Weg. Es ist dennoch nicht schlecht, sich an den Gebrauch von Modulen zu gewöhnen.
Nun ja, jedem das Seine :-)
Cheatah
Hallo !
Hab lange gesucht und doch gefunden. :-))
Der Byte-Ansatz von Tom hat mich dazugebracht ein Script zu suchen, was diesem Lösungsansatz gerecht wird.
Ich fand ein Script, welches zufällig vorh. Bilder (gif und jpg) per SSI rauswirft, und wie in der Beschreibung bemerkt wurde, mit Angabe der Größe!!
Hier der modifizierte Teil:
#!/usr/bin/perl
##################################################
##################################################
print "Content-Type: text/html\n\n" ;
$picname="/servers/inter/domain/www/sm/file_up/18banner.jpg";
if ($picname =~ /.gif/i) {
open (GIF , "<$picname") ;
undef $/;
$gifs=<GIF> ;
close(GIF) ;
($width,$height)=&gifsize($gifs) ;
$fsize=length($gif);
} elsif ($picname =~ /.jpg/i) {
open (JPG , "$picname") ;
undef $/;
$jpg=<JPG> ;
close(JPG) ;
$pic_temp="$$picname";
($width,$height)=&jpegsize($jpg) ;
$fsize=length($jpg);
}
print "width: $width<br>";
print "height: $height<br>";
print "size: $fsize<br>";
exit;
############################################################################
############################################################################
sub gifsize {
my ($GIF)=@_;
my ($type,$a,$b,$c,$d,$s,$width,$height) ;
$type=substr($GIF,0,6);
if(!($type =~ m/GIF8[7,9]a/) (length($s=substr($GIF, 6, 4))!=4) ){
return;
}
($a,$b,$c,$d)=unpack("C"x4,$s);
$width= $b<<8$a;
$height= $d<<8$c;
return ($width,$height);
}
############################################################################
############################################################################
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;
}
}
}
############################################################################
Vielen Dank an Euch.
Jörg