ImageMagick: соединить 4 ребра из одного изображения в другое, бок о бок

Я использую Perl 5.16 с ImageMagick 6.8 (вероятно, уже устарел, но работает :). Я пытаюсь извлечь все 4 краевых области из одного изображения и скомпоновать их в другое изображение, расположенное рядом друг с другом, ориентированное вертикально.

Иллюстрацияj

Я могу извлечь края и повернуть их, но я не могу получить правильное смещение в целевом изображении. Края заканчиваются друг над другом. Я попробовал x=›$marg, translate=›$marg,0, геометрию со смещением: без кубиков. Переменные: $marg = ширина края, $im = источник, $im2 = цель, $ext = извлеченная область

# left edge
$ext=sprintf("%dx%d+%d+%d",$marg,$h,0,0);
$res=$im2->Composite(image=>$im,compose=>Over,extract=>$ext);

# top edge
$ext=sprintf("%dx%d+%d+%d",$w,$marg,0,0);
$geo=sprintf("%dx%d+%d+%d",$marg,$h,0,0);
$res=$im2->Composite(image=>$im,compose=>Over,extract=>$ext,rotate=>90,translate=>"$marg,0");

person MrSparkly    schedule 25.06.2021    source источник


Ответы (1)


Я не использовал привязки PerlMagick в течение многих лет, но я полагаю, что вы захотите создать каждую из своих 4 краевых полос, а затем использовать +append, чтобы расположить их горизонтально, бок о бок. Вот грубый пример, только в Терминале:

magick -size 20x50 xc:red xc:lime xc:blue +append result.png

введите здесь описание изображения

Более конкретно, отвечая на ваш вопрос и начиная с этого изображения:

введите здесь описание изображения

это будет выглядеть так:

#!/bin/bash

magick ~/sample/images/blocks-RGB.png -resize 100x100 +repage -write MPR:orig +delete \
    \( MPR:orig -gravity northwest -crop 30x+0+0 \) \
    \( MPR:orig -gravity northwest -crop x30+0+0 -rotate 90 \) \
    \( MPR:orig -gravity southwest -crop x30+0+0 -rotate 90 \) \
    \( MPR:orig -gravity northeast -crop 30x+0+0 \) \
    +append result.png
    

введите здесь описание изображения

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

person Mark Setchell    schedule 25.06.2021
comment
Спасибо. Думаю, я смогу перевести это на Perl. Я предполагаю, что логика такова: repage означает создание новой копии оригинала для каждой операции (затем удаление оригинала). Следующие 4 операции обрезки извлекают соответствующий край в каждой копии. Затем добавление — это то, что размещает их рядом в цели. - person MrSparkly; 25.06.2021
comment
Около. repage означает забыть о любых виртуальных холстах и ​​смещениях. MPR — это Magick Persistent Register, который представляет собой просто именованный фрагмент памяти, в котором я храню оригинал, а не продолжаю обращаться к диску для перезагрузки начального изображения для каждой из 4 культур. - person Mark Setchell; 25.06.2021