Archivo mensual: octubre 2010

Convertir una imagen Carátula DVD en una proyección


Como convertir una carátula de DVD (o cualquier tipo) en una representación de la caja

Usando la imagen
http://img513.imageshack.us/img513/3228/imgrf9.jpg

Usaremos el siguiente script:

#!/bin/bash

wget http://img513.imageshack.us/img513/3228/imgrf9.jpg; img=”imgrf9.jpg”
#img=$1;

identify -format “%w\x%h” $img
# dimensiones de imagen imgrf9.jpg = 3213 px x 2125 px
# ancho de spine = 213
# ancho de caratulas 3213 – 213 = 3000; 3000 / 2 = 1500 px

# Back 1500 + Spine 213 + Front 1500 = 3213 px

# Cortamos front + spine = 1500 + 213 = 1713
convert “$img” -gravity East -chop 1713x back.jpg
echo “Creado back.jpg”

# Cortamos front y back = 1500 y 1500 por ambos lados
convert “$img” -gravity East -chop 1500x -gravity West -chop 1500×0 spine.jpg
echo “Creado spine.jpg”

# Cortamos back + spine = 1500 + 213 = 1713
convert “$img” -gravity West -chop 1713×0 front.jpg
echo “Creado front.jpg”

# Transformar
# Puntos de perspectiva
# 1——2
# 3——4
# back 1500×2125
convert back.jpg -matte -virtual-pixel transparent \
-distort Perspective ‘0,0 173,76 1500,0 1500,62 0,2125 173,1971 1500,2125 1500,1957’ back_cover.png
echo “Creado back_cover.jpg”

# spine 213×2125
convert spine.jpg -matte -virtual-pixel transparent \
-distort Perspective ‘0,0 0,62 213,0 143,76 0,2125 0,1957 213,2125 143,2013’ spine_cover.png
echo “Creado spine_cover.jpg”

# front 1500×2125
convert front.jpg -matte -virtual-pixel transparent \
-distort Perspective ‘0,0 0,76 1500,0 1200,47 0,2125 0,2013 1500,2125 1200,1910’ front_cover.png
echo “Creado front_cover.jpg”

montage -geometry +0+0 back_cover.png \
\( spine_cover.png -crop 0x0-70+0 \) \
front_cover.png -background none caratula.png
# caratula.png 3143×2125

convert -size 16×16 -font CourierNew -pointsize 18 xc:none -annotate +3+12 ‘©’ -flop cl.png

convert -size 150×16 -font CourierNew -pointsize 18 xc:none -annotate +3+12 ‘Carlos Celis’ cc.png

montage -geometry +0+0 -background none cl.png cc.png carloscelis.png

ancho=`identify -format “%w” caratula.png`
anchowm=`expr $ancho / 3`; #echo $anchowm

composite \( carloscelis.png -geometry $anchowm -gravity southeast -dissolve 40% \) caratula.png caratula-cpleft.png

#convert -trim img.png caratula.png
echo “Montaje hecho”

También he creado este:

#!/bin/bash

# Use $0 imagen anchospine

img=$1;
wspine=$2;

echo -n 'Imagen: '$img' dimensiones: '; identify -format "%w\x%h" $img
echo 'Ancho de la Espina: '$wspine

anchoimg=`identify -format "%w" $img`
altoimg=`identify -format "%h" $img`
backfront=`expr \( $anchoimg - $wspine \) / 2`

# Cortamos front + spine
corte=`expr $backfront + $wspine`
convert "$img" -gravity East -chop $corte\x back.jpg
echo "Creado back.jpg"

# Cortamos front y back por ambos lados
convert "$img" -gravity East -chop $backfront\x -gravity West -chop $backfront\x spine.jpg
echo "Creado spine.jpg"

# Cortamos back + spine
convert "$img" -gravity West -chop $corte\x0 front.jpg
echo "Creado front.jpg"

# Transformar
# Puntos de perspectiva
# 1------2
# 3------4

# back
margensup=100;
margenizq=100;
perspectivaback=100;
factor=`expr $altoimg / $perspectivaback`;
perspY=30;
margeninf=100;

p1b='0,0';
p1bt=$margenizq','`expr $margensup + $factor + $perspY`
p2b=$backfront',0'
p2bt=$backfront','`expr $margensup + $factor`
p3b='0,'$altoimg
p3bt=$margenizq','`expr $altoimg - $factor - $margeninf - $perspY`
p4b=$backfront','$altoimg
p4bt=$backfront','`expr $altoimg - $factor - $margeninf`

#echo \'$p1b $p1bt $p2b $p2bt $p3b $p3bt $p4b $p4bt\'
eval convert back.jpg -matte -virtual-pixel transparent \
-distort Perspective \'$p1b $p1bt $p2b $p2bt $p3b $p3bt $p4b $p4bt\' back_cover.png
echo "Creado back_cover.jpg"

# spine 213x2125
pandeospine=35;
p1s='0,0';
p1st='0,'`expr $margensup + $factor`
p2s=$wspine',0'
p2st=`expr $wspine - $pandeospine`','`expr $margensup + $pandeospine`
p3s='0,'$altoimg
p3st='0,'`expr $altoimg - $factor - $margeninf`
p4s=$wspine','$altoimg
p4st=`expr $wspine - $pandeospine`','`expr $altoimg - $factor - $margeninf + $pandeospine`

#echo \'$p1s $p1st $p2s $p2st $p3s $p3st $p4s $p4st\'
eval convert spine.jpg -matte -virtual-pixel transparent \
-distort Perspective \'$p1s $p1st $p2s $p2st $p3s $p3st $p4s $p4st\' spine_cover.png
echo "Creado spine_cover.jpg"

# front 1500x2125
margenderecho=120;
perspY=30;
p1f='0,0';
p1ft='0,'`expr $margensup + $pandeospine`
p2f=$backfront',0'
p2ft=`expr $backfront - $margenderecho`','`expr $margensup + $pandeospine - $perspY`
p3f='0,'$altoimg
p3ft='0,'`expr $altoimg - $factor - $margeninf + $pandeospine`
p4f=$backfront','$altoimg
p4ft=`expr $backfront - $margenderecho`','`expr $altoimg - $factor - $margeninf - $perspY`

#echo \'$p1f $p1ft $p2f $p2ft $p3f $p3ft $p4f $p4ft\'
eval convert front.jpg -matte -virtual-pixel transparent \
-distort Perspective \'$p1f $p1ft $p2f $p2ft $p3f $p3ft $p4f $p4ft\' front_cover.png
echo "Creado front_cover.jpg"

# caratula.png
montage -geometry +0+0 back_cover.png \
\( spine_cover.png -crop 0x0-$pandeospine+0 \) \
front_cover.png -background none caratula.png

convert -size 16x16 -font CourierNew -pointsize 18 xc:none -annotate +3+12 '©' -flop cl.png

convert -size 150x16 -font CourierNew -pointsize 18 xc:none -annotate +3+12 'Carlos Celis' cc.png

montage -geometry +0+0 -background none cl.png cc.png carloscelis.png

ancho=`identify -format "%w" caratula.png`
anchowm=`expr $ancho / 3`; #echo $anchowm

composite \( carloscelis.png -geometry $anchowm -gravity southeast -dissolve 40% \) caratula.png caratula-cpleft.png

#convert -trim img.png caratula.png
echo "Montaje hecho"
display -resize 800 caratula.png
display -resize 800 caratula-cpleft.png

Si se guarda como “caratula.sh”, la llamada sería:
> bash caratula.sh imgrf9.jpg 213

O, si usas la imagen http://images2.coveralia.com/dvd/r/Ratatouille-Caratula.jpg

Derechos de Disney


> bash caratula.sh Ratatouille-Caratula.jpg 113

Anuncios