Как добавить водяные знаки на изображения через командную строку - Надеюсь, с помощью Irfanview - PullRequest
20 голосов
/ 04 апреля 2011

Я немного покопался, и мне не удалось найти какой-либо реальный способ автоматического добавления водяных знаков на мои 1000+ изображений. Это возможно с irfanview ?? То, что я ищу, - это просто базовый прозрачный текст, накладываемый на каждое изображение. Можно ли это сделать с помощью командной строки? Можно ли пойти еще дальше и добавить водяной знак логотипа?

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

Ответы [ 2 ]

29 голосов
/ 04 апреля 2011

Я рекомендую использовать ImageMagick , который является открытым исходным кодом и вполне стандартен для работы с изображениями в командной строке.

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

composite -dissolve 30% -gravity south watermark.jpg input-file.jpg output-file.jpg

С текстом это немного сложнее, но возможно .

Используя вышеприведенную команду в качестве примера, команда Bash для этого для всех файлов в папке будет:

for pic in *.jpg; do
    composite -dissolve 30% -gravity south watermark.jpg $pic ${pic//.jpg}-marked.jpg
done

Для получения дополнительной информации о водяных знаках с помощью ImageMagick см. Примеры ImageMagick v6 .

0 голосов
/ 08 января 2017

Вот быстрый скрипт на python, основанный на предложении ImageMagik.

#!/usr/bin/env python
# encoding: utf-8

import os
import argparse

def main():
    parser = argparse.ArgumentParser(description='Add watermarks to images in path')
    parser.add_argument('--root', help='Root path for images', required=True, type=str)
    parser.add_argument('--watermark', help='Path to watermark image', required=True, type=str)
    parser.add_argument('--name', help='Name addition for watermark', default="-watermark", type=str)
    parser.add_argument('--extension', help='Image extensions to look for', default=".jpg", type=str)
    parser.add_argument('--exclude', help='Path content to exclude', type=str)

    args = parser.parse_args()

    files_processed = 0
    files_watermarked = 0
    for dirName, subdirList, fileList in os.walk(args.root):
        if args.exclude is not None and args.exclude in dirName:
            continue
        #print('Walking directory: %s' % dirName)
        for fname in fileList:
            files_processed += 1
            #print('  Processing %s' % os.path.join(dirName, fname))
            if args.extension in fname and args.watermark not in fname and args.name not in fname:
                ext = '.'.join(os.path.basename(fname).split('.')[1:])
                orig = os.path.join(dirName, fname)
                new_name = os.path.join(dirName, '%s.%s' % (os.path.basename(fname).split('.')[0] + args.name, ext))
                if not os.path.exists(new_name):
                    files_watermarked += 1
                    print('    Convert %s to %s' % (orig, new_name))
                    os.system('composite -dissolve 30%% -gravity SouthEast %s "%s" "%s"' % (args.watermark, orig, new_name))

    print("Files Processed: %s" % "{:,}".format(files_processed))
    print("Files Watermarked: %s" % "{:,}".format(files_watermarked))


if __name__ == '__main__':
    main()

Запустите это так:

./add_watermarks.py --root . --watermark copyright.jpg --exclude marketplace

Чтобы создать водяной знак, я просто создал текст в документе Word, а затем сделал снимок экрана небольшой области текста, чтобы получить файл copyright.jpg.

...