如何使用PHP和GD获取以字节为单位的图像资源大小?

时间:2010-10-26 12:03:52

标签: php image gd

我正在使用php gd调整图像大小。结果是我想要上传到Amazon S3的图像资源。如果我先将图像存储在磁盘上但我想直接从内存上传它们,它的效果很好。如果我只知道图像的字节大小,那是可能的。

是否有某种方法可以获取gd图像资源的大小(以字节为单位)?

5 个答案:

答案 0 :(得分:12)

你可以使用PHP的memory i/o stream来保存图像,然后以字节为单位获取大小。

你做的是:

$img = imagecreatetruecolor(100,100);
// do your processing here
// now save file to memory
imagejpeg($img, 'php://memory/temp.jpeg'); 
$size = filesize('php://memory/temp.jpeg');

现在您应该知道尺寸

我不知道任何(gd)方法来获取图像资源的大小。

答案 1 :(得分:9)

我无法在php:// memory with imagepng上写,所以我使用ob_start(),ob_get_contents()结束ob_end_clean()

$image = imagecreatefrompng('./image.png'); //load image
// do your processing here
//...
//...
//...
ob_start(); //Turn on output buffering
imagejpeg($image); //Generate your image

$output = ob_get_contents(); // get the image as a string in a variable

ob_end_clean(); //Turn off output buffering and clean it
echo strlen($output); //size in bytes

答案 2 :(得分:7)

这也有效:

$img = imagecreatetruecolor(100,100);

// ... processing

ob_start();              // start the buffer
imagejpeg($img);         // output image to buffer
$size = ob_get_length(); // get size of buffer (in bytes)
ob_end_clean();          // trash the buffer

现在$size将以字节为单位。

答案 3 :(得分:0)

您可以查看以下答案以寻求帮助。它适用于php中的通用内存更改。 虽然可能涉及开销,但可能更多的是估计。

Getting size of PHP objects

答案 4 :(得分:-1)

将图像文件以所需格式保存到tmp目录,然后在从磁盘上传到S3之前使用filesize()http://php.net/manual/de/function.filesize.php