Я изменяю размеры изображений с помощью php gd. Результатом являются ресурсы изображений, которые я хочу загрузить на Amazon S3. Он отлично работает, если я сначала храню изображения на диске, но я хотел бы загрузить их непосредственно из памяти. Это возможно, если я просто знаю размер байта изображения.
Есть ли способ получить размер (в байтах) ресурса изображения gd?
Вы можете использовать поток ввода / вывода памяти 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: // память с помощью 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
Сохраните файл изображения в нужном формате в dmp dmp, а затем используйте файлize () http://php.net/manual/de/function.filesize.php, прежде чем загружать его на S3 с диска.