Минимизировать расход памяти при работе с графикой

Redjik

Джедай-мастер
Почему я стараюсь избежать ресайза на стороне клиента: это админка сайта, где фотки будут заливать зачастую женщины. Обучать их ресайзить фото -- лучше повеситься.
http://mailru.github.io/FileAPI/#ru/FileAPI.Image.resize

Повангую, что парень просто не знает, что можно автоматом ресайзить на клиенте до отправки на сервер... посредстовом js/canvas/flash/ичотамеще
Тут типа прихоть - у нас де пользователи ленивые - они не будут ресайзить =)
на клиенте значит в браузере - встроенными средствами, автоматом, без обучения тетенек

UPD. надо бы разбанить Вурдалака, а то как дурачек пропапугаил =)
 
  • Like
Реакции: WMix

fixxxer

К.О.
Партнер клуба
Если решишь уменьшать canvas-ом, советую не сразу менять размер, а пошагово уменьшая вдвое. Так качество получается лучше. :)
 

С.

Продвинутый новичок
Вообще довольно парадоксальная ситуация. Кто бы мог подумать ранее, что клиенты будут мощнее и емче серверов. Концепция тонких клиентов уже давно пылится в углу.
 

fixxxer

К.О.
Партнер клуба
Что клиент мощнее говношареда, который у ТСа - в этом-то как раз нет ничего удивительного. :)
 

Redjik

Джедай-мастер
Да ладно уж - среднестатистический клиент мощнее говновпс за 20$

вон на линоде - 2 ядра, 2 гига - 20$ как раз ...
у меня у мамы такой же минибук
 

fixxxer

К.О.
Партнер клуба
Тут скорее перенос вычислений на сторону клиента. Клиентов много, а сервер один.

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

С.

Продвинутый новичок
"Клиентов много, а сервер один" тут ни при чем. В данном случае идет не распыление целого по клиентам, а то что одно целое вычисление не тянется серверм, но в легкую делается клиентом.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
С., такой подход (клиентская оптимизация) появился таки именно в виду того, что клиенту это все проще сделать, чем серверу массово процессить фоточки юзеров в ВК.

"Клиентов много, а сервер один" тут ни при чем.
Очень даже при чем.
 

С.

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

fixxxer

К.О.
Партнер клуба
Да ну, никакого парадокса. Подобный говношаред стоит три доллара, клиентское устройство всяко дороже.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Вообще довольно парадоксальная ситуация. Кто бы мог подумать ранее, что клиенты будут мощнее и емче серверов. Концепция тонких клиентов уже давно пылится в углу.
да, закон Мура удивителен, он внезапно работает, кто бы мог подумать ...
 

sniffysko

Новичок
Господа, в общем, перспектива изучения FileAPI меня несколько расстроила и я решил таки попробовать Imagic. И вот что получилось.
Вот функция переписанная под Imagic (удален код к работе с графикой не относящийся):
Код:
function GenThumb($srs_file) {
    $new_h = 100;

    echo memory_get_usage() . "\n";

    $src_img = new Imagick($srs_file);
    if (!$src_img){
        ShowError($_TPL, $MSG['ERROR_IMG_PROCESS_READ']. $file_name. '<BR>');
        return '';
    }

    $w = $src_img->getImageWidth();
    $h = $src_img->getImageHeight();

    echo memory_get_usage() . "\n";

    $new_w = floor($new_h / $h * $w);
    $src_img->resizeImage ($new_w, $new_h, imagick::FILTER_LANCZOS, 1);

    echo memory_get_usage() . "\n";

    $src_img->sharpenImage(IMAGE_SHARPEN_RADIUS, IMAGE_SHARPEN_RADIUS / 2);

    echo memory_get_usage() . "\n";

    $src_img->setCompression(95);
    $src_img->writeImage($res_file);

    echo memory_get_usage() . "\n";

    $src_img->destroy();

    echo memory_get_usage() . "\n";
}
А вот результаты использования памяти на сервере (файл на 18 Мп вес 7 метров в жпеге):
1292248
1292520
1292520
1292520
1292520
1293200
Что наталкивает на мысль, что работа с графикой в Imagic исполняется не в внутри PHP, а где-то снаружи.
Т.о. использование Imagic позволяет ЗНАЧИТЕЛЬНО сэкономить на памяти, используемой скриптом при работе с графикой.
В общем, FileAPI имеет тот замечательный плюс, что не надо таскать на сервер все 7 мегабайт, а можно затащить туда уже готовое изображение. Покоцанное и обрезанное. Хотя, как мне видится, путь навешивания серверного функционала на клиентскую сторону довольно спорен.
 

hell0w0rd

Продвинутый новичок
Спорен?)) Это будущее, а для множества проектов - настоящее, пора просыпаться ;)
 
Сверху