Homepage Inspire-world | Forum
CGI/Perl Workshops Bildgröße und Dateigröße ermitteln

 Inhaltsverzeichnis/Codeschnipsel Übersichtsseite/Bildgröße und Dateigröße ermitteln
Mit diesem hier vorgestellten Script kann man Bildgröße in Breite und Höhe bestimmen sowie die Dateigröße in KB ermitteln. Dies kann nützlich sein wenn man bei einem Dateiupload entscheiden möchte ob von dem Bild nur ein Platzhalterbild gezeigt werden soll oder gleich das richtige Bild.

Auch ist es kein Problem das ganze zum skalieren von (Vorschau)Bildern zu nutzen, oder auch dazu um Datein zu löschen die bestimmte Werte überschreiten.
Hier das komplette Beispiel Script
#!/usr/bin/perl
# Bildgroessenabmessungen auslesen

# Fehlermeldungen an Browser ausgeben
use CGI::Carp qw(fatalsToBrowser);
#-------------------------------------------#
# Konfiguration 
# Zum testen Pfad und URL anpassen
$bildpfad = "/homepages/1/d13475935/htdocs/mgb";
$bildurl = "http://www.inspire-net.de/mgb";

# Aufruf des Bildes, hier zur Demonstration per Query String
$picture = $ENV{'QUERY_STRING'};

#-------------------------------------------#
# Dateistatistik einbinden zur Darstellung der Dateigroesse
($dateigroesse) = (stat("$bildpfad/$picture"))[7];
#-------------------------------------------#
# Welcher Bildtyp ist es denn?
# Ist es ein GIF ...
if ($picture =~ /\.gif/i) {

open (GIF , "<$bildpfad/$picture") ;		
undef $/;
$gifs=<GIF> ;
close(GIF) ;
# Dateigroesse 
$groesse = sprintf("%.2f", $dateigroesse / 1024);
($width,$height)=&gifsize($gifs) ;

# ... oder JPG
} elsif ($picture =~ /\.jpg/i) {

open (JPG , "$bildpfad/$picture") ;	
undef $/;
$jpg=<JPG> ;
close(JPG) ;
# Dateigroesse
$groesse = sprintf("%.2f", $dateigroesse / 1024);		
($width,$height)=&jpegsize($jpg) ;

# ... oder PNG?
} elsif ($picture =~ /\.png/i) {

open (PNG , "$bildpfad/$picture") ;	
undef $/;
$PNG=<PNG> ;
close(PNG) ;
# Dateigroesse
$groesse = sprintf("%.2f", $dateigroesse / 1024);
($width,$height)=&pngsize($PNG) ;

}
#-------------------------------------------#
# Ausgabe des HTML Parts
#-------------------------------------------#
print "Content-type: text/html\n\n";

print qq~
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
<META http-equiv="Content-Type" content="text/html">
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">

<title>Bildgröße auslesen</title>

</head>
<body>

<font face="Verdana, Arial" size="2">

<a href="http://www.inspire-net.de/cgi-bin/pixelsize.pl?smilimap.gif">smilimap.gif</a><br>
<a href="http://www.inspire-net.de/cgi-bin/pixelsize.pl?text.png">text.png</a><br>
<a href="http://www.inspire-net.de/cgi-bin/pixelsize.pl?bg.jpg">bg.jpg</a><br>
<br><br>


Die Datei "$picture" hat eine Breite von: 
<b>$width</b> Pixeln, 
und eine Höhe von <b>$height</b> Pixeln.<br><br>

<img src="$bildurl/$picture" width="$width" height="$height" 
alt="Die Datei $picture hat eine Breite von $width, und eine Höhe von $height Pixeln.">
<br>Das Bild hat <b>$groesse</b> KB.
</font>
</body>
</html>
~;

exit;



#-------------------------------------------#
# Breite und Hoehe der GIF Datei ermitteln
#-------------------------------------------#

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);
}

#-------------------------------------------#
# Breite und Hoehe der JPG Datei ermitteln
#-------------------------------------------#

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;
}
}   
}
#-------------------------------------------#
# Breite und Hoehe der PNG Datei ermitteln
#-------------------------------------------#

sub pngsize {

my $Buffer = shift;
my ($width,$height) = ( undef, undef );

if ($Buffer =~ /IHDR(.{8})/) {
my $PNG = $1;
($width,$height) = unpack( "NN", $PNG );
} else { print "Datei ist keine gueltige PNG Datei\n"; };
return ($width,$height);
};

#-------------------------------------------#


So schaut dann die Ausgabe aus:



 Zum Inhaltsverzeichnis/Codeschnipsel Übersichtsseite/Bildgröße und Dateigröße ermitteln
Autor: Helmut Walter Homepage Inspire-world Fragen, Anregungen und Hinweise bitte in das Forum

Valid HTML 4.0! Valid CSS!