#samaa rutiinia käytetty aiemmin nimellä imgsize sub jpgkoko { my($kuva) = @_; my($jpgkoko); if(open(STRM, "<".$kuva)){ binmode( STRM ); ($jpgleveys,$jpgkorkeus) = &jpegsize(\*STRM); $jpgkoko = qq| width="$jpgleveys" height="$jpgkorkeus" |; } else {$jpgkoko = ""} close(STRM); return($jpgkoko,$jpgleveys,$jpgkorkeus); } sub jpegsize {#kutsutaan jpgkoko rutiinista my($JPEG) = @_; #kuva sisään binäärimuodossa my($done)=0; my($c1,$c2,$ch,$s,$length, $dummy)=(0,0,0,0,0,0); my($a,$b,$c,$d); if(defined($JPEG) && #tarkistetaan että jotain tuli read($JPEG, $c1, 1) && #luetaan alusta kaksi tavua read($JPEG, $c2, 1) && ord($c1) == 0xFF && #tarkistetaan että ne ovat jpg alkutavut ord($c2) == 0xD8 ){ while (ord($ch) != 0xDA && !$done) { #etsitään DA while (ord($ch) != 0xFF) { return(0,0) unless read($JPEG, $ch, 1); } #luetaan tavu jpgstä FF:ään asti while (ord($ch) == 0xFF) { return(0,0) unless read($JPEG, $ch, 1); } #ylitetään muut FF:t if ((ord($ch) >= 0xC0) && (ord($ch) <= 0xC3)) { #seuraava tavu on välillä C0-C3 return(0,0) unless read ($JPEG, $dummy, 3); #luetaan kolme tavua pois return(0,0) unless read($JPEG, $s, 4); #luetaan neljä tavua ($a,$b,$c,$d)=unpack("C"x4,$s); #koko on tässä return ($c<<8|$d, $a<<8|$b ); } else { return(0,0) unless read ($JPEG, $s, 2); ($c1, $c2) = unpack("C"x2,$s); $length = $c1<<8|$c2; last if (!defined($length) || $length < 2); read($JPEG, $dummy, $length-2); } } } return (0,0); } 1;