imagecreate* и выделяемая под ресурс память

SiMM

Новичок
imagecreate* и выделяемая под ресурс память

Задался вопросом, сколько же всё же выделяется памяти под ресурс при использовании GD? В мануале прямого ответа на этот вопрос не нашёл (может плохо искал?). Понятно, что всё зависит от физических размеров изображения - высоты и ширины. Раньше предполагал, что по 1 байту на каждую составляющую (RGB), потом вдруг вспомнил о возможности присутствия альфаканала (ещё байт). Однако эксперимент показал несколько необычный результат.
PHP:
$f = "testfile.jpg";
$b = memory_get_usage();
$i = imagecreatefromjpeg($f);
$e = memory_get_usage();
echo ($e-$b)/imagesx($i)/imagesy($i);
Попробовал на разных картинках с большими размерами (1024x768, к примеру). В итоге всегда получал значение чуть большее 5, т.е. на каждый пиксель уходит по 5 байт? Или я что-то упустил?
 

SiMM

Новичок
> расположение точки
А это ещё что за зверь? Номер в палитре?
И, всё же, хотелось бы ссылки на официальный источник информации, где это чётко расписано.
 

Bermuda

Новичок
Re: imagecreate* и выделяемая под ресурс память

Пусть имеем изображение 1024х768 в формате JPEG. В обычном JPEG (не CMYK) глубина цвета 24 бита на точку, это три байта. Итого должно выделяться _не_менее_ 1024х768х3 = 2359296 байт.
Примерно прикинуть можно, а сколько реально выделяется сказать трудно.

SiMM
Раньше предполагал, что по 1 байту на каждую составляющую (RGB)
А почему не по 2, не по 3? Вот например для GIF нужно только 8 бит на точку, учитывая что кадр один, в противном случае помножить на количество кадров.
 

SiMM

Новичок
> А почему не по 2, не по 3?
Потому что проще написать программу, которая работает с одним фиксированным форматом, получая его из входного/преобразуя в выходной, что, как я предполагаю, и было сделано (бесспорно, могу ошибаться - поправьте, если это не так - собственно, цель этого топика и была в том, чтобы узнать истину).

> исходники gd посмотри
Образования и опыта не хватает. Уже обращался на lxr.php.net смотреть модуль gd.
 

Bermuda

Новичок
Автор оригинала: SiMM
> А почему не по 2, не по 3?
Потому что проще написать программу, которая работает с одним фиксированным форматом, получая его из входного/преобразуя в выходной, что, как я предполагаю, и было сделано.
IMHO, при обработке, например, GIF-а занимать память аж на 3 байта на каждую точку, это очень щедро. Хотя кто его знает, может разработчики не поскупились ;)
 
Сверху