Combine gráficos de diferentes tamaños con ImageMagick

Combine gráficos de diferentes tamaños con ImageMagick

Estoy procesando un gran lote de imágenes que tienen una moneda plateada sobre un fondo negro. Primero, recorto los archivos calculando las dimensiones desde: trimbox=$(convert $f -fuzz 35% -format "%@" info:)

Agrego 50 a los primeros 2 parámetros y 25 a cada uno de los últimos 2 (para hacer que más de la imagen original sea visible más allá de lo que detecta el recorte). Lo probé eliminando estas compensaciones sin ninguna diferencia.

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

Una vez recortado estoy 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 fusionar los archivos. Probé variantes con -fondo negro o -relleno negro sin éxito.

El delgado rectángulo blanco aparece porque las dos imágenes tienen tamaños ligeramente diferentes.

Preferiría que se redimensionaran de manera idéntica para que no fuera necesaria ninguna corrección pero también aceptaran una barra negra.

Muestras de archivos:

Verlos sobre un fondo blanco, por supuesto, oscurece de qué estoy hablando.

Respuesta1

Este script debería hacer lo que quieras. Utiliza el ancho máximo o la altura máxima de las imágenes al 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"

Respuesta2

Utilizo Irfanview64 en lugar de Imagemagick

  • Tiene herramientas de imágenes flexibles.
  • inicie Miniaturas con "T" para iniciar la aplicación Miniaturas
  • puedes explorar la carpeta e incluso cargar desde> Editar y agregar todas las subcarpetas <
  • Las opciones para miniaturas son extensas.
  • puedes seleccionar muchas imágenes con Ctrl + clic en la tecla
  • luego >archivo>crear hoja de contactos) y ajustar el tamaño de la matriz x*y y el espacio entre etc., etc.

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

información relacionada