Как я могу оценить размер файла изображения, используя его ширину и высоту? - PullRequest
0 голосов
/ 07 октября 2011

Недавно я написал программу для изменения размера изображений с использованием php, которая работает, загружая изображения с другого сервера, изменяя их размер и сохраняя их на нашем собственном.

Плохая новость заключается в том, что моя учетная запись хостинга допускает ограничение php-памяти только 64 МБ, и это просто не настроено для изменения размеров файлов HUUUUGE, которые загружает мой клиент (3–4 МБ). Он выдает фатальную ошибку, если встречает эти изображения и нарушает сценарий.

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

Я могу получить ширину и высоту изображения перед его загрузкой, используя getimagesize(), и если бы я мог использовать эту информацию для определения общего размера файла, я мог бы выделить его до того, как программа для изменения размера изображения начнет работать и дополнить изображение. с хорошей альтернативой «нет изображения».

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

Ответы [ 4 ]

3 голосов
/ 07 октября 2011

Изображение в памяти всегда имеет одинаковый вес, сжатый в формате JPEG, GIF или BMP.Это называется BIT-MAP.Итак, если вы хотите вычислить размер изображения в памяти, для получения веса в битах укажите ширину, высоту и размер бита, разделите их на 8, и вы получите байт.

$ByteSize = Width*Heigh*(24/8)

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

0 голосов
/ 07 октября 2011

Размер всегда будет зависеть от формата. При сжатии изображений размер самого изображения не влияет на размер файла. Единственный способ получить хорошее считывание размера файла - это использовать растровый (или схожий) формат.

Например, JPEG может иметь размер 10 МБ, а затем при повороте только 1 МБ из-за того, как работает сжатие.

0 голосов
/ 07 октября 2011

до загрузки на сервер вы не можете с php, но вы можете использовать JavaScript!

https://developer.mozilla.org/en/DOM/File

будет работать в сочетании с и мгновенно предоставит размер файла, используя

fileInput.files[0].fileSize

прочитайте это:

https://developer.mozilla.org/en/Using_files_from_web_applications http://hacks.mozilla.org/2009/12/multiple-file-input-in-firefox-3-6/

надеюсь, это поможет!

0 голосов
/ 07 октября 2011

Умножение. Просто умножьте высоту на ширину на 3. и добавить немного свободной памяти для обработки всех этих байтов. скажем, в два раза больше изображения.

Это не имеет ничего общего с размером файла .

...