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:
- Archivo original 1
- Archivo original 2
- Archivo recortado 1
- Archivo recortado 2
- Archivo fusionado 1
- Archivo fusionado 2
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.