Прежде всего, я рекомендую вам создать набор изображений водяных знаков различных размеров вместо изменения размера "на лету".
Ниже я изложил рабочий процесс динамической маркировки изображений на веб-сайте:
Дизайн хорошего водяного знака
Прежде всего, попробуйте создать водяной знак с прозрачным фоном. Это значительно снизит риск прикрытия важных частей целевого изображения. Это может быть сделано с использованием gif или (предпочтительно) формата png imagefile. Просто убедитесь, что прозрачный водяной знак хорошо работает как на светлом, так и на темном фоне.
Также примите во внимание, как наилучшим образом проектировать водяной знак, который подходит как для портретных, так и для ландшафтных изображений и изображений с неуклюжими пропорциями. Вы должны рассмотреть возможность сделать две версии - одну для широких изображений и одну для высоких изображений. Для последнего типа вы можете повернуть водяной знак на 90 градусов или, если водяной знак состоит из текста, вы можете разделить текст на две или более строки.
Предварительный рендеринг водяного знака нескольких разных размеров
Так что не изменяйте размер водяного знака динамически, вместо этого я рекомендую вам визуализировать набор изображений водяных знаков с различными размерами. Это нужно сделать только один раз, и это значительно улучшит четкость и / или разборчивость водяного знака (особенно для небольших целевых изображений).
В зависимости от того, насколько разными будут изображения на веб-странице, вам может потребоваться большее или меньшее количество размеров. Это выбор дизайна, который вам придется сделать, но я думаю, что вы могли бы обойтись только с двумя или тремя различными размерами.
Применить водяной знак
Это будет происходить динамически на стороне сервера (в вашем php-файле). Сначала выясните размеры целевого изображения с помощью функции getimagesize. Имея эту информацию под рукой, вы должны решить, какую версию водяного знака использовать, основываясь на размере, соотношении сторон и ориентации. Например.
if ( $width > $height ) {$useLandscapeWatermark=true;}
if ( $width > 100 && $width < 400 ) {$watermarkSize=2;}
и т.д.
Наконец, чтобы применить водяной знак, я рекомендую вам взглянуть на библиотеку gd . Это мощная библиотека, которая может выполнять множество аккуратных операций, в том числе объединяя два изображения. Альтернативой является ImageMagic.
Удачи!