Объединяйте графику разного размера с помощью ImageMagick

Объединяйте графику разного размера с помощью ImageMagick

Я обрабатываю большую партию изображений, на которых изображена серебряная монета на черном фоне. Сначала я обрезаю файлы, используя вычисление размеров из: trimbox=$(convert $f -fuzz 35% -format "%@" info:)

Я добавляю 50 к первым 2 параметрам и 25 к каждому из последних 2 (чтобы сделать так, чтобы было видно больше исходного изображения за пределами того, что обнаруживает обрезка). Я протестировал удаление этих смещений, и никакой разницы не было.

convert "$f" -crop "$trimbox" +repage "$baseFilename-trimmed.jpg"

После обрезки я использую:

    command="$baseoFilename-trimmed.jpg $baserFilename-trimmed.jpg "
    command2="+repage _MG_$first"
    convert $command -append $command2-vmerged.jpg
    convert $command +append $command2-hmerged.jpg

для объединения файлов. Я пробовал варианты с -background black или -fill black, но безрезультатно.

Тонкий белый прямоугольник появляется из-за того, что два изображения немного различаются по размеру.

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

Образцы файлов:

Конечно, если рассматривать их на белом фоне, то становится неясно, о чем я говорю.

решение1

Этот скрипт должен делать то, что вам нужно. Он использует максимальную ширину или максимальную высоту изображений при обрезке.

# !/bin/bash

set -eu

gettrimbox() {
    # Some lines were based on the code of Fred Weinhaus available on http://www.fmwconcepts.com/imagemagick/autotrim/
    trimbox=$(convert "$1" -fuzz 35% -format "%@" info: | tr -cs "0-9\n" " ")
    r_w=$(echo $trimbox | cut -d\  -f1)
    r_h=$(echo $trimbox | cut -d\  -f2)
    r_xoff=$(echo $trimbox | cut -d\  -f3)
    r_yoff=$(echo $trimbox | cut -d\  -f4)
    r_xcenter=$(((r_w/2)+r_xoff))
    r_ycenter=$(((r_h/2)+r_yoff))
    r_w=$((r_w+50))
    r_h=$((r_h+50))
}

f1=$1
f2=$2
number1=$(echo "$f1" | tr -dc "0-9")

gettrimbox "$f1"
w1=$r_w; h1=$r_h
xcenter1=$r_xcenter; ycenter1=$r_ycenter

gettrimbox "$f2"
w2=$r_w; h2=$r_h
xcenter2=$r_xcenter; ycenter2=$r_ycenter

if [ $w1 -gt $w2 ]; then max_w=$w1; else max_w=$w2; fi
if [ $h1 -gt $h2 ]; then max_h=$h1; else max_h=$h2; fi

convert "$f1"[$max_w"x"$h1+$((xcenter1-(max_w/2)))+$((ycenter1-(h1/2)))] \
        "$f2"[$max_w"x"$h2+$((xcenter2-(max_w/2)))+$((ycenter2-(h2/2)))] \
        -append +repage "_MG_$number1-vmerged.jpg"

convert "$f1"[$w1"x"$max_h+$((xcenter1-(w1/2)))+$((ycenter1-(max_h/2)))] \
        "$f2"[$w2"x"$max_h+$((xcenter2-(w2/2)))+$((ycenter2-(max_h/2)))] \
        +append +repage "_MG_$number1-hmerged.jpg"

решение2

Я использую Irfanview64 вместо Imagemagick

  • Имеет гибкие инструменты визуализации
  • запустите Thumbnails с помощью клавиши «T», чтобы запустить приложение Thumbnails
  • вы можете просматривать папки и даже загружать из>Изменить добавить все подпапки<
  • варианты для миниатюр обширны
  • Вы можете выбрать несколько изображений с помощью Ctrl + клавиша click
  • затем >файл>создать контактный лист) и настроить размер массива x*y и расстояние между ними и т.д. и т.п.

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

Связанный контент