Get Image Height and Width as integer values?
I’ve tried to use the PHP function getimagesize, but I was unable to extract the image width and height as an integer value. How can I achieve this?
6 Answers 6
list($width, $height) = getimagesize('path_to_image');
- You specify the correct image path there
- The image has read access
- Chmod image dir to 755
Also try to prefix path with $_SERVER[«DOCUMENT_ROOT»] , this helps sometimes when you are not able to read files.
Yes. 777 means read, write and execute right for owner, group, and all. You need read and execute right to access a directory, but you don’t need write right; and you also don’t need that right for everybody. 755 should be fine for every access where you don’t need to create files inside of the directory.
Interesting to me that you need execute rights on the directory but not the image itself (works with the image on 644).
list($width, $height) = getimagesize($filename)
$data = getimagesize($filename); $width = $data[0]; $height = $data[1];
getimagesize() returns an array containing the image properties.
list($width, $height) = getimagesize("path/to/image.jpg");
to just get the width and height or
list($width, $height, $type, $attr)
to get some more information.
imageCreateFromPNG($var); //I don't know where from you get your image, here it's in the png case // and then : list($width, $height) = getimagesize($image); echo $width; echo $height;
Don’t work: getimagesize() expects parameter 1 to be string, resource given , function getimagesize expects filename
PHP’s getimagesize() returns an array of data. The first two items in the array are the two items you’re interested in: the width and height. To get these, you would simply request the first two indexes in the returned array:
var $imagedata = getimagesize("someimage.jpg"); print "Image width is: " . $imagedata[0]; print "Image height is: " . $imagedata[1];
For further information, see the documentation.
php how to get web image size in kb?
php how to get web image size in kb? getimagesize only get the width and height. and filesize caused waring .
$imgsize=filesize("http://static.adzerk.net/Advertisers/2564.jpg"); echo $imgsize;
Warning: filesize() [function.filesize]: stat failed for http://static.adzerk.net/Advertisers/2564.jpg Is there any other way to get a web image size in kb?
7 Answers 7
Short of doing a complete HTTP request, there is no easy way:
$img = get_headers("http://static.adzerk.net/Advertisers/2564.jpg", 1); print $img["Content-Length"];
You can likely utilize cURL however to send a lighter HEAD request instead.
Make sure your HTTP client is not sending any headers saying it accepts gzipped HTTP responses, or else the Content-Length will be wrong because the server will send compressed data back.
@Darien: Excellent catch! Luckily get_headers sends a pretty plain HTTP/1.0 request. But for cURL this would need more diligence.
This sometimes returns an array: Array ( [0] => 0 [1] => 103823 ) How do I handle that? get_headers($imageURL, 1)[«Content-Length»] where $imageURL is s-media-cache-ak0.pinimg.com/originals/23/bb/f3/…
Not sure about using filesize() for remote files, but there are good snippets on php.net though about using cURL.
That sounds like a permissions issue because filesize() should work just fine.
php > echo filesize("./9832712.jpg"); 1433719
Make sure the permissions are set correctly on the image and that the path is also correct. You will need to apply some math to convert from bytes to KB but after doing that you should be in good shape!
Here is a good link regarding filesize()
You cannot use filesize() to retrieve remote file information. It must first be downloaded or determined by another method
Using Curl here is a good method:
You can use also this function
else < //else jump back where we were before leaving and exit loop fseek($fh, -1048576, SEEK_CUR); break; >> //we could make $count jumps, so the file is at least $count * 1.000001 MB large //1048577 because we jump 1 MB and fgetc goes 1 B forward too $size = bcmul("1048577", $count); //now count the last few bytes; they're always less than 1048576 so it's quite fast $fine = 0; while(false !== ($char = fgetc($fh))) < $fine ++; >//and add them $size = bcadd($size, $fine); fclose($fh); return $size; > ?>
GD and Image Functions
The image sharpen function (by Alex R. Austin) provided below seems to be very resource hungry and I couldn’t make it work on two different servers — trying to sharpen a 413 x 413 image I ended up with «Fatal error: Allowed memory size of 8388608 bytes exhausted» or «Internal Server Error» or the script terminated without notice. Because I had no priviliges to change the default memory limit on these servers I started looking for other sharpen functions. I have come across a php Unsharp Mask function which works like a charm on both of the servers I dealt with. It can be found at http://vikjavev.no/hovudsida/umtestside.php.
Representation decimal of a color in hexadecimal for use on functions of library GD.
// Representation hexadecimal
$var = ‘#FFFFFF’ ;
function getRgbFromGd ( $color_hex )
return array_map ( ‘hexdec’ , explode ( ‘|’ , wordwrap ( substr ( $color_hex , 1 ), 2 , ‘|’ , 1 )));
print_r ( getRgbFromGd ( $var ));
// Output: Array ( [0] => 255 [1] => 255 [2] => 255 )
If you happen to need a way to output a Windows BMP file (e.g. when using the PEAR ExcelWriter), feel free to use the following code:
function imagebmp ( $im , $fn = false )
if (! $im ) return false ;
if ( $fn === false ) $fn = ‘php://output’ ;
$f = fopen ( $fn , «w» );
if (! $f ) return false ;
//Image dimensions
$biWidth = imagesx ( $im );
$biHeight = imagesy ( $im );
$biBPLine = $biWidth * 3 ;
$biStride = ( $biBPLine + 3 ) & ~ 3 ;
$biSizeImage = $biStride * $biHeight ;
$bfOffBits = 54 ;
$bfSize = $bfOffBits + $biSizeImage ;
//BITMAPFILEHEADER
fwrite ( $f , ‘BM’ , 2 );
fwrite ( $f , pack ( ‘VvvV’ , $bfSize , 0 , 0 , $bfOffBits ));
//BITMAPINFO (BITMAPINFOHEADER)
fwrite ( $f , pack ( ‘VVVvvVVVVVV’ , 40 , $biWidth , $biHeight , 1 , 24 , 0 , $biSizeImage , 0 , 0 , 0 , 0 ));
$numpad = $biStride — $biBPLine ;
for ( $y = $biHeight — 1 ; $y >= 0 ; — $y )
for ( $x = 0 ; $x < $biWidth ; ++ $x )
$col = imagecolorat ( $im , $x , $y );
fwrite ( $f , pack ( ‘V’ , $col ), 3 );
>
for ( $i = 0 ; $i < $numpad ; ++ $i )
fwrite ( $f , pack ( ‘C’ , 0 ));
>
fclose ( $f );
return true ;
>
?>
It works the same way as regular imagejpeg/imagepng do and only supports GD2.0 true colour bitmaps (which is what’s required by ExcelWriter).
I wrote a simple function to convert an image resource to PGM (portable graymap) in order to feed it to an OCR program. It works just like the rest of the image output functions, and will convert to grayscale for you:
function imagepgm ( $image , $filename = null )
$pgm = «P5 » . imagesx ( $image ). » » . imagesy ( $image ). » 255\n» ;
for( $y = 0 ; $y < imagesy ( $image ); $y ++)
for( $x = 0 ; $x < imagesx ( $image ); $x ++)
$colors = imagecolorsforindex ( $image , imagecolorat ( $image , $x , $y ));
$pgm .= chr ( 0.3 * $colors [ «red» ] + 0.59 * $colors [ «green» ] + 0.11 * $colors [ «blue» ]);
>
>
if( $filename != null )
$fp = fopen ( $filename , «w» );
fwrite ( $fp , $pgm );
fclose ( $fp );
>
else
return $pgm ;
>
>
?>
I know this might look somewhat superfluous to others, but i once came across a situation where i needed a *strong* blur on an image without having ImageMagick installed. Executing the convolution-filter several times on the same image is awfully slow and still doesn’t give a good blur.
The function below accepts a truecolor-image and a blur-factor between 0.0 and 1.0. Beware: It’s still quite slow.
function blurImage ( $srcimg , $blur )
$blur = $blur * $blur ;
$blur = max ( 0 , min ( 1 , $blur ));
$srcw = imagesx ( $srcimg );
$srch = imagesy ( $srcimg );
$dstimg = imagecreatetruecolor ( $srcw , $srch );
$cr = 0 ; $cg = 0 ; $cb = 0 ;
$nr = 0 ; $ng = 0 ; $nb = 0 ;
$rgb = imagecolorat ( $srcimg , 0 , 0 );
$or = ( $rgb >> 16 ) & 0xFF ;
$og = ( $rgb >> 8 ) & 0xFF ;
$ob = ( $rgb ) & 0xFF ;
$nr = ( $cr * $f1a ) + ( $or * $f1b );
$ng = ( $cg * $f1a ) + ( $og * $f1b );
$nb = ( $cb * $f1a ) + ( $ob * $f1b );
$rgb = imagecolorat ( $srcimg , 0 , $y );
$or = ( $rgb >> 16 ) & 0xFF ;
$og = ( $rgb >> 8 ) & 0xFF ;
$ob = ( $rgb ) & 0xFF ;
$x = $srcw ;
while ( $x —)
//horizontal
$rgb = imagecolorat ( $srcimg , $x , $y );
$cr = ( $rgb >> 16 ) & 0xFF ;
$cg = ( $rgb >> 8 ) & 0xFF ;
$cb = ( $rgb ) & 0xFF ;
$nr = ( $cr * $f1a ) + ( $or * $f1b );
$ng = ( $cg * $f1a ) + ( $og * $f1b );
$nb = ( $cb * $f1a ) + ( $ob * $f1b );
//vertical
$rgb = imagecolorat ( $dstimg , $x , $y + 1 );
$vr = ( $rgb >> 16 ) & 0xFF ;
$vg = ( $rgb >> 8 ) & 0xFF ;
$vb = ( $rgb ) & 0xFF ;
$nr = ( $nr * $f1a ) + ( $vr * $f1b );
$ng = ( $ng * $f1a ) + ( $vg * $f1b );
$nb = ( $nb * $f1a ) + ( $vb * $f1b );
$srcimg = imagecreatefromjpeg ( «test.jpg» );
$dstimg = blurImage ( $srcimg , 0.2 );
header ( ‘Content-type: image/jpeg’ );
echo( imagejpeg ( $dstimg ) );
exit();
This is an example of get high resolution images.
/**
* Class name : resizeImage
* Created by : wang
* Description : This class is to resize the image from original size to new size
*/
class resizeImage
/**
* Function name : resize_img
* Description : This function is to resize image
* @param : $origimg variable is the original image
* @param : $newimg variable is the new image
* @param : $w variable is the width of image
* @param : $f variable is the height of image
*/
public function resize_img ( $origimg , $newimg , $w , $h ) $info = getimagesize ( $origimg );
$mime = $info [ ‘mime’ ];
// Make sure that the requested file is actually an image
if( substr ( $mime , 0 , 6 ) != ‘image/’ )
header ( ‘HTTP/1.1 400 Bad Request’ );
return ‘Error: requested file is not an accepted type: ‘ . $origimg ;
exit();
>
// Check they extention of image
$extension = image_type_to_extension ( $info [ 2 ]);
if( strtolower ( $extension ) == ‘.png’ ) $img = $this -> resize_imagepng ( $origimg , $w , $h );
imagepng ( $img , $newimg );
imagedestroy ( $img );
>elseif( strtolower ( $extension ) == ‘.jpeg’ ) $img = $this -> resize_imagejpeg ( $origimg , $w , $h );
imagejpeg ( $img , $newimg );
imagedestroy ( $img );
>elseif( strtolower ( $extension == ‘.gif’ )) $img = $this -> resize_imagegif ( $origimg , $w , $h );
imagegif ( $img , $newimg );
imagedestroy ( $img );
>
>
/**
* End function name : resize_img
*/
/**
* Function name : resize_imagepng
* Description : This function is to resize png image
* @param : $file variable is the original image
* @param : $w variable is the width of image
* @param : $f variable is the height of image
*/
private function resize_imagepng ( $file , $w , $h ) list( $width , $height ) = getimagesize ( $file );
$src = imagecreatefrompng ( $file );
$dst = imagecreatetruecolor ( $w , $h );
imagecopyresampled ( $dst , $src , 0 , 0 , 0 , 0 , $w , $h , $width , $height );
return $dst ;
>
/**
* End function name : resize_imagepng
*/
/**
* Function name : resize_imagejpeg
* Description : This function is to resize jpeg image
* @param : $file variable is the original image
* @param : $w variable is the width of image
* @param : $f variable is the height of image
*/
private function resize_imagejpeg ( $file , $w , $h ) list( $width , $height ) = getimagesize ( $file );
$src = imagecreatefromjpeg ( $file );
$dst = imagecreatetruecolor ( $w , $h );
imagecopyresampled ( $dst , $src , 0 , 0 , 0 , 0 , $w , $h , $width , $height );
return $dst ;
>
/**
* End function name : resize_imagejpeg
*/
/**
* Function name : resize_imagegif
* Description : This function is to resize gif image
* @param : $file variable is the original image
* @param : $w variable is the width of image
* @param : $f variable is the height of image
*/
private function resize_imagegif ( $file , $w , $h ) list( $width , $height ) = getimagesize ( $file );
$src = imagecreatefromgif ( $file );
$dst = imagecreatetruecolor ( $w , $h );
imagecopyresampled ( $dst , $src , 0 , 0 , 0 , 0 , $w , $h , $width , $height );
return $dst ;
>
/**
* End function name : resize_imagegif
*/
>
/**
* End class name : resizeImage
*/
?>