Как получить размер ресурса изображения в байтах с 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. Хотя, поскольку накладные расходы могут быть связаны, это может быть больше оценки.
сохраните файл изображения в нужном формате в директории tmp, а затем используйте filesize ()http://php.net/manual/de/function.filesize.php перед загрузкой на S3 с диска.