2015-09-23 1 views
0

Je souhaite convertir un PDF ou une séquence d'images en un effet de bascule dans GIF (similaire à celui ci-dessous).Conversion de PDF/images en un effet de bascule dans GIF

enter image description here

Est-il que je pourrais utiliser des logiciels disponibles à portée de main pour produire cette sortie? ou dois-je écrire des scripts en utilisant imageMagicK? veuillez suggérer?

Merci d'avance!

Répondre

1

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 ...

enter image description here

enter image description here

enter image description here

enter image description here

Vous obtiendrez ce que book.gif

enter image description here

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.

+0

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

+0

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? –

+0

Oui, j'ai installé imageMagick et essayé de convertir un png/gif en jpg - qui fonctionne. – Shiv