Функционал весьма полезный. Я б, например, на картинки, которые
сторонние сайты запрашивают, вставлял бы водные знаки. А сейчас 403
выдаю.
Но хоть я не сишник, но подозреваю, что сделано не самым лучшим
образом. При каждом наложении водного знака зачем-то делается заново
открытие файла с водным знаком, чтение его с диска (про aio промолчу)
и создание изображения. Всё это можно при старте nginx-а делать или
Разница не слишком велика, при интенсивной нагрузке он все равно будет в буффере системы жить, а зря занимать память тоже не охота. Да и лень )
делать единожды при первой потребности, а потом много раз
использовать. Если водный знак может меняться, то повесить вотчер на
изменения файла и по событию перечитывать его. Зачем-то (подозреваю,
что это нужно, чтобы иметь изображение нужного формата/цветности)
делается аж три копирования изображений, что наверняка сильно грузит
процессор, если картинка 10 метров, например.
Увы, это единственный известный мне способ не потерять альфаканал при совмещении.
А красивые ватермарки без него не сделать. Да и все равно подразумевается что там стоит expires 40d; минимум и на внешнем кольце все кешируется..
По мелочи: нельзя конфигурировать отступы от края изображения, задавая
их в пикселях или процентах ширины исходного изображения. Может
кому-то будет полезно влепить водный знак по центру, кстати. И бывает
полезно замостить водным знаком всё изображение: http://i38.beon.ru/56/31/2483156/paid-avatars/95391b8e2d23c38f93a5559c9a6a22c3.gif
Угу, а еще на лету генерировать ватермарки из текста, отдаваемого субреквестом; менять exif картинки; подбирать из набора подходящую ватермарку под пропорции картинки; автоматически подбирать место для ватермарки исходя из динамики цвета на картинке (причем как искать однотонные места, так и наоборот, по выбору)
Короче я сам могу еще много придумать, вот только времени нет это все реализовывать ;)
Вопросы: как работает, если изображение с водным знаком больше
исходного изображения. Или исходное изображение меньше, чем 10х10? И
что с анимированными гифами?
калечит, конечно. Я даже проверку на размеры не делал и вообще весь код был написан прямо в diff файле ))