Сколько Памяти потребуется при обработке изображения?

alex77

Новичок
Сколько Памяти потребуется при обработке изображения?

Здравствуйте.

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

Я хочу это для того, чтобы не получать ошибку при недостатке памяти на обработку изображения.

Спасибо.
 

fixxxer

К.О.
Партнер клуба
[m]getimagesize[/m]($filename)

$width * $height / 8 * $bits * $K

$K посчитай экспериментально ([m]memory_get_usage[/m]), ну или можешь примерно взять за 2
 

Вурдалак

Продвинутый новичок
$width * $height * 5 примерно.

-~{}~ 24.10.10 23:57:

fixxxer, откуда инфа, что GD при хранении изображения в памяти учитывает палитру оригинального изображения?
 

Вурдалак

Продвинутый новичок
Вот и по мне более логично 4, но когда-то проводил тест и выходило ближе к 5-ти. Я понимаю, что там есть какая-то дополнительная инфа, но вроде бы замеры делал на больших изображениях.

Проверь сам.
 

alex77

Новичок
Проверить надо, да.

Сейчас вот подумал, действительно, надо взять k=2, чтобы гарантированно не было ошибки.

Спасибо за помощь.
 

Вурдалак

Продвинутый новичок
alex77, э? Как это 2 будет гарантировать отсутствие ошибки, когда мы о 4-х и даже 5-ти говорим? :) Более того, вариант fixxxer'а может выдавать ещё меньше из-за "/8 * $bits".
 

alex77

Новичок
нене!
$width * $height * $bits / 8 * 2
ещё же $bits,
например картинка 100х100 true color, имеем следующее

100 * 100 * 32 / 8 * 2

-~{}~ 25.10.10 02:42:

выходит 8

-~{}~ 25.10.10 02:44:

я же только k=2 написал
 

Вурдалак

Продвинутый новичок
alex77, а теперь возьми какой-нибудь 256-цветный рисунок ($bits = 8). Сколько GD памяти израсходует? IMHO,
PHP:
$width * $height * 4
минимум. Проверю потом.
 

alex77

Новичок
для gif надо брать $k = .5 :)

тут понятно, что надо экспериментировать.
 

Вурдалак

Продвинутый новичок
alex77, я придерживаюсь пока такого мнения, что K не зависит от палитры исходного изображения.
 

alex77

Новичок
если любое изображение внутри GD обрабатывается как true color, то не зависит.

-~{}~ 25.10.10 03:00:

в книге "PHP5" Д.Котеров А.Костарев написано
"в памяти изображение хранится в распакованном виде наподобие BMP"
на c.580
 

fixxxer

К.О.
Партнер клуба
кстати про $bits надо смотреть, и правда что. Но там же есть imagecreate и imagecreatetruecolor, как минимум.

Но вообще проще взять и проверить :)
 

Вурдалак

Продвинутый новичок
Ну вот вариант fixxxer'а почти угадывает для GIF, но сильно занижает для JPEG. А мой, напротив, для GIF завышает, а для JPEG почти угадывает. :D

Но факт: исходное изображение учитывается.
 

Фанат

oncle terrible
Команда форума
я бы не пальцем считал, а потестировал реальные цифры, снимая использование памяти при ресайзе на нескольких разрешениях и попробовал бы вывести закономерность.
 

alex77

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

-~{}~ 25.10.10 03:19:

завтра видимо продолжу, уже 4-й час ночи пошел :(
 

Вурдалак

Продвинутый новичок
alex77, а чё париться — бери побольше, ты же не выделяешь память, а только лимит задаёшь. Зачем тебе так скрупулезно подсчитывать ожидаемое место в памяти?

-~{}~ 25.10.10 01:23:

Т.е. где-то $w * $h * 5 + $w_preview * $h_preview * 5 для верхней границы должно хорошо подойти.
 

Нубокот

Новичок
А imagick что, память не использует? %)
Тут, вроде, теоретический вопрос у человека %)
 

AmdY

Пью пиво
Команда форума
ага, но как правило не ту, тем самым обходится лимит и ошибки.
 
Сверху