Come posso convertire un PNG in un PDF in alta qualità in modo che non sia sfocato o sfocato?


54

Ci sono molte domande là fuori su come convertire un file PDF in un'immagine PNG, ma sto cercando di prendere un bel file PNG nitido e semplicemente avvolgerlo o incorporarlo in un file PDF senza farlo apparire sfocato o sfocata.

Mi rendo conto che con imagemagic installato posso fare una semplice conversione come:

convert sample.png sample.pdf

Ho anche provato molti degli interruttori per impostare la profondità e anche l'impostazione della qualità:

convert -quality 100 sample.png sample.pdf

Tuttavia, il PDF risulta ancora sfocato / sfocato.

Ecco un'immagine di esempio:

http://img406.imageshack.us/img406/6461/picture3mu.png

Come un png è nitido e pulito. Quando lo converto in PDF, anche alla stessa dimensione, appare sfocato:

Picture 4.png http://img803.imageshack.us/img803/9969/picture4at.png

Come posso convertire PNG in PDF in alta qualità?


Spero che troverai una buona risposta alla tua domanda, ma penso che sia solo una data proprietà del PDF per memorizzare le immagini in formato JPG. PNG, come quello che ci mostri, ha una qualità molto migliore di JPG.
jippie,

1
@cwd: hai provato a inserirlo in un file .tex e quindi a generare il PDF? Con \usepackage[pdftex, final]{graphicx}e \includegraphics[width=516px]{calendar.png}, per esempio.
Emanuel Berg,

2
@jippie: No, il PDF può memorizzare bitmap senza perdita di dati . Il collegamento fornisce un elenco di algoritmi di compressione anziché di formati, poiché i dati bitmap all'interno di un PDF non possono essere estratti e visualizzati direttamente come JPEG o TIFF, ma non andresti molto lontano dicendo che le immagini PDF sono JPEG (con perdita di dati) ), JPEG 2000 (anche con perdita) o una delle diverse varianti TIFF (senza perdita). Ciò che è vero, tuttavia, è che un determinato distillatore PDF può tradursi in modo predefinito nella traduzione di bitmap in formato DCT (aka JPEG) e deve essere detto invece di utilizzare un modulo senza perdita.
Warren Young,

@cwd Hai pensato di accettare qualche risposta? Penso che la risposta di user32208 sia piuttosto buona unix.stackexchange.com/a/64495/16920
Léo Léopold Hertz 준영

Risposte:


34

Prova a usare l' -densityopzione. La risoluzione predefinita è 72 punti per pollice. Quindi prova qualcosa del genere -density 300.

Per riferimento consultare -densityla documentazione delle opzioni della riga di comando di ImageMagick.


La densità sembra sicuramente essere la chiave. La scala e la densità sembrano essere inversamente correlate, quindi ho giocato con entrambe le impostazioni per ottenere un risultato ottimale sia in termini di aspetto che di dimensione del file ... Se esiste una formula impostata, vorrei saperlo.
Brian Z,

Come trovare la migliore opzione di densità? Quanto vengono persi i dati with density 300con qualche immagine di esempio? Penso che il risultato dipenda dall'input. Una nuova discussione a riguardo qui unix.stackexchange.com/q/292025/16920
Léo Léopold Hertz 준영

questo non cambia affatto la qualità per me.
Guillaume Chevalier,

19

Può essere molto complicato ottenere un buon output pdf da convert. Prova img2pdfinvece. Dal readme:

Conversione senza perdita di immagini in PDF senza ricodificare inutilmente i file JPEG e JPEG2000. Pertanto, nessuna perdita di qualità e nessun file di output di grandi dimensioni non necessario.

Per chiarire: il PDF può incorporare immagini JPEG 2000 senza perdita di dati (e la maggior parte dei lettori sembra supportarle ). Quindi questa conversione è completamente senza perdita di dati:

convert sample.png -quality 0 sample.jp2
img2pdf -o sample.pdf sample.jp2

(Supponendo che il delegato JP2 sia disponibile ovviamente: controllare identify -list format | grep JP2.)


4
Questa è la risposta migliore a IMHO qui, ma dovresti spiegare meglio il tuo punto, ovvero che il PDF può incorporare immagini JPEG 2000 senza perdita di dati. Così il comando completo per il PO sarebbe qualcosa di simile: convert sample.png -quality 0 sample.jp2; img2pdf -o sample.pdf sample.jp2. (Supponendo che il delegato JP2 sia disponibile ovviamente: controlla identify -list format | grep JP2.)
Nemo

1
Se si desidera attenersi ai repository standard su Ubuntu 14, convertsu TIFF e poi tiff2pdf.
Camille Goudeseune,

Questa è un'ottima risposta, grazie mille.
Lyubomyr Shaydariv,

@ brian-z Nella tua risposta , puoi spiegare l'argomento -quality 0?
SebMa

SebMa, @Nemo ha aggiunto quel comando, ma sto pensando che forse dovrebbe essere -quality 100invece?
Brian Z,

14

Sono quasi certo che ciò che percepisci come una perdita di qualità nel PDF, sia solo un effetto della funzione anti- alias del tuo visualizzatore PDF .

Se si utilizza evinceper visualizzare il PDF, è possibile vedere la funzione di antialiasing disattivata automaticamente con un certo zoom (300% nel mio test rapido). Puoi vederlo vividamente quando continui a zoomare: noterai che ad un certo punto, i pixel diventano improvvisamente chiaramente visibili. Questo è il punto in cui l'antialiasing deve essere stato disattivato per consentire un'ispezione dell'immagine precisa.


Hmm - ha senso, ma immagino che sperassi di riuscire a impostare l'immagine e la "vista iniziale" al 100% in modo che appaia più nitida.
Cwd,

1
@cwd Non confondere lo zoom (un modo per esaminare il file) con la vera causa del livellamento dell'immagine: l'antialiasing . L'immagine è memorizzata correttamente. È il visualizzatore di PDF che ti prende in giro. Ma potrebbe essere anche il contrario - se avessi preso alcune altre applicazioni di visualizzazione o ne avessi modificato le impostazioni. È quindi possibile visualizzare un'immagine nitida in un file PDF e un file PNG levigato in un visualizzatore di immagini.
rozcietrzewiacz,

3

Brian Z sopra ha fornito il seguente, che è il modo corretto, completamente reversibile e senza perdita di dati (supponendo che il passaggio di conversione sia in realtà senza perdita di dati, che penso sia o almeno dovrebbe essere) il modo di mettere png in un pdf. È necessario convertire da PNG a JPP senza perdita di dati per essere conformi alla struttura / lettori PDF (credo).

$ convert sample.png -quality 0 sample.jp2
$ img2pdf -o sample.pdf sample.jp2

Tuttavia vale la pena notare che è possibile fornire i file .png stessi direttamente a img2pdf come:

$ img2pdf -o sample.pdf sample-page1.png <sample-page2.png ...>

Questo produrrà il file pdf più piccolo e inserirà esadecimale raw del png negli oggetti all'interno del pdf senza perdita di dati *.

* Lo svantaggio è che questo processo non è reversibile a differenza dell'uso di jp2. I dati di intestazione / piè di pagina e intestazione / piè di pagina sono stati rimossi (il che rende i file ancora più piccoli!) Dal png che viene inserito lasciando solo i dati di immagine grezzi (i metadati che sono stati eliminati sono integrati nella struttura pdf), presumibilmente di "hackerare" il pdf per visualizzare raw PNG tecnicamente non conforme al contenitore. Viene visualizzato correttamente in Firefox e può essere visualizzato correttamente in tutti i lettori moderni, ma se png non è conforme al contenitore, i lettori rigidi potrebbero non rendere i dati png grezzi (poiché non dovrebbero aspettarseli / elaborarli correttamente).

Qui puoi trovare uno script bash estremamente grezzo che ha funzionato per me per estrarre e ricostruire i file png con hash corrispondenti a quelli usati per l'input nel pdf. https://github.com/jack4455667788/RebuildRawPNGExtractedFromPDF


2

Il PDF è un formato vettoriale (ovvero, il file contiene una descrizione delle linee da disegnare), mentre altri formati (JPG, PNG) sono formati raster (il file descrive di che colore dipingere ciascun pixel). Se fai saltare in aria un PDF, è ancora solo linee nette; JPG e PNG mostrano la pixelazione.

(OK, OK, ho mentito. Un PDF può anche essere un raster).


2

Penso che per il -densityparametro png-to-pdf dovrebbe essere piccolo piuttosto che grande. Potresti provare qualcosa del genereconvert -quality 100 -density 50


3
Nessuna densità più elevata è decisamente migliore, ho appena fatto un test, 50 risultati in molti pixel molto visibili, 300 sono belli e nitidi.
Shaunhusain,

Questo mi ha confuso, ma penso che una densità più alta si traduca in output con una risoluzione inferiore. Ciò significa che se l'output è sfocato (aliasing eccessivo, come nell'esempio nella domanda originale), ciò che si desidera è una densità inferiore . Ma se un PDF è pixelato, allora devi davvero convertirlo con una densità maggiore .
Brian Z,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.