Bagaimana saya bisa mengkonversi PNG ke PDF dalam kualitas tinggi sehingga tidak buram atau kabur?

54

Ada banyak pertanyaan di luar sana tentang bagaimana mengkonversi file PDF ke gambar PNG, tapi saya mencari untuk mengambil file PNG yang tajam dan pada dasarnya membungkusnya atau menanamkannya dalam file PDF tanpa membuatnya terlihat buram atau kabur.

Saya sadari dengan imagemagic yang terinstal saya dapat melakukan konversi sederhana seperti:

convert sample.png sample.pdf

Saya juga mencoba banyak sakelar untuk mengatur kedalaman, dan juga pengaturan kualitas:

convert -quality 100 sample.png sample.pdf

Namun PDF masih terlihat buram / kabur.

Berikut contoh gambar:

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

Sebagai png itu garing dan bersih. Ketika saya mengonversinya menjadi PDF, bahkan pada ukuran yang sama terlihat buram:

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

Bagaimana saya bisa mengkonversi PNG ke PDF dalam kualitas tinggi?

cwd
sumber
Saya harap Anda menemukan jawaban yang baik untuk pertanyaan Anda, tetapi saya pikir itu hanya properti PDF untuk menyimpan gambar dalam format JPG. PNG, seperti yang Anda tunjukkan kepada kami, memiliki kualitas yang jauh lebih baik daripada JPG.
jippie
1
@ cwd: Apakah Anda mencoba memasukkannya ke dalam file .tex, dan kemudian menghasilkan PDF? Dengan \usepackage[pdftex, final]{graphicx}dan \includegraphics[width=516px]{calendar.png}, misalnya.
Emanuel Berg
2
@ jippie: Tidak, PDF dapat menyimpan bitmap tanpa kehilangan . Tautan ini memberikan daftar algoritma kompresi daripada format, karena data bitmap di dalam PDF tidak dapat diekstraksi dan dilihat secara langsung sebagai JPEG atau TIFF, tetapi Anda tidak akan salah mengatakan bahwa gambar PDF adalah JPEG (lossy) ), JPEG 2000 (juga lossy) atau salah satu dari beberapa varian TIFF (lossless). Apa yang benar, bagaimanapun, adalah bahwa penyuling PDF yang diberikan mungkin default untuk menerjemahkan bitmap ke dalam bentuk DCT (alias JPEG), dan harus diberitahu untuk menggunakan formulir lossless saja.
Warren Young
@ cwd Sudahkah Anda berpikir untuk menerima jawaban? Saya pikir user32208 jawabannya 's agak baik unix.stackexchange.com/a/64495/16920
Léo Leopold Hertz 준영

Jawaban:

34

Coba gunakan -densityopsi. Resolusi default adalah 72 titik per inci. Jadi cobalah sesuatu seperti -density 300.

Untuk referensi, lihat -densitydi dokumentasi opsi baris perintah ImageMagick.

user32208
sumber
Kepadatan tampaknya menjadi kuncinya. Skala dan kepadatan tampaknya terkait terbalik, jadi saya telah bermain dengan kedua pengaturan untuk mendapatkan hasil yang optimal dalam hal penampilan dan ukuran file ... Jika ada rumus yang ditetapkan, saya berharap saya tahu itu.
Brian Z
Bagaimana menemukan opsi kepadatan terbaik? Berapa banyak data yang hilang with density 300dengan contoh gambar? Saya pikir hasilnya tergantung pada input. Utas baru tentang hal ini di sini unix.stackexchange.com/q/292025/16920
Léo Léopold Hertz 준영
ini tidak mengubah kualitas sama sekali untuk saya.
Guillaume Chevalier
19

Ini bisa sangat rumit untuk mendapatkan hasil pdf yang bagus convert. Coba img2pdfsaja. Dari readme:

Konversi gambar yang hilang ke PDF tanpa perlu menyandikan ulang file JPEG dan JPEG2000. Dengan demikian, tidak ada kehilangan kualitas dan tidak ada file output besar yang tidak perlu.

Untuk memperjelas: PDF dapat menyematkan gambar JPEG 2000 lossless (dan kebanyakan pembaca tampaknya mendukungnya ). Jadi konversi ini benar-benar tanpa kerugian:

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

(Dengan asumsi delegasi JP2 tersedia tentu saja: cek identify -list format | grep JP2.)

Brian Z
sumber
4
Ini adalah IMHO jawaban terbaik di sini, tetapi Anda harus menjelaskan maksud Anda dengan lebih baik, yaitu bahwa PDF dapat menyematkan gambar JPEG 2000 yang lossless. Jadi perintah penuh untuk OP akan menjadi sesuatu seperti: convert sample.png -quality 0 sample.jp2; img2pdf -o sample.pdf sample.jp2. (Dengan asumsi delegasi JP2 tersedia tentu saja: cek identify -list format | grep JP2.)
Nemo
1
Jika Anda ingin tetap menggunakan repositori standar pada Ubuntu 14, converttiff dan kemudian tiff2pdf.
Camille Goudeseune
Ini jawaban yang bagus, terima kasih banyak.
Lyubomyr Shaydariv
@ brian-z Dalam jawaban Anda , bisakah Anda menjelaskan argumennya -quality 0?
SebMa
SebMa, @Nemo menambahkan perintah itu, tapi saya pikir itu mungkin yang seharusnya -quality 100?
Brian Z
14

Saya hampir yakin bahwa apa yang Anda anggap sebagai kehilangan kualitas dalam PDF, hanyalah efek dari fitur anti- aliasing dari pemirsa PDF Anda .

Jika Anda menggunakan evinceuntuk melihat PDF, Anda dapat melihat fitur anti-aliasing secara otomatis dimatikan pada zoom tertentu (300% dalam tes cepat saya). Anda dapat melihatnya dengan jelas ketika Anda terus memperbesar - Anda akan melihat bahwa pada suatu titik, piksel tiba-tiba terlihat jelas. Itulah titik ketika anti-aliasing harus dimatikan untuk memungkinkan inspeksi gambar yang tepat.

rozcietrzewiacz
sumber
Hmm - itu masuk akal tapi saya kira saya berharap bisa entah bagaimana mengatur gambar dan "tampilan awal" menjadi 100% sehingga terlihat lebih tajam.
cwd
1
@ cwd Jangan salah zoom (cara memeriksa file) dengan penyebab sebenarnya perataan gambar: anti-aliasing . Gambar disimpan dengan benar. Ini adalah penampil PDF yang membodohi Anda. Tetapi bisa juga sebaliknya - jika Anda akan mengambil beberapa aplikasi tampilan lain atau mengubah pengaturannya. Anda kemudian dapat melihat gambar yang tajam dalam file PDF dan file PNG yang dihaluskan dalam penampil gambar.
rozcietrzewiacz
3

Brian Z di atas memberikan yang di bawah ini, yang merupakan cara yang benar, sepenuhnya dapat dibalik, dan tanpa kehilangan (dengan asumsi langkah konversi sebenarnya adalah tanpa kerugian, yang saya pikir itu atau paling tidak seharusnya) cara untuk memasukkan png ke dalam pdf. Anda diharuskan mengkonversi dari png ke lossless jp2 agar sesuai dengan struktur PDF / pembaca (saya pikir).

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

Namun perlu dicatat bahwa Anda dapat menyediakan file .png sendiri langsung ke img2pdf seperti:

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

Ini akan menghasilkan file pdf terkecil, dan akan memasukkan hex mentah png ke objek-objek di dalam pdf tanpa kehilangan *.

* Kekurangannya, apakah proses ini tidak reversibel tidak seperti menggunakan jp2. Data header / footer dan dan chunk header / footer telah dilucuti (yang sebenarnya membuat file lebih kecil!) Dari png yang dimasukkan hanya menyisakan data gambar mentah (metadata yang dihapus diintegrasikan ke dalam struktur pdf), mungkin untuk "meretas" pdf untuk menampilkan png mentah yang secara teknis tidak sesuai dengan wadah. Ini menampilkan baik-baik saja di firefox, dan mungkin menampilkan baik-baik saja di semua pembaca modern, tetapi jika png tidak sesuai dengan wadah maka pembaca yang ketat tidak dapat membuat data png mentah (karena mereka seharusnya tidak mengharapkannya / memprosesnya dengan benar).

Di sini Anda dapat menemukan skrip bash yang sangat mentah yang berhasil bagi saya untuk mengekstrak dan merekonstruksi file png dengan hash yang cocok dengan yang digunakan untuk input ke pdf. https://github.com/jack4455667788/RebuildRawPNGExtractedFromPDF

Jack Hadley
sumber
2

PDF adalah format vektor (yaitu, file berisi deskripsi garis untuk menggambar), sedangkan format lain (JPG, PNG) adalah format raster (file tersebut menjelaskan warna apa yang akan dicat setiap piksel). Jika Anda meledakkan PDF, itu masih berupa garis-garis tajam; JPG dan PNG menunjukkan pixelation.

(OK, OK, saya berbohong. PDF juga bisa menjadi raster).

vonbrand
sumber
2

Saya pikir untuk -densityparameter png-ke-pdf harus kecil daripada besar. Anda dapat mencoba sesuatu seperticonvert -quality 100 -density 50

pengguna39384
sumber
3
Kepadatan yang lebih tinggi tidak pasti lebih baik, baru saja melakukan tes, 50 hasil dalam banyak piksel yang sangat terlihat, 300 bagus dan tampak segar.
shaunhusain
Ini membingungkan saya, tetapi saya pikir kepadatan yang lebih tinggi menghasilkan keluaran dengan resolusi lebih rendah. Itu berarti bahwa jika outputnya fuzzy (over-alias, seperti contoh dalam pertanyaan asli) maka kepadatan yang lebih rendah adalah apa yang Anda inginkan. Tetapi jika PDF pixelated maka memang Anda perlu mengkonversi dengan kepadatan yang lebih tinggi .
Brian Z