Как получить размер ресурса изображения в байтах с PHP и GD?

Я изменяю размер изображений с помощью php gd. Результатом являются ресурсы изображений, которые я хочу загрузить в Amazon S3. Он отлично работает, если я сначала сохраняю изображения на диске, но я хотел бы загрузить их непосредственно из памяти. Это возможно, если я просто знаю размер изображения.

есть ли способ получить размер (в байтах) ресурса изображения gd?

5 ответов


вы можете использовать PHP памяти ввода/вывода в поток сохранить изображение, а затем получить размер в байтах.

что вы делаете это:

$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) для получения размера ресурса изображения.


Я не могу писать на php: / / memory с imagepng, поэтому я использую 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

Это также работает:

$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 будет ваш размер в байтах.


вы можете посмотреть ответ на помощь. Он работает для общих изменений памяти в php. Хотя, поскольку накладные расходы могут быть связаны, это может быть больше оценки.

получение размера объектов PHP


сохраните файл изображения в нужном формате в директории tmp, а затем используйте filesize ()http://php.net/manual/de/function.filesize.php перед загрузкой на S3 с диска.