Как добавить водяные знаки к изображениям через командную строку - Надеюсь, используя Irfanview
Я немного поработал, и я не смог найти возможный способ добавления водяных знаков в мои 1000+ изображений автоматически. Возможно ли это с irfanview?? Что-то ищет - это просто базовый прозрачный текст, накладываемый на каждое изображение. Можно ли это сделать с помощью командной строки? Можно ли сделать еще один шаг и добавить водяной знак логотипа?
Можете ли вы порекомендовать другие программы, а не irfanview, сделать это, если это невозможно сделать в этой программе.
Ответы
Ответ 1
Я рекомендую использовать 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.
Ответ 2
Здесь находится быстрый python script, основанный на предложении 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.