Projet cool! Ce code n'est pas prêt pour la production, durci à l'épreuve des balles, mais ce qui suit sera le plus difficile à faire: ajouter des pages individuelles, déformer les pages au fur et à mesure et enfin assembler le tout. dans une séquence GIF animée.
#!/bin/bash
################################################################################
# flipbook
# Mark Setchell
#
# Give me 4 pages as parameters and I create an animated GIF book out of them
# called book.gif.
#
# Requires ImageMagick
################################################################################
# Names of the 4 pages
p0=${1:-page0.gif} # Use first arg, or "page-0.gif" if none given
p1=${2:-page1.gif}
p2=${3:-page2.gif}
p3=${4:-page3.gif}
# Get width and height of images - I assume, but do not check all are identical sizes
read w h < <(convert "$p0" -format "%w %h" info:)
((twow=w+w))
# Layout first and last flat double-page spreads
convert "$p0" "$p1" +append frame0.png
convert "$p2" "$p3" +append frame4.png
# Make right page taller and thinner and save as "distorted.png"
((deltah=20*h/100))
((deltaw=20*w/100))
((hplusdeltah=h+deltah))
((wminusdeltaw=w-deltaw))
((hplus2deltah=h+deltah+deltah))
points="0,0 0,$deltah $wminusdeltaw,0 $wminusdeltaw,0 $wminusdeltaw,$hplus2deltah $wminusdeltaw,$hplus2deltah 0,$hplus2deltah 0,$hplusdeltah"
convert "$p1" +matte -virtual-pixel transparent \
-resize ${wminusdeltaw}x${hplus2deltah}! +repage \
-distort Perspective "$points" +repage distorted.png
# Make second frame by overlaying distorted right page ontop of pages 0 and 3
convert "$p0" "$p3" +append \
-bordercolor white -border 0x$deltah \
+repage \
distorted.png \
-geometry +${w}x \
-composite frame1.png
# Make left page taller and thinner and save as "distorted.png"
((deltaw=70*w/100))
((wminusdeltaw=w-deltaw))
points="0,0 0,0 $wminusdeltaw,0 $wminusdeltaw,$deltah $wminusdeltaw,$hplus2deltah $wminusdeltaw,$hplusdeltah 0,$hplus2deltah 0,$hplus2deltah"
convert "$p2" +matte -virtual-pixel transparent \
-resize ${wminusdeltaw}x${hplus2deltah}! +repage \
-distort Perspective "$points" +repage distorted.png
# Make third frame by overlaying distorted left page ontop of pages 0 and 3
convert "$p0" "$p3" +append \
-bordercolor white -border 0x$deltah \
+repage \
distorted.png \
-geometry +${deltaw}x \
-composite frame2.png
# Make left page taller and thinner and save as "distorted.png"
((deltaw=20*w/100))
((wminusdeltaw=w-deltaw))
points="0,0 0,0 $wminusdeltaw,0 $wminusdeltaw,$deltah $wminusdeltaw,$hplus2deltah $wminusdeltaw,$hplusdeltah 0,$hplus2deltah 0,$hplus2deltah"
convert "$p2" +matte -virtual-pixel transparent \
-resize ${wminusdeltaw}x${hplus2deltah}! +repage \
-distort Perspective "$points" +repage distorted.png
# Make fourth frame by overlaying distorted right page ontop of pages 0 and 3
convert "$p0" "$p3" +append \
-bordercolor white -border 0x$deltah \
+repage \
distorted.png \
-geometry +${deltaw}x \
-composite frame3.png
# Make final animation from frame0.png...frame4.png
convert -gravity center -delay 100 frame*.png -background white -extent ${twow}x${hplus2deltah} book.gif
Donc, si vous commencez avec comme page0.gif
, page1.gif
, page2.gif
et page3.gif
...
Vous obtiendrez ce que book.gif
Si votre livre a plus de 4 pages, vous pouvez faire quatre à la fois, puis ajouter les animations tout simplement.
Mise à jour Réponse
Il semble que vous êtes assez malheureux d'avoir à utiliser Windows - ce qui est très lourd dans LOT. Je ne suis pas un expert, mais je peux me déplacer un peu dans BATCH. Je pense que le script ci-dessus est plutôt facile à traduire. Je vais vous aider à démarrer, mais vous devrez en faire vous-même - vous pouvez toujours poser une nouvelle question si vous êtes coincé - les questions sont gratuites!
La première partie du script ramasse juste les paramètres fournis sur la ligne de commande, donc il va ressembler à ceci:
REM Pick up commandline parameters
set p0=%1
set p1=%2
set p2=%3
set p3=%4
Ensuite, nous avons besoin de travailler sur la largeur et la hauteur des images d'entrée , quelque chose comme ceci:
REM Get width and height of images in variable "w" and "h"
FOR /F %%A IN ('identify -format "w=%%w\nh=%%h" %p0%') DO set %%A
Tous les trucs dans mon script original à l'intérieur ((..))
est seulement les mathématiques simples qui peuvent être faites dans Batch avec SET /A
, donc les lignes qui ressemblent à ceci:
((twow=w+w))
((deltah=20*h/100))
ressemblera à ceci:
SET /A TWOW=w+w
SET /A DELTAH=20*h/100
Le reste est juste convert
commandes - vous aurez besoin de faire quelques choses là-bas:
Remplacer continuités de ligne aux extrémités des lignes , alors changez \
en ^
Où j'utilise $variable
ou ${variable}
, remplacez-le par %variable%
Double tout %
signes que j'ai, si %
devient %%
Changement \(
-^(
- Je pense que
changement des guillemets simples '
à guillemets doubles "
Il est préférable de simplement passer au travers et de voir ce qui se passe lorsque vous convertissez chaque ligne et posez une autre question si vous ne pouvez pas la résoudre.
Il ya quelques bonnes informations à ces endroits - ss64 - general, ss64 - set command sur BATCH en général. En outre, un gars anglais appelé Alan Gibson, utilise IM avec Windows très compétent et vous pouvez voir ses scripts here, et aussi plus généralement here pour l'inspiration sur la façon d'être efficace avec IM sous Windows.
Merci Mark, vous êtes une star! Pour moi, le défi consiste à exécuter le script. J'ai trouvé que nous avions besoin de cygwin (pour Windows) et nous devions utiliser cette syntaxe: 'ls flip.sh page0.gif page1.gif page2.gif page3.gif' dans la fenêtre shell. Après l'exécution, il n'y a pas d'erreur et pas de sortie. Est-ce que je manque vraiment quelque chose? ou est-ce que je fais le mauvais chemin? Veuillez suggérer? – Shiv
Avez-vous installé ImageMagick? Si vous tapez 'convert', lancez-vous' ImageMagick' ou l'outil intégré 'convert' de Windows qui convertit les systèmes de fichiers NTFS? –
Oui, j'ai installé imageMagick et essayé de convertir un png/gif en jpg - qui fonctionne. – Shiv