pdf ke jpg tanpa kehilangan kualitas; gscan2pdf

51

Ketika saya mengonversi file pdf ke banyak menggunakan file jpg

convert -quality 100 file.pdf page_%04d.jpg

Saya memiliki kehilangan kualitas yang cukup besar.

Namun jika saya melakukan hal berikut, tidak ada kehilangan kualitas (nyata):

Mulai gscan2pdf, pilih file-> impor (dan pilih file.pdf). Lalu pergi ke direktori gscan2pdf sementara. Ada banyak file pnm (satu untuk setiap halaman file pdf). Sekarang saya lakukan

  for file in *.pnm; do            
  convert $file $file.jpg done

File-file jpg yang dihasilkan adalah (kira-kira) dengan kualitas yang sama dengan pdf asli (yang saya inginkan).

Sekarang pertanyaan saya adalah, apakah ada cara baris perintah sederhana untuk mengonversi file pdf ke banyak file jpg tanpa kehilangan kualitas yang nyata? (Solusi di atas terlalu rumit dan memakan waktu).

siswa
sumber
Yang tidak jelas dalam pertanyaan Anda adalah apakah Anda berbicara tentang teks dan grafik vektor di pdf Anda, atau apakah Anda bermaksud mengekstraksi gambar yang disematkan.
asoundmove

Jawaban:

92

Tidak jelas apa yang Anda maksud dengan "kehilangan kualitas". Itu bisa berarti banyak hal yang berbeda. Bisakah Anda memposting beberapa sampel untuk diilustrasikan? Mungkin memotong bagian yang sama dari versi kualitas buruk dan kualitas yang baik (sebagai PNG untuk menghindari kehilangan kualitas lebih lanjut).

Mungkin Anda perlu menggunakan -densityuntuk melakukan konversi pada dpi yang lebih tinggi:

convert -density 300 file.pdf page_%04d.jpg

(Anda dapat menambahkan -units PixelsPerInchatau -units PixelsPerCentimeterjika perlu. Salinan saya default ke ppi.)

Pembaruan: Seperti yang Anda tunjukkan, gscan2pdf(cara Anda menggunakannya) hanyalah pembungkus untuk pdfimages(dari poppler ). pdfimagestidak melakukan hal yang convertsama ketika mengisi PDF sebagai input.

convert mengambil PDF, membuatnya pada beberapa resolusi, dan menggunakan bitmap yang dihasilkan sebagai gambar sumber.

pdfimagesmelihat melalui PDF untuk gambar bitmap tertanam dan mengekspor masing-masing ke file. Ini hanya mengabaikan perintah menggambar teks atau vektor dalam PDF.

Akibatnya, jika yang Anda miliki adalah PDF yang hanya membungkus serangkaian bitmap, pdfimagesakan melakukan pekerjaan yang jauh lebih baik untuk mengekstraksinya, karena itu memberi Anda data mentah pada ukuran aslinya. Anda mungkin juga ingin menggunakan -jopsi ini pdfimages, karena PDF dapat berisi data JPEG mentah. Secara default, pdfimagesmengonversikan semuanya ke format PNM, dan mengonversi JPEG> PPM> JPEG adalah proses yang hilang.

Jadi, cobalah

pdfimages -j file.pdf page

Anda mungkin atau mungkin tidak perlu mengikuti dengan convertke .jpglangkah (tergantung pada apa bitmap memformat PDF itu menggunakan).

Saya mencoba perintah ini pada PDF yang saya buat sendiri dari serangkaian gambar JPEG. JPEG yang diekstraksi adalah byte-untuk-byte yang identik dengan gambar sumber. Anda tidak bisa mendapatkan kualitas yang lebih tinggi dari itu.

cjm
sumber
+1 Saya sangat senang saya tidak tunduk pada keangkuhan salah membaca kalimat Anda yang terinspirasi oleh saya dan benar-benar mencoba pdfimages - mungkin program yang paling berguna yang telah saya gunakan dalam beberapa bulan! Saya akan mendorong semua orang untuk mencobanya!
ixtmixilix
@ixtmixilix, saya ingin tahu. Apa yang Anda salah baca, dan bagaimana?
cjm
Cukup mengagumkan! Memecahkan hari saya. Terima kasih!
Geppettvs D'Constanzo
convertjuga tidak praktis untuk PDF besar. Misalnya, butuh 45 GB memori untuk memproses buku 700 halaman 6-megapiksel. Itu juga memakan waktu sekitar seribu kali lebih lama daripada pdfimages.
Camille Goudeseune
Untuk sebaliknya, konversi gambar ke pdf, atau lebih baik, bungkus gambar menjadi pdf, gunakan img2pdf, di sini: gitlab.mister-muffin.de/josch/img2pdf (membungkus jpg dan jpg2000 menjadi pdf).
erik
4

Seperti yang dikatakan oleh siswa pdfimagesadalah pilihan yang bagus. Dari pengalaman saya gsdan convertekspor ke kualitas yang buruk terlepas dari apakah Anda menentukan dpi yang tepat.

Tetapi jika pdf memiliki banyak lapisan per halaman pdfimagestidak berfungsi dan mengekstraksi lapisan sebagai gambar terpisah, dalam hal ini yang terbaik adalah menggunakan inskcapeuntuk mengekspor halaman seperti yang terlihat.

Ini adalah perintah yang saya gunakan:

pdftk combined_to_do.pdf burst output pg_%04d.pdf
ls ./pg*.pdf | xargs -L1 -I {}  inkscape {} -z --export-dpi=300 --export-area-drawing --export-png={}.png

Perintah pertama membagi semua halaman. Perintah kedua mengubah halaman per halaman menjadi png. Anda dapat menyimpannya png atau mengonversinya menjadi jpeg

ls ./p*.png | xargs -L1 -I {} convert {}  -quality 100 -density 300 {}.jpg

Dibandingkan dengan pdfimages,, gsdan ImageMagick's, convertsaya menemukan inkscapekualitas ekspor terbaik.

Eduard Florinescu
sumber
3

respons dari @cjm benar, tetapi jika Anda suka GUI dan tidak ingin merender semua halaman pdf, hanya untuk mendapatkan beberapa gambar, gunakan gimp.

Buka pdf dengan gimp dan Anda akan mendapatkan jendela impor dengan semua halaman yang diberikan. Pilih halaman apa pun yang Anda inginkan dan atur resolusi ke 600 pix / inch (saya menemukan 300 terlalu banyak tajam dalam banyak kasus). Simpan ke format yang Anda inginkan dengan "File / ekspor"

Bagaimanapun, harus ada bendera untuk memilih halaman yang diinginkan dari baris perintah.

Albfan
sumber
2

Melihat kode sumber gscan2pdf saya perhatikan bahwa ia menggunakan pdfimages. Jadi pdfimages file.pdf pageakan menghasilkan page-001.ppm, page-002.ppmdll.

siswa
sumber
pdfimages benar-benar berhasil
Eduard Florinescu
2

Yang tidak jelas dalam pertanyaan Anda adalah apakah Anda berbicara tentang teks dan grafik vektor di pdf Anda, atau apakah pdf Anda berisi gambar yang disematkan.

Setelah membaca tentang gscan2pdf, kira-kira file pdf Anda berisi (hanya) grafik yang disematkan.

convertpada dasarnya "mencetak" pdf Anda tanpa mempedulikan isinya. Seperti yang disarankan oleh @cjm, Anda mungkin ingin mengubah kerapatan cetak. Ini adalah satu-satunya cara untuk meningkatkan kualitas untuk grafik vektor.

Jika sebaliknya, apa yang ingin Anda lakukan adalah mengekstrak gambar yang disematkan (seperti halnya gscan2pdf tampaknya), menebak kepadatan biasanya akan mengarah pada kehilangan kualitas atau kualitas yang lebih tinggi dari yang diperlukan (dan pemborosan ruang disk). Jawabannya kemudian adalah mengekstrak gambar daripada mencetak pdf. Lihat artikel ini yang pada dasarnya menganjurkan penggunaan pdfimagesuntuk mengekstraksi gambar tanpa kehilangan kualitas.

pindahkan
sumber