Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Графика > GD не работает прибольших разрешениях изображений


Автор: Shar 25.3.2009, 14:52
Помогите!

Использую библиотек GD2 для ресайза больших изображений, но почему то не поддаются обработке изображения с большим расзрешением > 2000px, даже небольшие по весу при этом. Может есть какие то ограничения или аналогичные функции для работы с изображениями?

Автор: enof 25.3.2009, 14:58
Shar,  Памяти хватает?
включите вывод ошибок.

Автор: MoLeX 25.3.2009, 15:28
Код

error_reporting(E_ALL);

и весь мусор сюда

Автор: Shar 25.3.2009, 15:34
эта директива у моего чудо хостера отключена, как и файл .htaccess. Ошибках только в логах можно посмотреть

Добавлено через 4 минуты и 13 секунд
[Wed Mar 25 07:33:04 2009] [error] [client 93.81.50.37] PHP Fatal error:  Allowed memory size of 16777216 bytes exhausted (tried to allocate 9996 bytes) in /home/newauto/public_html/resize2.php on line 132, referer: http://www.****ru/car.php?damping=run&type=car&location=foreign&mark=2900&model=3503&id=3503

Насколько я понимаю вот эта строка из лога и есть причина, как аз броблема с памятью. Какие будут возможные пути решения?

Автор: enof 25.3.2009, 15:41
Цитата(Shar @  25.3.2009,  15:34 Найти цитируемый пост)
Насколько я понимаю вот эта строка из лога и есть причина, как аз броблема с памятью. Какие будут возможные пути решения? 

Shar, судя по 
Цитата(Shar @  25.3.2009,  15:34 Найти цитируемый пост)
чудо хостера

никак.

Автор: Shar 25.3.2009, 15:44
Ну а все таки может какие то параметры изменить можно?

Автор: enof 25.3.2009, 15:48
Shar, Это ограничение устанавливается в php.ini
Если вам даже error_reporting и htaccess запретили, то наврятли изменят ограничение на используемую память.

Автор: Shar 25.3.2009, 15:58
ну я попробую договориться, подскажите какой оптимальный размер памяти нужно установить?

Автор: skyboy 25.3.2009, 16:04
дело в том, что jpeg - "запакованный" поток. напрямую его не обработаешь. максимум - скопировать область в другую картинку. потому надо предварительно его "распаковать". в jpeg размер "упакованных" данных  зависит от самих данных - одни сжимаются плохо, другие – отлично. в случае с распакованными данными(предлполагаю, т.к. исходники GD не смотрел), размер данных в памяти зависит в первую очередь от разрешения. решения, кроме увеличения памяти, не вижу.

Автор: enof 25.3.2009, 19:58
Цитата(skyboy @  25.3.2009,  16:04 Найти цитируемый пост)
размер данных в памяти зависит в первую очередь от разрешения

Высота*Ширина*5

Цитата(Shar @  25.3.2009,  15:58 Найти цитируемый пост)
подскажите какой оптимальный размер памяти нужно установить? 

Считайте сами, сколько вам понадобится памяти.
Картинка 2000*2000 занимает около 20 метров.

Автор: MoLeX 26.3.2009, 07:01
Shar, вывод:
- беги от этого хостера

Автор: Shar 26.3.2009, 09:48
Цитата(enof @  25.3.2009,  19:58 Найти цитируемый пост)
Считайте сами, сколько вам понадобится памяти.Картинка 2000*2000 занимает около 20 метров.


делов том что картинки с таким разрешением занимают у меня часто менее 1мб, например с мобильника сделанные, но скрипт и их не может обработать

Автор: skyboy 26.3.2009, 12:29
Цитата(Shar @  26.3.2009,  08:48 Найти цитируемый пост)
делов том что картинки с таким разрешением занимают у меня часто менее 1мб

Цитата(skyboy @  25.3.2009,  15:04 Найти цитируемый пост)
дело в том, что jpeg - "запакованный" поток. напрямую его не обработаешь. максимум - скопировать область в другую картинку. потому надо предварительно его "распаковать".

или ты замеряешь, сколько твоя картинка занимает уже в памяти, а не на диске?

Автор: enof 26.3.2009, 14:28
Цитата(Shar @  26.3.2009,  09:48 Найти цитируемый пост)
дело в том что картинки с таким разрешением занимают у меня часто менее 1мб

Выше прочитайте. Без разницы, сколько у вас картинка занимает места на жестком диске.
В памяти будет занято h*w*5. Проверить это можете так:
http://www.huddletogether.com/projects/lightbox2/images/image-2.jpg
600 x 450 - 65k
600*450*5 = 1350000 = 1.3 мб.
Код

<?php
echo memory_get_usage()."<br>"; //49096
$img = imagecreatefromjpeg("http://www.huddletogether.com/projects/lightbox2/images/image-2.jpg");
echo memory_get_usage()."<br>"; //1418924
//1418924 - 49096 = 1369828
?>

Автор: solenko 26.3.2009, 16:31
Цитата(enof @  26.3.2009,  13:28 Найти цитируемый пост)
В памяти будет занято h*w*5

Откула берется 5? Я всегда думал что для чпега h*w*глубину_цвета (или как это правильно называется?)
Т.е. 256 цветов -- h*w*1
32 бита глубины -- h*w*4

Автор: enof 26.3.2009, 18:10
Цитата(solenko @  26.3.2009,  16:31 Найти цитируемый пост)
Откула берется 5?

На основе тестов smile 
Посмотрел исходники, не все так просто, как я думал smile   smile 

Автор: skyboy 26.3.2009, 18:40
Цитата(enof @  26.3.2009,  17:10 Найти цитируемый пост)
не все так просто, как я думал

поделись с более ленивыми smile Неужто, индексированный цвет даже в imagetruecolor?

Автор: enof 26.3.2009, 19:44
Цитата(skyboy @  26.3.2009,  18:40 Найти цитируемый пост)
поделись с более ленивыми

да я там совсем запутался что к чему( с с/с++ у меня все плохо).

Автор: kruglov 10.9.2009, 08:39
Тоже есть такая проблема. Подскажите, в php.ini для увеличения объема памяти для обработки изображения нужно менять параметр memory_limit?

Автор: IZ@TOP 10.9.2009, 09:47
kruglov, если вы знаете правильный ответ, зачем спрашиваете? Если есть идея - нужно проверить, а потом уже задавать вопросы.

Автор: kruglov 10.9.2009, 23:53
IZ@TOP, я не знал, теперь проверил. Спасибо форуму за советы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)