ImageMagick is magic (avventura con CSP e Amazon Kindle Direct Publishing)

Abstract

Clip Studio Paint (CSP) e ImageMagick per preparare un fumetto per la stampa in KDP.

Ho deciso di fare questo post per fare chiarezza (per me) su questo problema e per condividere con chi ne avesse bisogno.

Premessa

Se volete sapere cos’è ImageMagick leggete il mio vecchio post. E’ una magica libreria di funzioni per manipolare immagini sia per i linguaggi di programmazione (libreria dll per chi è avvezzo a Windows) che libreria di programmi richiamabili da linea di comando utilizzabili in script batch (i bat di Windows).

Mi sono messi in testa di pubblicare in modo indipendente (auto-pubblicarmi) su Amazon con KDP. Non è oggetto di questo post discutere sul Print on sale di KDP, magari ne parlerò in un altro post quando sarò arrivato alla fine di questo percorso.

Produco web comics che da 5 anni vengono pubblicati da Tom’s Hardware. Ho da parte molto materiale che ho deciso di usare. Tutto questo materiale è stato creato con CSP in un formato non pensato per la stampa, anche se ho deciso di formattare le pagine in un formato comics (16cm x 24cm) perché non si sa mai 🙂

Per semplificare prendiamo un fumetto che ho realizzato e che vorrei auto-pubblicare. Il master è una story di CSP di 70 tavole 16cm x 24cm a 300DPI, di cui due tavole di esempio qui sotto (pag sx e pag dx):

le pagine sono impostate con un po’ di margine bianco, simmetrico, attorno (perché mi piace sbordare fuori delle vignette) e sono adatte per la pubblicazione web. Di solito le renderizzo a 72DPI a 900px di larghezza.

Funzionano molto bene anche per la realizzazione di e-book Kindle. Basta darle in pasto all’app Kindle Comic Creator e fa tutto lui. Sebbene il rapporto di dimensioni non sia esattamente quello di Kindle, si adatta bene e non c’è bisogno di nessun intervento sulle tavole.

Stampa in KDP

Per la stampa le cose cambiano, purtroppo. Tra i formati previsti da KDP non c’è 16cm x 24cm, né tanto meno un formato che abbia lo stesso rapporto di dimensioni.

Inoltre KDP (e immagino qualsiasi pagina preparata per la stampa) deve tener conto dello smarginamento (in CSP bleed), dei margini e della rilegatura, che per le pagine dispari sta a sinistra e per quelle pari a destra. In KDP devi avere a che fare con questo modello:

In figura ho rappresentato una pagina dispari o destra (con rilegatura a sinistra). In pratica devi creare una pagina (colore più scuro) di dimensioni date, in cui ci sta tutto: gabbia (dove sta il contenuto), margini, smarginamento (bleed o taglio) e rilegatura (che dipende dal numero di pagine del libro calcolata secondo una formula data). Sembra complicato, invece nella pagina di KDP è tutto molto chiaro.

Bel casino. Nessun parametro delle pagine del mio fumetto di adatta a questo. Ho pensato a varie soluzioni, eccole:

Usare un DTP

Usare un software di publshing come scribus (free). Troppo complicato, dover imparare una roba intricatissima (per me) per impaginare delle semplici JPG. E chi ce l’ha il tempo, dovendo fare tutto da solo? Escluso! Devo riuscire a fare tutto con ciò che ho a disposizione: CSP.

CSP duro e puro

Usare solo CSP. Potevo semplicemente ridefinire tutti i parametri del progetto (story basic work settings) così:

ma avrei perso simmetria delle pagine (rilegatura dx e sx) e quindi addio al master per il web e Kindle. Unica alternativa: duplicare il progetto ma sono categoricamente contrario a duplicare master, per ovvie ragioni.

Allora mi sono ingegnato usando i File Object. In sostanza sono riferimenti a oggetti esterni che stanno in una cartella che non può essere né cancellata né spostata.

  • Ho creato un nuovo progetto story con un numero di pagine pari a quello del master con le pagine impostate con tutti i parametri adatti a KDP;
  • in ciascuna pagina ho creato un File Object (menù File/Import/File Object…), agganciando il corrispondente JPG della pagina esportato dal master;
  • ridimensionando il File Object in modo da far stare la tavole dentro la gabbia come in figura.

Il master rimane tale perché se faccio una modifica, basta rigenerare uno o più file JPG esportandoli nella cartella dove ho linkato i File Object, senza cambiargli di nome, e poi fare un File Object update (menù Layer/File Object/update all) nelle pagine coinvolte.

Nel caso di aggiornamento totale (ad esempio in caso di produzione di una versione in altra lingua), con una semplice Auto Action, dove semplicemente ho registrato l’azione di menù Layer/File Object/update all, lanciata dal menù File/Batch process, riesco ad aggiornare ogni pagina mantenendo le dimensioni e il posizionamento corretto.

Perfetto. Ho mantenuto il master inalterato. Con un semplice export delle pagine di quest’ultimo riesco a formattarle in qualche modo per KPD: è sufficiente esportare in JPG a 300DPI di questo nuovo progetto mi genera tutte le tavole con margini, rilegatura alternata etc etc con i quali poi costruire il file PDF da inviare a KPD. Così (su una pagina ho evidenziato i vari parametri):

Che dire? Funziona, hai un controllo abbastanza preciso ma troppo laborioso per i miei gusti.

CSP e ImageMagick

Facendo appello alle mie reminescenze di programmatore ho deciso che il modo più pulito sarebbe stato intervenire direttamente sulle JPG prodotte dal master per generare le JPG finali con le quali creare il PDF da inviare a KDP. Un processo che doveva essere replicabile semplicemente senza generare una proliferazione di progetti CSP, cartelle da linkare etc etc: solo il master e uno script.

Vediamo come ho fatto:

  • innanzi tutto ho preso tutte le misure date da KDP su gabbia, margini, rilegatura (calcolata sul numero di pagine) e mi sono ricavato tutti i valori in pixel che mi servivano. Per ottenre questo risultato non mi sono rotto la testa con calcoli di DPI, cm e pixel, semplicemente ho preso CSP e ho impostato pagine dummy a 300DPI (risoluzione consigliata da KDP) di dimensioni date e poi ho guardato quanti pixel formassero il canvas;
  • ho calcolato come infilare le mie pagine nella gabbia e le ho esportare dal master CSP in JPG a 300DPI in modo che fossero di dimensioni (pixel) tali da entrare nella gabbia a * b. In poche parole ho deciso se dovessero essere ridimensionate sulla larghezza (a) o sulla lunghezza (b);
  • con ImageMagick ho fatto un resize del canvas, lasciando centrata e inalterata la tavola, per ogni pagina in modo da portarla alle dimensioni x * y. Notare che ho usato margini simmetrici, in realtà il lato della rilegatura ha un margine più ampio dato dal margine + un margine in più per la rilegatura. Un calcolo facile facile da fare. In questo modo ho ottenuto tutte pagine simmetriche delle dimensioni corrette senza smarginamenti e senza rilegatura destra e sinistra:
    mogrify -gravity center -extent xxy *.jpg 

    dove xxy va inteso come x (largehezza) x (simbolo) y (altezza) in pixel, naturalmente. Ovvero, nel mio caso specifico:

    mogrify -gravity center -extent 1757x2771 *.jpg
  • sempre con ImageMagick ho preso le pagine dispari (quelle a destra del libro) e ne ho ridimensionato il canvas a px * py lasciando stavolta la pagina simmetrica inalterata a sinistra. Stessa cosa, ma simmetrica, con le pagine pari (quelle a sinistra del libro):
    mogrify -gravity east -extent pxxpy *.jpg
    
    mogrify -gravity west -extent pxxpy *.jpg

    nel mio caso specifico:

    mogrify -gravity east -extent 1871x2771 *.jpg
    
    mogrify -gravity west -extent 1871x2771 *.jpg

Risultato:

ci sta tutto: margini, bleed e rilegatura, pagine destre e sinistre.

Ma il workflow deve essere anche efficiente, mica posso stare a digitare ogni volta i comandi da una finestra DOS.

Voglio riuscire a fare tutto con una selezione (col mouse) e un click (col mouse). Ecco quindi che ho prodotto il mio file batch, il cui codice è ancora provvisorio, nel quale ho parametrizzato i valori x, y, px e py per renderlo utilizzabile anche in altre situazioni:

echo off
setlocal enabledelayedexpansion
set /p w=Page Width with margin:%=%
set /p h=Page Height with margin:%=%
set /p pw=Page Width with gutter:%=%
set /p ph=Page Height with gutter:%=%
set /p t=Page type [sx/dx/all] ("all" option start at dx):%=%
if %t%==sx (
    set g=west
) else (
    set g=east
)
for %%x in (%*) do (
    mogrify -gravity center -extent %w%x%h% -gravity !g! -extent %pw%x%ph% %%x
    if %t%==all (
        if !g!==west (
            set g=east
        ) else (
            set g=west
        )
    ) 
)
pause

Questo codice va messo in un file il-nome-che-vi-pare.bat e infilato nella cartella:

C:\Users\nome-utente\AppData\Roaming\Microsoft\Windows\SendTo

ci si arriva semplicemente pigiando i tasti Windows + R e digitando shell:sendto – in figura il contenuto di Send To:

Il codice è abbastanza improvvisato, lo devo sistemare per bene e parametrizzare, ma il risultato è incoraggiante. Ovvero seleziono i file, click col destro:

che lancia lo script:

che elabora le pagine scelte:

Applicando per le sinistre e destre ottengo:

Notale l’opzione “all” che prende tutte le immagini e partendo dalla destra le alterna automaticamente.

Ah, giusto per chiosare, con il comando:

convert *.jpg kdp.pdf

genero il pdf. Oppure con l’apposito file bat che ho sistemato nel send to.

Lo script è da lavorare. Ad esempio potrei prevedere l’input di un file di testo di configurazione con tutti i parametri per non dover ridigitare ogni volta le dimensioni delle pagine.

I vantaggi sono, a parer mio molteplici: un master unico, la possibilità di replicare la creazione del file di stampa in pochi semplici passi, nessuna proliferazione di progetti su progetti, nessun uso di software aggiuntivo.

Hang loose

p.s.: il lavoro è work in progress, per cui fornirò una versione più efficiente in futuro dello script per chi fosse interessato.

Un commento

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.