Combine gráficos de tamanhos diferentes com ImageMagick

Combine gráficos de tamanhos diferentes com ImageMagick

Estou processando um grande lote de imagens que têm uma moeda prateada em um fundo preto. Primeiro eu cortei os arquivos calculando as dimensões de: trimbox=$(convert $f -fuzz 35% -format "%@" info:)

Eu adiciono 50 aos 2 primeiros parâmetros e 25 a cada um dos 2 últimos (para fazer com que mais da imagem original fique visível além do que o corte detecta). Eu testei removendo essas compensações sem diferença.

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

Depois de aparado, estou usando:

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

para mesclar os arquivos. Eu tentei variantes com -background black ou -fill black sem sucesso.

O fino retângulo branco está aparecendo porque as duas imagens têm tamanhos ligeiramente diferentes.

Eu preferiria que eles fossem redimensionados de forma idêntica para que nenhuma correção fosse necessária, mas também aceitaria uma barra preta.

Amostras de arquivos:

É claro que vê-los em um fundo branco obscurece o que estou falando.

Responder1

Este script deve fazer o que você deseja. Ele usa a largura máxima ou a altura máxima das imagens ao recortar.

# !/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"

Responder2

Eu uso Irfanview64 em vez de Imagemagick

  • Possui ferramentas de imagem flexíveis
  • inicie Miniaturas com "T" para iniciar o aplicativo Miniaturas
  • você pode navegar pela pasta e até mesmo carregar de>Editar, adicionar todas as subpastas<
  • as opções de miniaturas são extensas
  • você pode selecionar muitas imagens com a tecla Ctrl + clique
  • então >arquivo>criar folha de contato) e ajuste o tamanho do array x*y e o espaço entre etc etc

insira a descrição da imagem aqui insira a descrição da imagem aqui

informação relacionada