J'ai généré 60 illustrations pour deux livres. Aucune n'était imprimable.
J'ai généré soixante illustrations pour deux livres cette semaine. Aucune n'était imprimable, et le problème n'avait rien à voir avec leur qualité.
Les générateurs d'images sortent en résolution écran. Google Flow me rendait du 896 par 1200 pixels. Sur une page de 8,5 par 11 pouces, ça fait 107 points par pouce. Un imprimeur en demande 300. Ce n'est pas un détail de finition, c'est un facteur trois qui décide si le livre existe ou pas.
Agrandir ne marche pas
Le premier réflexe est d'agrandir. C'est le mauvais.
Un agrandissement, même en Lanczos, invente des pixels intermédiaires entre ceux qu'il connaît. Sur une photo ça passe, l'œil accepte le flou. Sur du trait noir sur blanc, chaque contour devient une transition grise molle. À l'écran on ne voit rien. À l'impression, tous les traits ont l'air tremblants, et un livre de coloriage n'est fait que de traits.
La bonne réponse : ne pas agrandir, retracer
Le trait au noir pur est le cas idéal de la vectorisation. Il n'y a pas de dégradé à interpréter, pas de texture à préserver : juste des formes fermées, noires, sur du blanc.
potrace prend le bitmap et en ressort des courbes de Bézier. Une fois que l'illustration est décrite par des courbes plutôt que par des pixels, la résolution n'existe plus comme contrainte. Elle se rend nette à n'importe quelle taille.
La chaîne complète tient en quatre étapes :
- Seuillage à noir et blanc purs
- Suréchantillonnage par trois, pour que le traceur voie des bords lisses plutôt qu'un escalier de pixels
potracevers un PDF vectoriel- Page au format de coupe exact, avec le blanc tournant
Résultat mesuré : 49 kilo-octets par page, indépendant de la résolution, qui se rend en 2550 par 3300 pixels exactement à 300 DPI. Les écailles d'un dragon, les joints de pierre, les cornes : tout survit, et le trait est plus net que sur l'original.
Un réglage compte plus que les autres. turdsize dit à potrace de supprimer les taches en dessous d'une certaine taille. Sur du trait épais et simple, une valeur de 8 nettoie les poussières de compression. Sur du trait détaillé, la même valeur efface les écailles. J'ai fini avec deux profils, un par style de dessin.
Le vrai piège n'est pas la résolution
Une fois la vectorisation réglée, j'ai découvert que le problème sérieux était ailleurs.
Sur un lot de quatorze planches, trois étaient inutilisables. Pas mal dessinées : le modèle avait rendu une photographie d'un livre de coloriage posé sur un bureau. Page bombée, ombre portée, fond sombre, parfois un mot imprimé sur la page. Techniquement une image de livre de coloriage. Commercialement, un déchet.
Le mode d'échec est régulier et il se mesure. J'ai comparé quatre indicateurs entre les bonnes planches et les ratées :
| Mesure | Planches valides | Rendus « photo » |
|---|---|---|
| Bord extérieur blanc | 97 à 100 % | 0 % |
| Pixels gris | 1 à 3 % | 70 à 77 % |
| Écart colorimétrique | 0,1 | 4,4 à 5,3 |
La séparation est franche. Un contrôle automatique de quelques lignes attrape chaque ratée sans jamais rater une bonne planche, ce qui compte quand on en produit soixante.
Deux erreurs de calibrage, et ce qu'elles m'ont appris
Mon premier réglage utilisait le bord blanc comme test principal. Il rejetait une illustration parfaitement bonne, simplement parce que le dessin touchait les bords de l'image. Le bord n'est pas un signal fiable : une composition en pleine page le déclenche légitimement.
Le vrai discriminant est le gris. Une photo d'objet a des ombres partout, un dessin au trait n'en a nulle part.
Puis j'ai changé de style de dessin, et le seuil de gris s'est mis à rejeter tout le lot. Un trait détaillé produit beaucoup plus d'arêtes adoucies qu'un trait épais : 14 à 19 % de gris au lieu de 1 à 5, sans que l'image soit moins bonne. Les vraies ratées restaient à 70 et plus, donc la frontière existait toujours, elle n'était simplement pas au même endroit.
Un seuil calibré sur un style ne se transfère pas à un autre. C'est évident écrit comme ça, et ça m'a coûté deux allers-retours.
Enfin, en regardant les planches montées, j'ai trouvé un trait parasite en travers d'une page. Le générateur dessine parfois un cadre autour de l'illustration, parfois seulement un côté. Vectorisé tel quel, ça donne une barre en travers de la page imprimée. Sur les cinquante-deux planches produites, vingt-trois avaient un cadre. Une détection automatique cherche maintenant, dans une bande le long de chaque bord, une ligne presque entièrement encrée, et recadre juste à l'intérieur. Effet secondaire agréable : l'illustration occupe mieux la page.
Ce que je retiens
La partie créative n'a jamais été le goulot d'étranglement. Générer soixante illustrations correctes a pris une poignée de minutes et n'a rien coûté.
Ce qui prend du temps, c'est tout ce qui sépare une image d'un objet imprimable : la résolution, le contrôle qualité, les cadres parasites, la mise en page, les polices incorporées, les dimensions au millième de pouce. Rien de spectaculaire, et c'est exactement là que se joue la différence entre un fichier qui part chez l'imprimeur et un dossier d'images sur un disque.
Le pipeline complet fait quatre scripts. Il génère, mesure, trie, vectorise et monte. Chaque étape échoue bruyamment plutôt que de laisser passer une page ratée, parce qu'un livre incomplet imprimé coûte infiniment plus cher qu'un script qui s'arrête.
