ImageMagick – Couper une image en deux pages et joindre en PDF

Créé le: 2016/12/18 ; Révisé le: 2016/12/18
Thumbnail

Récemment, j’ai regardé avec ma femme pour publier son livre pour enfant sur CreateSpace. Elle avait créé des images dans InkScape qui recouvrent les deux pages lorsque le livre est ouvert. Les fichiers sont exportés de InkScape en PNG et CreateSpace désire recevoir un PDF avec une page par page.
Ce qu’il fallait faire: (00:45)

  1. Découper chaque image en deux.
  2. Ajouter une image de départ (puisque le dos de la couverture ne peut pas être imprimée dessus) et une page de fin (même raison).
  3. Compiler le tout dans un PDF.

Avant d’aller plus loin, voici quelques détails techniques pour les différentes mesures du livre selon les requis du monde de l’impression: (01:35)

  • Le livre sera au format de 7 par 10 pouces.
  • Comme le fond de l’image n’est pas blanc et qu’il est possible que la coupe de la page ne soit pas exacte au millimètre près, la technique de bleeding (je n’ai pas trouvé le mot français) est utilisée.
    • Cela consiste à avoir une image plus grande que la surface d’impression. Ainsi, la coupe se fera sur la partie où il y a l’image.
    • Pour ce faire, il faut ajouter 0.125 pouces sur chaque côté non-interne:
      • Sur la page de gauche: le haut, le côté gauche et le bas.
      • Sur la page de droite: le haut, le côté droit et le bas.
    • Pour la page seule du point #2, cela fait des dimensions de 7.125 par 10.25 pouces.
      • Soit 7 pour la page de droite + 0.125 pour le bleed de droit
      • Et 10 pour la hauteur de la page + 0.125 pour le bleed du haut + 0.125 pour le bleed du bas.
    • Pour une image qui prend deux pages, le point #1, cela fait des dimensions de 14.25 par 10.25 pouces.
      • Soit 7 pour la page de gauche + 7 pour la page de droite + 0.125 pour le bleed de gauche + 0.125 pour le bleed de droit
      • Et 10 pour la hauteur des pages + 0.125 pour le bleed du haut + 0.125 pour le bleed du bas.
  • Il faut utiliser une résolution d’au moins 300 PPP (Points Par Pouces ou en anglais DPI). Il suffit de faire la multiplication des dimensions avec le bleed par 300 pour avoir le nombre de pixels à exporter.
    • Cela veut dire que la page seule du point #2 sera de 2137.5 par 3075 pixels (il est préférable d’arrondir vers plus d’image, alors ce sera 2138 par 3075 pixels)
    • Puis, pour les deux pages, du point #1, se sera de 4275 par 3075 pixels . Ces pages seront coupées en deux avec des dimensions de la page seule, soit 2138 par 3075 pixels .
      • Étant donné qu’il faudrait couper un pixel en deux, on va simplement avoir une colonne au centre de la page qui va être présente sur la page de gauche et celle de droite. Comme ce n’est qu’un pixel de large, ce ne sera pas visible au commun des mortels.
  • Les coupes de l’image exportée se feront donc ainsi:
    • Pour la page de gauche, on prend tout ce qui se trouve complètement à gauche pour une largeur et hauteur de 2138 par 3075 pixels.
    • Pour la page de droite, on avance de 2137 pixels vers la droite et prend tout ce qui suit pour une largeur et hauteur de 2138 par 3075 pixels.
      • 2137 + 2138 = 4275 , ce qui est la largeur de l’image au complet.

Pour que le script fonctionne, placez toutes vos images exportées dans le répertoire « output » comme suit: (05:13)

  • output/premiere.png
  • output/pleine-01.png
  • output/pleine-02.png
  • output/pleine-03.png
  • output/derniere.png

Il est important de mettre le « 0 » si vous avez plus de 10 pages, sinon en listant en ordre alphabétique, la page 11 va venir avant la page 2. En mettant le « 0 », la page « 02 » est avant la page « 11 », tel que désiré.

ImageMagick vient normalement préinstallé sur Linux alors le script qui suit doit être exécuté sur Linux à moins que vous aillez une installation Cygwin ou que vous avez joué avec Bash pour Windows.

#!/bin/bash

set -e

# Créer les répertoires "cut" et "process" pour mettre les images coupées et le PDF final dedans respectivement.
mkdir -p cut process
rm -f cut/* process/*

echo ---[ Cutting the files ]---
for i in $(cd output;ls pleine-*.png | cut -d '.' -f 1); do
 echo Cutting: $i
 convert output/$i.png -crop 2138x3075+0+0 +repage cut/$i-left.png
 convert output/$i.png -crop 2138x3075+2137+0 +repage cut/$i-right.png
done

echo ---[ Creating the PDF ]---
convert output/premiere.png cut/*.png output/derniere.png process/book.pdf