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

Posted

技术标签:

【中文标题】如何使用 PHP 和 GD 获取图像资源大小(以字节为单位)?【英文标题】:How to get image resource size in bytes with PHP and GD? 【发布时间】:2010-10-26 12:03:51 【问题描述】:

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

有没有办法获取 gd 图片资源的大小(以字节为单位)?

【问题讨论】:

【参考方案1】:

您可以使用 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) 方法可以获取图像资源的大小。

【讨论】:

问题是gd 函数需要一个路径而不是文件资源来写入。不过,这应该与 output buffering 一起使用。 @deceze:您应该能够提供如下路径:php://memory/resource=img.jpeg 啊,不错!这将使用双倍的内存,所以它不是最佳选择,而是一个不错的选择:)【参考方案2】:

我不能用imagepng在php://memory上写,所以我用ob_start(), ob_get_content() end 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

【讨论】:

为什么不像@JonathanWren 建议的那样使用ob_get_length【参考方案3】:

这也有效:

$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 将以字节为单位显示您的大小。

【讨论】:

谢谢。这对我有帮助,因为我需要一种无需上传即可确定文件大小的方法。【参考方案4】:

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

Getting size of PHP objects

【讨论】:

【参考方案5】:

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

【讨论】:

这里是英文版:php.net/manual/en/function.filesize.php :) 在磁盘上保存临时文件正是我在这里试图避免的。 为什么?这不是什么性能问题,而且可以节省大量内存。

以上是关于如何使用 PHP 和 GD 获取图像资源大小(以字节为单位)?的主要内容,如果未能解决你的问题,请参考以下文章

使用gd在php中调整图像大小后的黑色背景

PHP GD imagettftext 测量

如何使用 PHP 的 GD 库对图像执行接缝雕刻?

使用 PHP GD 调整图像大小并保存图像。这段代码有啥问题?

在 PHP 中调整 PHP GD 生成的图像的大小并显示它

使用 PHP GD lib 压缩和调整图像大小不适用于 png 和 jpg 的奇怪结果