@kostrukov

Потоковая замена фрагмента изображения

Подскажите, как организовать процесс замены определённого (жестко заданного координатами) фрагмента на серии фото. Поясню, есть программа которая генерирует из входных данных готовые госдокументы. Некоторое время назад стандарт документа изменился, а программиста-создателя (вместе с исходниками) найти не представляется возможным. Надо то всего взять одну строку и заменить на другую нового образца, но на нескольких десатках или сотках документов.

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

%username%, помогай!
  • Вопрос задан
  • 3033 просмотра
Пригласить эксперта
Ответы на вопрос 4
avalak
@avalak
Простой вариант для win: взять IrfanView и пакетно добавить ватермарк заплатку по этой инструкции на те файлы что уже есть.

Простой вариант для *nix:
#!/usr/bin/env bash
#

# фиксим пробелы в именах файлов
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")

#новый фрагмент
REPL="../base.png"

# переходим в каталог с исходными файлами "in"
cd in
for file in *.jpg
do
    echo "Processing $file file..";
    # наложить фрагмент на исходное изображение 110px слева 110px сверху 
    # и сохранить результат в каталог ../out под тем же именем
    convert ${file} ${REPL} -geometry +110+110 -composite ../out/${file}
done
IFS=$SAVEIFS



С теми что будут появляться в процессе работы немного сложнее. Для *nix я бы написал shell скрипт inotify + imagemagick отслеживать и обрабатывать файлы в каталоге. Но в win этот не пройдёт, тк нет ни shell ни inotify.
Альтернатива: .NET FileSystemWatcher. Возможно кто то напишет сторожа (я .NET не использую). Иначе придётся либо дёргать скрипт, либо пользоваться IrfanView
Ответ написан
Комментировать
Akson87
@Akson87
Могу предложить связку Python+OpenCV, небольшой скриптик в пару десятков строк должен решить проблему.
Ответ написан
Комментировать
@newpavlov
Вот функция на Питоне для вставки изображения в другое (треубет Python Imaging Library):
from PIL import Image
def paste_mark(main, mark, coor, output):
img = Image.open(main)
mrk = Image.open(mark)
img.paste(mrk, coor)
img.save(output)

main и mark — это соответственно пути к главному изображению (документу) и вставляемому (фрагменту). coor — пара (x, y) координат места вставки, а output — путь для выходного файла.

Пример использования:
paste_mark('document.jpg', 'fragment.jpg', (100, 200), 'output.jpg')
Написать обвесок для обхода всех нужных файлов, думаю труда не составит.
Ответ написан
Комментировать
maxgalkin
@maxgalkin
Если у вас есть фотошоп, то очень быстро можно записать последовательность действий на примере одной вашей фотографии документа. Тем более это просто, что координаты вставки строки зафиксированы.
Windows / Actions

И далее, применить записанный скрипт ко всему пакету документов (к папке с фотографиями)
File / Automate / Batch…
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы