it-swarm-id.com

pdf ke jpg tanpa kehilangan kualitas; gscan2pdf

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 mengkonversi file pdf ke banyak file jpg tanpa kehilangan kualitas yang nyata? (Solusi di atas terlalu rumit dan memakan waktu).

56
student

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 baik (sebagai PNG untuk menghindari kehilangan kualitas lebih lanjut).

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

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

(Anda dapat menambahkan -units PixelsPerInch Atau -units PixelsPerCentimeter Jika perlu. Salin saya default ke ppi.)

Pembaruan: Seperti yang Anda tunjukkan, gscan2pdf (Cara Anda menggunakannya) hanyalah pembungkus untuk pdfimages (dari poppler ). pdfimages tidak melakukan hal yang sama seperti yang dilakukan convert ketika diberi PDF sebagai input.

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

pdfimages melihat melalui PDF untuk gambar bitmap yang disematkan 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, pdfimages akan melakukan pekerjaan yang jauh lebih baik untuk mengekstraksinya, karena itu memberi Anda data mentah pada saat itu. ukuran asli. Anda mungkin juga ingin menggunakan opsi -j Untuk pdfimages, karena PDF dapat berisi data JPEG mentah. Secara default, pdfimages mengonversi semuanya ke format PNM, dan mengonversi JPEG> PPM> JPEG adalah proses yang merugi.

Jadi, cobalah

pdfimages -j file.pdf page

Anda mungkin atau mungkin tidak perlu mengikutinya dengan langkah convert ke .jpg (Tergantung pada format bitmap apa yang digunakan PDF).

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.

101
cjm

Seperti jawaban siswa mengatakan pdfimages adalah pilihan yang baik. Dari pengalaman saya, gs dan convert mengekspor ke kualitas yang buruk terlepas dari apakah Anda menentukan dpi yang tepat.

Tetapi jika pdf memiliki banyak lapisan per halaman pdfimages tidak berfungsi dan mengekstraksi lapisan sebagai gambar terpisah, dalam hal ini yang terbaik adalah menggunakan inskcape untuk 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, gs, dan ImageMagick's convert Saya menemukan ekspor inkscape terbaik dalam kualitas.

4

respons dari @cjm benar, tetapi jika Anda menyukai 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.

3
albfan

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

2
student

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.

convert pada dasarnya "mencetak" pdf Anda tanpa mempedulikan apa 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 dibutuhkan (dan pemborosan ruang disk). Jawabannya kemudian adalah mengekstrak gambar daripada mencetak pdf. Lihat artikel ini yang pada dasarnya menganjurkan penggunaan pdfimages untuk mengekstraksi gambar tanpa kehilangan kualitas.

2
asoundmove