我正在使用php gd调整图像大小。结果是我想要上传到Amazon S3的图像资源。如果我先将图像存储在磁盘上但我想直接从内存上传它们,它的效果很好。如果我只知道图像的字节大小,那是可能的。
是否有某种方法可以获取gd图像资源的大小(以字节为单位)?
答案 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中的通用内存更改。 虽然可能涉及开销,但可能更多的是估计。
答案 4 :(得分:-1)
将图像文件以所需格式保存到tmp目录,然后在从磁盘上传到S3之前使用filesize()http://php.net/manual/de/function.filesize.php。