ImageMagick est un logiciel en ligne de commande. Il permet de réaliser de nombreuses manipulations d’images. Il propose une suite d’outils assez intéressants comme la mise à l’échelle, la modification de l’orientation, l’application d’un filtre et j’en passe. Il est possible d’utiliser ImageMagick depuis des langages comme le PHP, par exemple pour réaliser une miniature lors de l’upload d’un pdf.
Installation du logiciel ImageMagick
Pour récupérer l’outils sous linux, il suffit de faire un simple :
sudo apt install imagemagick
Création d’un pdf à partir de plusieurs images
Une fois l’installation effectuée, le plus dur est fait. On va donc appeler la commande convert du logiciel ImageMagick, elle permet d’effectuer des modifications sur une ou plusieurs images. On peut par exemple créer des gifs. Il suffit de faire :
convert -delay 100 -loop 0 *.jpg animation.gif
- L’option -delay : permet de spécifier un temps de défilement entre les images en centièmes de seconde
- L’option -loop : permet de préciser le nombre de boucles à effectuer, si l’option est à 0, c’est une lecture en continu
Ce qui nous donne par exemple :
Créer des PDFs grâce à ImageMagick
Pour ma part le but était de pouvoir lire mes mangas sur ma liseuse et ceci facilement. Je vais donc prendre en exemple un manga assez connu : Hajime no Ippo. Pourquoi celui-ci, tout simplement car il est possible de trouver les tomes non-licenciés en France sur ce site : hajime-no-ippo.net. On peut télécharger les tomes 69 à 85. Je vous propose d’en télécharger un ou en tout cas celui d’un manga que vous appréciez. Une fois l’archive téléchargée et extraite.
On peut directement utiliser la commande :
convert *.jpg myChapter.pdf
Toutefois, si on laisse cette option par défaut les pdfs peuvent prendre une taille assez colossale, en prenant l’exemple sur le tome 68 de HNI (Hajime no Ippo), j’arrive à 50 Mo, après la création du pdf.
Réduire la taille de nos PDFs
On va donc préciser l’option -resize x%, cela va nous permettre de modifier une image dont la taille va varier en fonction du pourcentage désiré. Par exemple un -resize 50%, va réduire de moitié la taille des images. Bien sur, si on précise un pourcentage trop fort cela peut amoindrir la qualité du pdf final, à vous de trouver le juste milieu entre poids et qualité. Ce qui nous donne :
convert *.jpg -resize 70% myChapter.pdf
Pour ma part, je convertis donc avec un resize de 70%, ce qui me donne des pdf de 20 Mo pour 170 pages.
Une petite fonction bash
Afin de simplifier la commande à rentrer, je me suis réalisé un script bash tout simple, que voici :
function imagestopdf() { count=`ls *.jpg 2>/dev/null | wc -l` if [ "$count" -gt 5 ] then ext="jpg" else ext="png" fi convert "*.$ext" -resize 70% $1.pdf }
Afin de ne pas avoir à préciser l’extension des fichiers (j’ai déjà vu télécharger des scans avec des extensions en png…), je compte le nombre d’éléments dont l’extension est .jpg, s’il y en a plus de 5 (normalement un scan, c’est au moins 7-8 pages), alors l’extension est bien jpg, sinon c’est du png. Enfin on lance la commande qu’on a vue plus tôt, en précisant le nom du fichier de sortie.
Maintenant pour créer votre pdf à partir de vos scans, il suffit de vous rendre dans le dossier désiré et de faire :
imagestopdf myScan.pdf
Mais, on peut encore améliorer le script :3 ! Si vous téléchargez plusieurs tomes d’un coup une vingtaine par exemple, ça va devenir très vite fastidieux, on peut éviter ça. Il suffit de placer tous nos tomes dans un dossier, on va alors itérer sur chaque tome et se servir du nom de celui-ci pour créer notre pdf. Voici donc ce que l’on va obtenir :
function imagestopdf() { for f in * do echo "Traitement du futur pdf : $f" count=`ls "$f"/*.jpg 2>/dev/null | wc -l` if [ "$count" -gt 1 ] then ext="jpg" else ext="png" fi convert "$f/*.$ext" -resize 70% -set units PixelsPerInch "$f".pdf done }
Il n’y a pas grand chose à dire, il suffit de lancer la commande imagestopdf dans le dossier et elle fera tout le boulot pour nous. Attention mine de rien, cela consomme pas mal de mémoire !
Faites-le transfert sur votre liseuse et bonne lecture 😀 !