Re: GetImageSize problem

From: Date: Sun, 21 Jan 2001 15:47:01 +0000
Subject: Re: GetImageSize problem
References: 1 2 3  Groups: php.general 
Request: Send a blank email to php-general+get-35901@lists.php.net to get a copy of this message
If you reaaaaaaaally don't like the text jumping you can do a little script that can parse the width and height for each image, I mean get this info from the html files... But you will have to pin point each one... The good thing that the script is here... <? ################################################# ## GetURLImageSize( $urlpic ) determines the ## dimensions of local/remote URL pictures. ## returns array with ( $width,$height,$type ) ## ## Thanks to: Oyvind Hallsteinsen aka Gosub / ELq - gosub@elq.org ## for the original size determining code ## ## PHP Hack by Filipe Laborde-Basto Oct 21/2000 ## FREELY DISTRIBUTABLE -- use at your sole discretion! :) Enjoy. ## (Not to be sold in commercial packages though, keep it free!) ## Feel free to contact me at fil@rezox.com (http://www.rezox.com) ################################################# define(GIF_SIG, "\x47\x49\x46"); define(JPG_SIG, "\xff\xd8\xff"); define(PNG_SIG, "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a"); define(JPG_SOF0, "\xc0"); /* Start Of Frame N */ define(JPG_SOF1, "\xc1"); /* N indicates which compression process */ define(JPG_SOF2, "\xc2"); /* Only SOF0-SOF2 are now in common use */ define(JPG_SOF3, "\xc3"); define(JPG_SOF5, "\xc5"); /* NB: codes C4 and CC are NOT SOF markers */ define(JPG_SOF6, "\xc6"); define(JPG_SOF7, "\xc7"); define(JPG_SOF9, "\xc9"); define(JPG_SOF10, "\xca"); define(JPG_SOF11, "\xcb"); define(JPG_SOF13, "\xcd"); define(JPG_SOF14, "\xce"); define(JPG_SOF15, "\xcf"); define(JPG_EOI, "\xd9"); /* End Of Image (end of datastream) */ define(JPG_SOS, "\xda"); /* Start Of Scan - image data start */ define(RD_BUF, 512); /* amount of data to initially read */ function GetURLImageSize( $urlpic $fd= @fopen($urlpic,"r"); fd){ #read in 1k, enough for GIF,PNG. #continue to read from file, if the JPG chunk exceeds this $imgData = fread( $fd,RD_BUF ); if( substr($imgData,0,3)==GIF_SIG $dim =unpack ("v2dim",substr($imgData,6,4) ); $width=$dim["dim1"]; $height=$dim["dim2"]; $type = 1; } elseif( substr($imgData,0,8)==PNG_SIG $dim =unpack ("N2dim",substr($imgData,16,8) ); $width=$dim["dim1"]; $height=$dim["dim2"]; $type = 3; } elseif( substr($imgData,0,3)==JPG_SIG ################# JPG CHUNK SCAN #################### $imgPos = 2; $type = 2; $buffer = RD_BUF-2; while($imgPos < strlen($imgData)) /* synchronize to the marker 0xFF */ $imgPos=strpos(&$imgData,0xFF,$imgPos)+1; $marker = $imgData[$imgPos]; do { $marker = ord($imgData[$imgPos++]); } while ($marker == 255); /* find dimensions of block */ switch (chr($marker)) /* Grab width/height from SOF segment (these are acceptable chunk types) */ case JPG_SOF0: case JPG_SOF1: case JPG_SOF2: case JPG_SOF3: case JPG_SOF5: case JPG_SOF6: case JPG_SOF7: case JPG_SOF9: case JPG_SOF10: case JPG_SOF11: case JPG_SOF12: case JPG_SOF13: case JPG_SOF14: case JPG_SOF15: $dim =unpack ("n2dim",substr($imgData,$imgPos+3,4) ); $height=$dim["dim1"]; $width=$dim["dim2"]; break 2; file://found it so exit case JPG_EOI: case JPG_SOS: return FALSE; /* End loop in case we find one of these markers */ default: /* We're not interested in other markers */ $skiplen = (ord($imgData[$imgPos++])<<8)+ord($imgData[$imgPos++])-2; /* if the skip is more than what we've read in, read more */ $buffer -= $skiplen; if( $buffer<512 ){ #if the buffer of data is too low,read more file. $imgData .= fread( $fd,$skiplen+1024 ); $buffer += $skiplen+1024; }; $imgPos += $skiplen; break; }; file://endif check marker type }; file://endif loop through JPG chunks }; file://endif chk for valid file types # got the pic dimensions, close the file fclose ($fd); return array( $width,$height,$type ); } else return array( '','','' ); }; file://endif valid file pointer chk }; // end function ?> Rom ----- Original Message ----- From: Sue Bailey <sue@bartandsue.co.uk> To: Romulo Roberto Pereira <php@diffdev.com> Cc: php-general <php-general@lists.php.net> Sent: Sunday, January 21, 2001 10:35 AM Subject: Re: [PHP] GetImageSize problem Thanks Rom - I can get the pics with an img src tag, which is why I assumed that GetImageSize would also work - but now I'm told it only works on the local machine, so I guess I'll have to live with text jumping about while pics download. :( Romulo Roberto Pereira wrote: > > Hello! > > First - some ISP block you from get files from their server by a httpd > request (that is what php does... I think!). To be sure if this is set or > not, in the other ISP (not the one that the images are) write a simple html > like this: > > <html><head><title>loading images between > servers</title></head><body> > <br><br> > <img > src="http://Domain/ImagesDir/ImagesName.gif"> > </body></html> > > In "http://Domain/ImagesDir/ImagesName.gif" be sure > to put the correct > domain and location of the image. > > This should show the image... If not you could have two problems: the link > is wrong or the filter is set. > > Imagine this - I have a web site in an ISP with my domain like: > http://www.mydomain.com and all the paths are gting the images > from a free > server like geocities.com so I don;t expend money on buying large amounts of > bandwith for my site... If you think this way you know why they do that. > > if this works, just use thi path > "http://Domain/ImagesDir/ImagesName.gif" in > all your scripts for getimagesize... > > I expect that this helps. > > Rom > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, e-mail: php-general-unsubscribe@lists.php.net > For additional commands, e-mail: php-general-help@lists.php.net > To contact the list administrators, e-mail: php-list-admin@lists.php.net

« previous php.general (#35901) next »