Рубрики
Без рубрики

Как водить ваши фотографии с Python

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

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

В любом случае, пакет подушек предоставляет инструменты, которые вам нужно добавить водяные знаки на ваши фотографии! Первое, что вам нужно сделать, это установить подушку, если вы еще не сделали:

pip install pillow

Как только это установлено, мы можем продолжить!

Добавление текста водяной знак

Начнем, просто добавляя текст на фотографию. Давайте использовать этот маяк Yequina, который я взял в Орегон:

Теперь мы добавим текст на изображение. В этом случае давайте добавим свой домен к нему: www.mousevspython.com.

from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont


def watermark_text(input_image_path,
                   output_image_path,
                   text, pos):
    photo = Image.open(input_image_path)

    # make the image editable
    drawing = ImageDraw.Draw(photo)

    black = (3, 8, 12)
    font = ImageFont.truetype("Pillow/Tests/fonts/FreeMono.ttf", 40)
    drawing.text(pos, text, fill=black, font=font)
    photo.show()
    photo.save(output_image_path)


if __name__ == '__main__':
    img = 'lighthouse.jpg'
    watermark_text(img, 'lighthouse_watermarked.jpg',
                   text='www.mousevspython.com',
                   pos=(0, 0))

Здесь мы импортируем несколько классов из PIL: Изображение , ImagedRaw и ImageFont Отказ Тогда мы создаем функцию, Watermark_Text , это требует четыре аргумента: страница входного изображения, путь выходного изображения, текст для добавления к изображению, и координаты положения, чтобы поставить текст.

Далее мы открываем наш образ. Затем мы в основном сделаем копию изображения, перерисовая его, используя Imagedraw.draw метод. Это позволяет нам добавлять текст легче. Тогда мы создаем шрифт, используя Imagefont.truetype Отказ Шрифт – это тот, который включен в библиотеку подушки. Мы также устанавливаем размер шрифта до 40 баллов. Наконец мы показываем результат и сохраните его на диск. Вот результат:

Теперь давайте перейдем к добавлению изображения вместо просто текста!

Водяной знак с изображением

Большинство профессиональных фотографов в конечном итоге составляют свои фотографии с логотипом. Иногда это включает в себя стилизованную «фото» версию своего сайта. Добавление фотографии на другую фотографию в подушке также довольно легко. Давайте узнаем, как это сделать!

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

from PIL import Image

def watermark_photo(input_image_path,
                    output_image_path,
                    watermark_image_path,
                    position):
    base_image = Image.open(input_image_path)
    watermark = Image.open(watermark_image_path)

    # add watermark to your image
    base_image.paste(watermark, position)
    base_image.show()
    base_image.save(output_image_path)

if __name__ == '__main__':
    img = 'lighthouse.jpg'
    watermark_with_photo(img, 'lighthouse_watermarked2.jpg',
                         'watermark.png', position=(0,0))

Здесь мы создаем функцию, которая очень похожа на функцию в последнем разделе, но вместо того, чтобы проходить в тексте, мы проходим в пути файла Watermark. В функции мы открываем изображение, которое мы хотим водяным знаком, а также саму изображение водяного знака. Тогда мы делаем изображение, чтобы быть водяным знаком и называть его вставить () Способ при прохождении того, что мы хотим вставить (то есть водяной знак) и позиция, которую мы хотим, чтобы элемент вставил. Наконец мы показываем изображение и сохранить его. Вот результат:

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

Watermark изображение с прозрачностью

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

from PIL import Image

def watermark_with_transparency(input_image_path,
                                output_image_path,
                                watermark_image_path,
                                position):
    base_image = Image.open(input_image_path)
    watermark = Image.open(watermark_image_path)
    width, height = base_image.size

    transparent = Image.new('RGBA', (width, height), (0,0,0,0))
    transparent.paste(base_image, (0,0))
    transparent.paste(watermark, position, mask=watermark)
    transparent.show()
    transparent.save(output_image_path)


if __name__ == '__main__':
    img = 'lighthouse.jpg'
    watermark_with_transparency(img, 'lighthouse_watermarked3.jpg',
                                'watermark.png', position=(0,0))

В этом коде мы принимаем все те же аргументы, которые мы сделали в предыдущем примере. На этот раз мы не только открываем оба изображения, но также получаем ширину и высоту изображения, которое мы хотим водяным знаком. Затем мы создаем новое изображение, используя ту же ширину и высоту, что и изображение, которое мы водяным знаком. Вы отметите, что это изображение, которое мы создаем, это RGBA, что означает, что он имеет красный, зеленый и синий с альфа. Далее мы вставляем на изображение, которое мы хотим водяным знаком, начиная с верхнего левого, что является (0,0). Затем мы вставляем в нашем водяном знаке, используя пропущенные в положении, и мы также замаскиваем водяной знак с собой. Наконец мы показываем и сохраняем изображение.

Полученное изображение выглядит так:

Довольно круто, а?

Обертывание

Мы охватывали 2 различных метода добавления водяных знаков на ваши фотографии в этой статье. В первом примере все, что мы делали, было добавить текст по вашему выбору на изображение. Второй пример продемонстрировал способ добавления водяного знака изображений, но он не учитывает альфа (прозрачность). Мы исправили эту проблему с третьим примером. Я надеюсь, что вы нашли эти примеры полезными. Счастливое кодирование!

Связанное чтение