Newsgroup: it.comp.os.linux.iniziare
Titolo: rilevamento automatico dimensioni per ritaglio (autocrop by image width)

molti progetti di digitalizzazione, con buona volontà, ma scarsamente 
attrezzati tecnicamente, scansionano i libri a due pagine per volta
per poter ricavare da immagini a doppia facciata, immagini di singole 
pagine, è necessario tagliarle al centro
tempo fa mi suggerirono uno script, in cui andavano immesse ogni volta le 
dimensioni totali dell'immagine (larghezza e lunghezza) e altre misure 
corrispondenti alla metà della larghezza (per ottenere le pagine 
sinistre), e uno spostamento (offset) pari anch'esso alla metà della 
larghezza per ottenere le pagine destre
così, ad esempio, se una immagine ha dimensioni:
2395x1736
1152x1736+0+0 (per ottenere le sinistre)
2395x1736+1152+0 (per ottenere le destre)
in uno script per imagemagick (io poi l'ho adattato a graphicsmagick che 
ha una sintassì pressoché uguale e usa meno cicli  macchina)
---------------------------------------------------------------------------
#!/bin/sh
if [ ! -e disp-par ]; then mkdir disp-par; fi
for FILE in *.jpg ; do gm convert -crop 1152x1736+0+0 "$FILE" "$FILE-
A.jpg" ; mv `ls *.jpg | grep A` disp-par ; gm convert -crop 2395x1736+1152
+0 "$FILE" "$FILE-B.jpg" && mv `ls *.jpg | grep B` disp-par
 done ; 
---------------------------------------------------------------------------
ma in questo modo sono costretto a immettere ogni volta le misure.
posso ricavare le dimensioni della prima della serie di immagini (aventi 
la stessa larghezza) col comando:
gm identify -format '%w \n' *.png
e ottenere la metà di questa misura con:
X=`gm identify -format '%w \n' 0-000.jpg`;echo "scale=1;${X}/2" | bc 
ma come inserirli nello script come argomento di -crop?
-- 
Puppy Linux wiki:  
http://dokupuppylinux.co.cc
Puppy Linux Forum: 
http://puppylinux.ilbello.com
Windows me genuit, Ubuntu rapuere / tenet nunc Puppy Linux...

 pagine, è necessario tagliarle al centro
[...]
ingegnandomi un po', ho poi risolto e concepito questo script in cui 
calcolo la larghezza di ogni scansione a doppia facciata, la lunghezza e 
la metà della larghezza, basandomi sulla lunghezza e la larghezza della 
prima immagine della serie di scansioni a doppia facciata (le dimensioni 
sono uguali per tutta la serie)
le tratto come variabili
e poi inserisco queste variabili nello script così che i valori siano 
calcolati automaticamente, naturalmente sono possibili ulteriori 
raffinamenti (a esempio come rilevare la prima immagine non immettendone 
il nome, ma usando ls e poi head -n1) ma lo script funziona
uso graphics magick, ma eliminando *gm* lo script funziona anche con
imagemagick, di cui graphicsmagick è un clone
------------------------------------------------------------------
#!/bin/sh
mkdir disp-par
let "largmz=`gm identify -format '%w \n' *0-000.jpg`/2" 
larg="`gm identify -format '%w \n' *0-000.jpg`"
lung="`gm identify -format '%h \n' *0-000.jpg`"
for FILE in *.jpg ; do gm convert -crop "$largmz"x"$lung"+0+0 "$FILE" "$FILE-A.jpg" && mv `ls *.jpg | grep A` disp-par ; gm convert -crop "$larg"x"$lung"+"$largmz"+0 "$FILE" "$FILE-B.jpg" && mv `ls *.jpg | grep B` disp-par
 done ; 
------------------------------------------------------------------
sono graditissimi eventuali commenti o critiche
legenda:
largmz = la metà della larghezza calcolata in base a quella rilevata
automaticamente da identify, le altre variabili sono la larghezza e
la lunghezza intere


 prima immagine non immettendone il nome, ma usando ls e poi head -n1)
[...]
ecco infatti la versione modificata che rileva, in una serie di
immagini, la prima in maniera automatica:
------------------------------------------------------------------
#!/bin/sh
if [ ! -e even-odd ]; then mkdir even-odd; fi
first="`ls -1 *.jpg | head -n1`"
let "halfwidth=`gm identify -format '%w \n' "$first"`/2" 
width="`gm identify -format '%w \n' "$first"`"
height="`gm identify -format '%h \n' "$first"`"
for FILE in *.jpg ; do gm convert -crop "$halfwidth"x"$height"+0+0 "$FILE" "$FILE-A.jpg" ; mv `ls *.jpg | grep A` even-odd ; gm convert -crop "$width"x"$height"+"$halfwidth"+0 "$FILE" "$FILE-B.jpg" && mv `ls *.jpg | grep B` even-odd
 done ; 
------------------------------------------------------------------


 > pagine, è necessario tagliarle al centro
questo potrebbe fare al caso tuo
http://unpaper.berlios.de