Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
DebianLife
16 / 16 / 1
Регистрация: 13.12.2012
Сообщений: 191
#1

GD как узнать размер файла, в байтах, на выходе?

06.08.2013, 18:31. Просмотров 1227. Ответов 12
Метки нет (Все метки)

Всем привет!

Простенький пример:

Делаем привьюшку.
PHP
1
2
3
4
5
6
7
8
9
10
11
$src = 'file.jpg';
 
$src = imagecreatefromjpeg($src);
 
$new = imagecreatetruecolor(800, 600);
 
imagecopyresampled($new, $src, 0, 0, 20, 20, 800, 600, 200, 200);
 
header('Content-type: image/jpeg');
 
imagejpeg($new, null, 100);
Вопрос!!! Как узнать размер файла в байтах, на выходе?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2013, 18:31
Ответы с готовыми решениями:

Узнать размер файла более 4 ГБ
Мне нужно работать с разными файлами. Проблема в том, что функция filesize() от...

Узнать размер текста в байтах
Доброго времени суток мне необходимо узнать вес текста в байтах в переменной...

Как узнать размер файла?
Можете подсказать, какая функция показывает размер файла?

Как определить размер изображения в байтах?
Как определить размер изображения в байтах?

Подскажите как уменьшить размер изображения на выходе
Вот есть скрипт который создаёт с mp4 gif изображение. но на выходе получаеться...

12
Camaro396
38 / 38 / 13
Регистрация: 22.07.2013
Сообщений: 197
06.08.2013, 22:30 #2
Положить в Output buffer и вызвать ob_get_length
1
fier
128 / 13 / 6
Регистрация: 05.08.2013
Сообщений: 263
06.08.2013, 23:22 #3
Забавно, что вы именно накладываете изображение http://www.php.net/manual/ru/function.imagecopyresampled.php ,
но видимо вам так надо.
Я - бы сделал так:
создал изображение, а вторым параметрои у imagejpeg() поставил не null,
а какое-нибудь имя файла, потом ф-ей filesize() определил-бы его размер,
вывести размер можно после header'а, после <img src> с переданными get параметрами.
а изображение успешно удалить ф-ей unlink().
PHP
1
2
3
4
5
6
7
$im = imagecreate(100, 20);
$text_color = imagecolorallocate($im, 237, 65, 91);
imagestring($im, 1, 5, 5,  'Rape me', $text_color);
imagejpeg($im, 'rape.jpg');
imagedestroy($im);
$size=filesize('rape.jpg');//размер изображения
print $size;
Добавлено через 13 минут
Хотя, рациональней будет поместить файл в буфер обмена, и узнать его размер, как было сказано ранее.

Добавлено через 3 минуты
http://www.php.net/manual/ru/book.outcontrol.php
0
Camaro396
38 / 38 / 13
Регистрация: 22.07.2013
Сообщений: 197
06.08.2013, 23:28 #4
Не обмена, а вывода.
0
fier
128 / 13 / 6
Регистрация: 05.08.2013
Сообщений: 263
06.08.2013, 23:41 #5
Да, вы правы, ошибся.
0
DebianLife
16 / 16 / 1
Регистрация: 13.12.2012
Сообщений: 191
07.08.2013, 00:56  [ТС] #6
Цитата Сообщение от Camaro396 Посмотреть сообщение
Положить в Output buffer и вызвать ob_get_length
По поводу ob_get_length уже сам додумался ) Но мне этот вариант не подошел (( Потому что использовать можно только так

PHP
1
2
3
 ob_start();
imagejpeg($new, null, 100);
$filesize = ob_get_length();
А у меня файл, который создает изображение, работает в отдельном файле, и вызывается таким образом:

PHP
1
2
3
$request = 'engine/modules/create_image.php?id='.$id.'&type='.$type.'&src='.$src.'&wd='.$wd.'&hd='.$hd.'&x='.$x.'&y='.$y;
 
echo '<img src="'.$request.'" />';
И естественно, получить доступ к данным сгенерированным в том файле, возможности нет.


По поводу:

Я - бы сделал так:
создал изображение, а вторым параметрои у imagejpeg() поставил не null,
а какое-нибудь имя файла, потом ф-ей filesize() определил-бы его размер,
вывести размер можно после header'а, после <img src> с переданными get параметрами.
а изображение успешно удалить ф-ей unlink().
Это все понятно, и если бы нужно было сделать так, я бы и не спрашивал а легко это сам сделал )))) Но задумка как раз в том чтобы, не создавать новых файлов.

Смысл такой пользователь, вырезал из оригинала картинку, нажал скачать, ему выводится эта вырезанная область в новой вкладке, и я хотел вывести размер нового изображения и его вес. Таким образом и картинку отдал, и временных файлов не создавал, о которых потом еще нужно думать, и удалить картинку сразу нельзя, тогда она просто пользователю не откроется, а городить потом на сервере cron что бы он чистил раз в сутки временные файлы, или скрипт который будет проверять даты файлов и их удалять не особо хочется. Все должно быть автоматическое, без лишнего кода, и быстро работать ))) Как-то так.

Добавлено через 21 минуту
Забавно, что вы именно накладываете изображение http://www.php.net/manual/ru/functio...yresampled.php ,
но видимо вам так надо.
А как иначе? Этот скрипт, делает и привьюшки, при этом он масштабирует, и обрезает лишнее, что бы соответствовать соотношению сторон, допустим на сайте все картинки отображаются размером 300x200, а загружаются картинки все разные, что бы сделать привьюшки, нужно высчитать где сколько отрезать у оригинала, что бы довести его до тогоже соотношения, а потом его уменьшить. Также скрипт делает много чего другого, и все через эту функцию, вырезает произвольные картинки из оригинала, при этом может масштабировать или нет, по желанию клиента, при этом оставлять нужный клиенту размер, поворачивает изображение, делает ЧБ и т.д и т.п. По этому как без накладывания? Может я чего-то не знаю приведите пример буду благодарен. )) Я просто привел простенький пример, чтобы вам не читать десятки строк кода ))
0
fier
128 / 13 / 6
Регистрация: 05.08.2013
Сообщений: 263
07.08.2013, 22:38 #7
Т.е. у вас на сайте есть картинки разных разрешений (1366*700 ,1024*678, 800*600 и т.д.) , но вы их все выводите тегом <img> с заданным width и height, я правильно понимаю?
А посетителю вы сообщаете, какого они исходного разрешения?

Добавлено через 11 минут
Мне кажется, что можно попробовать <map>+jquery, т.е. определяете выбранную посетителем область с помощью jquery, а тег <area> предварительно динамически сгенерирован jquery или js, а потом создаёте <img> этой области, и предлагаете пользователю ну и т.д. , наверное можно только js...Правда, если у вас там много всего делает php, то придётся много переделывать.
0
DebianLife
16 / 16 / 1
Регистрация: 13.12.2012
Сообщений: 191
07.08.2013, 22:56  [ТС] #8
Цитата Сообщение от fier Посмотреть сообщение
Т.е. у вас на сайте есть картинки разных разрешений (1366*700 ,1024*678, 800*600 и т.д.) , но вы их все выводите тегом <img> с заданным width и height, я правильно понимаю?
А посетителю вы сообщаете, какого они исходного разрешения?

Добавлено через 11 минут
Мне кажется, что можно попробовать <map>+jquery, т.е. определяете выбранную посетителем область с помощью jquery, а тег <area> предварительно динамически сгенерирован jquery или js, а потом создаёте <img> этой области, и предлагаете пользователю ну и т.д. , наверное можно только js...Правда, если у вас там много всего делает php, то придётся много переделывать.
Нет, картинки загружаются разные ) Как правило больших размеров, при загрузки делаются 3 привьюшки разных размеров, и раскидываются по соответствующим папкам, также сохраняется оригиналы в свои папки, все это выводится на сайте в виде предпросмотра, в обычном виде. Но у пользователя есть возможность, открывать любую понравившуюся ему картинку, с помощью кропера, на JS + jquery, он вырезает нужную ему область, может ее масштабировать, не масштабировать, вращать, делать ЧБ и т.д. И вот когда он уже все настроил как ему нужно, нажимает скачать, и вот тут открывается новая вкладка, на которой идет HTML/CSS внутри которого выводится эта самая вырезанная им картинка, картинка которую он вырезал не сохраняется на сервере, она хранится только в памяти, и пользователю прямо из памяти отдается. Воть )))) И поэтому картинку нужно отдавать через скрипт, который вроде сам посебе как картинка, но он не картинка )))) Пользователь скачал, закрыл вкладку, и картинка которую он вырезал испарилась. Теперь понято? )
0
fier
128 / 13 / 6
Регистрация: 05.08.2013
Сообщений: 263
08.08.2013, 00:14 #9
Да, понятно, я хотел сказать, что можно (скорее всего) без наложения обойтись, а уже выводить готовое изображение, кстати, насчёт размера, может tmp вас спасут?
А может попробовать, предварительно для каждого изображения расчитывать размер любой его части, в любой из тех надстроек,которые у вас можно сотворить с вырезанным кусочком?

Добавлено через 10 минут
А если сложнее, то на c++ дополнить или написать библиотеку для php, чтобы определялся размер занятых изображением ячеек в памяти, но наверное оно того не стоит)
0
DebianLife
16 / 16 / 1
Регистрация: 13.12.2012
Сообщений: 191
08.08.2013, 00:21  [ТС] #10
Цитата Сообщение от fier Посмотреть сообщение
Да, понятно, я хотел сказать, что можно (скорее всего) без наложения обойтись, а уже выводить готовое изображение, кстати, насчёт размера, может tmp вас спасут?
В том то и дело, что не хочу делать временных файлов ) Так бы и проблем не было, потом просто узнать filesize(). Но я лучше не буду выводить размер файла, чем буду создавать временные файлы, о которых еще нужно заботиться, чтобы удалить, по крайней мере, способ удаления их сразу после открытия, я пока не придумал. Если подкинете мысль, как это сделать буду благодарен.

А может попробовать, предварительно для каждого изображения расчитывать размер любой его части, в любой из тех надстроек,которые у вас можно сотворить с вырезанным кусочком?
Хм, но как?

Добавлено через 3 минуты
А если сложнее, то на c++ дополнить или написать библиотеку для php, чтобы определялся размер занятых изображением ячеек в памяти, но наверное оно того не стоит)
Это уже перебор, а с++ я учил лет 15 назад, и уже не фига не помню Нет, нужно более простое решение, или тогда отказаться от вывода размера файла а просто показывать разрешение получившейся картинки, и хватит с них, конечно хотелось бы вывести размер, но что-то не фига придумать не могу
0
fier
128 / 13 / 6
Регистрация: 05.08.2013
Сообщений: 263
08.08.2013, 00:53 #11
Предварительно узнать размер оригинала и preview's при помощи php, ведь у вас картинки, скорее всего через панель администратора загружаются. А потом моделировать различные ситуации, сюда можно привлечь вычислительную математику, результаты заносить в базу, каждому результату придумать уникальное поле, которое можно будет связать с выделенной областью на картинке, это долгая, нерациональная, но интересная задача))
1
DebianLife
16 / 16 / 1
Регистрация: 13.12.2012
Сообщений: 191
08.08.2013, 01:02  [ТС] #12
Цитата Сообщение от fier Посмотреть сообщение
Предварительно узнать размер оригинала и preview's при помощи php, ведь у вас картинки, скорее всего через панель администратора загружаются. А потом моделировать различные ситуации, сюда можно привлечь вычислительную математику, результаты заносить в базу, каждому результату придумать уникальное поле, которое можно будет связать с выделенной областью на картинке, это долгая, нерациональная, но интересная задача))
Спасибо, но я сторонник простых но в тоже время эффективных решений, это долго, это сложно, это того не стоит, это расточительно )) Тут слишком много чего еще нужно разработать в движке, не на один месяц хватит работы, а если я из за этого стану замарачиваться, то еще на месяц можно дополнительно погрузиться ))) Высчитывать пиксели, их вес, и сколько у GD уходит ресурсов, сколько может весить каждый пиксель, с учетом необходимых обработок ))) Это ужас, я не великий математик )) Но все равно спасибо, любое мнение и совет, это пища для размышлений )
0
fier
128 / 13 / 6
Регистрация: 05.08.2013
Сообщений: 263
08.08.2013, 10:24 #13
Не за что)
0
08.08.2013, 10:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2013, 10:24

Как можно узнать размер динамической страницы
Здравствуйте, уважаемые форумчане. Погуглив не нашел ничего стоящего....

Как узнать размер странички cUrl
Помогите пожалуйста опредилить размер странички при помощи cUrl. У меня есть...

Как узнать размер в байтах графических объектов
Здравствуйте. Как программно узнать размер в байтах графических объектов -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru