pdf เป็น jpg โดยไม่สูญเสียคุณภาพ gscan2pdf


51

เมื่อฉันแปลงไฟล์ pdf เป็นไฟล์ jpg โดยใช้

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

ฉันสูญเสียคุณภาพที่ประเมินได้

อย่างไรก็ตามหากฉันทำสิ่งต่อไปนี้ไม่มีการสูญเสียคุณภาพ (ที่สังเกตได้):

เริ่ม gscan2pdf เลือกไฟล์ -> นำเข้า (และเลือก file.pdf) จากนั้นไปที่ไดเรกทอรีชั่วคราวของ gscan2pdf มีไฟล์ pnm มากมาย (หนึ่งไฟล์สำหรับทุกหน้าของไฟล์ pdf) ตอนนี้ฉันทำ

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

ไฟล์ jpg ที่ได้จะมีคุณภาพใกล้เคียงกับ pdf ต้นฉบับ (ซึ่งเป็นสิ่งที่ฉันต้องการ)

ตอนนี้คำถามของฉันคือถ้ามีวิธีบรรทัดคำสั่งง่าย ๆ ในการแปลงไฟล์ pdf เป็นไฟล์ jpg โดยไม่สูญเสียคุณภาพอย่างเห็นได้ชัด? (วิธีแก้ปัญหาข้างต้นซับซ้อนเกินไปและใช้เวลานาน)


สิ่งที่ไม่ชัดเจนในคำถามของคุณคือไม่ว่าคุณจะพูดถึงข้อความกราฟิกแบบเวกเตอร์ในไฟล์ pdf หรือว่าคุณต้องการดึงภาพที่ฝังมา
asoundmove

คำตอบ:


92

ไม่ชัดเจนว่าคุณหมายถึงอะไรโดย "การสูญเสียคุณภาพ" นั่นอาจหมายถึงสิ่งต่าง ๆ มากมาย คุณช่วยโพสต์ตัวอย่างเพื่ออธิบายได้ไหม อาจตัดส่วนเดียวกันออกจากคุณภาพไม่ดีและรุ่นคุณภาพดี (เป็น PNG เพื่อหลีกเลี่ยงการสูญเสียคุณภาพเพิ่มเติม)

บางทีคุณอาจจำเป็นต้องใช้-densityเพื่อทำการแปลงที่ dpi ที่สูงขึ้น:

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

(คุณสามารถเติม-units PixelsPerInchหรือ-units PixelsPerCentimeterถ้าจำเป็นค่าเริ่มต้นการคัดลอกของฉันเป็น ppi)

อัปเดต: ตามที่คุณชี้ให้เห็นgscan2pdf(วิธีที่คุณใช้) เป็นเพียงเสื้อคลุมสำหรับpdfimages(จากpoppler ) pdfimagesไม่ได้ทำสิ่งเดียวกันกับที่convertทำเมื่อให้ PDF เป็นอินพุต

convert ใช้ PDF ทำให้มีความละเอียดและใช้บิตแมปผลลัพธ์เป็นอิมเมจต้นฉบับ

pdfimagesดู PDF สำหรับภาพบิตแมปที่ฝังตัวและส่งออกแต่ละภาพเป็นไฟล์ มันไม่สนใจคำสั่งการวาดข้อความหรือเวกเตอร์ใด ๆ ใน PDF

ด้วยเหตุนี้หากสิ่งที่คุณมีในรูปแบบ PDF ซึ่งเป็นเพียงเสื้อคลุมรอบ ๆ ชุดของบิตแมปpdfimagesจะทำงานได้ดีกว่ามากในการแยกไฟล์ออกเพราะจะทำให้คุณได้รับข้อมูลดิบตามขนาดดั้งเดิม คุณอาจต้องการใช้-jตัวเลือกpdfimagesเนื่องจาก PDF สามารถมีข้อมูล JPEG แบบดิบได้ ตามค่าเริ่มต้นpdfimagesแปลงทุกอย่างเป็นรูปแบบ PNM และการแปลง JPEG> PPM> JPEG เป็นกระบวนการสูญเสีย

ดังนั้นลอง

pdfimages -j file.pdf page

คุณอาจจะหรืออาจไม่จำเป็นต้องทำตามนั้นด้วย a convertถึง.jpgขั้นตอน (ขึ้นอยู่กับรูปแบบบิตแมป PDF ที่ใช้)

ฉันลองคำสั่งนี้เป็น PDF ที่ฉันทำด้วยตัวเองจากลำดับของภาพ JPEG JPEG ที่แยกออกมานั้นเป็นแบบไบต์ต่อไบต์เหมือนกับภาพต้นฉบับ คุณไม่สามารถรับคุณภาพที่สูงกว่านั้นได้


+1 ฉันดีใจที่ฉันไม่ได้ส่งให้คนบ้าเห่อคนหนึ่งประโยคของคุณได้รับแรงบันดาลใจในตัวฉันและลอง pdfimages จริง ๆ - อาจเป็นโปรแกรมที่มีประโยชน์ที่สุดที่ฉันได้ใช้ในเดือนนี้! ฉันขอแนะนำให้ทุกคนลอง!
ixtmixilix

@ixtmixilix ฉันอยากรู้ คุณเข้าใจผิดอะไรและอย่างไร
cjm

น่ากลัวมาก! แก้ไขวันของฉัน ขอขอบคุณ!
Geppettvs D'Constanzo

convertยังทำไม่ได้สำหรับไฟล์ PDF ขนาดใหญ่ ตัวอย่างเช่นใช้หน่วยความจำ 45 GB ในการประมวลผลหนังสือ 700 หน้า 6 ล้านพิกเซล pdfimagesนอกจากนี้ยังใช้เวลาประมาณหนึ่งพันครั้งนานกว่า
Camille Goudeseune

สำหรับวิธีอื่น ๆ ให้แปลงภาพเป็น pdf หรือดีกว่าห่อภาพเป็น PDF ใช้ img2pdf ที่นี่: gitlab.mister-muffin.de/josch/img2pdf (ตัด jpg และ jpg2000 เป็น pdf)
erik

4

ในฐานะที่เป็นคำตอบของนักเรียนกล่าวว่าpdfimagesเป็นตัวเลือกที่ดี จากประสบการณ์ของฉันทั้งสองgsและconvertส่งออกไปยังคุณภาพต่ำโดยไม่คำนึงว่าคุณระบุ dpi ที่ถูกต้องหรือไม่

แต่ถ้า PDF มีหลายเลเยอร์ต่อหน้าpdfimagesไม่ทำงานและแยกเลเยอร์เป็นรูปภาพแยกต่างหากในกรณีนี้ควรใช้inskcapeเพื่อส่งออกหน้าเว็บตามที่เห็น

นี่คือคำสั่งที่ฉันใช้:

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

คำสั่งแรกแยกทุกหน้าคำสั่งที่สองแปลงทีละหน้าเป็น png คุณสามารถเก็บไว้ png หรือเพียงแปลงเป็น jpeg

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

เมื่อเทียบกับpdfimages, gsและ ImageMagick convertฉันพบว่าการinkscapeส่งออกมีคุณภาพดีที่สุด


3

การตอบสนองจาก @cjm นั้นถูกต้อง แต่ถ้าคุณชอบ GUI และไม่ต้องการแสดงหน้า pdf ทั้งหมดเพียงเพื่อให้ได้ภาพให้ใช้ gimp

เปิดไฟล์ PDF ด้วย gimp แล้วคุณจะได้หน้าต่างการนำเข้าพร้อมแสดงผลหน้าทั้งหมด เลือกหน้าอะไรก็ได้ที่คุณต้องการและตั้งความละเอียดเป็น 600 พิกเซล / นิ้ว (ฉันพบว่า 300 คมชัดมากเกินไปในหลายกรณี) บันทึกเป็นรูปแบบที่คุณต้องการด้วย "ไฟล์ / ส่งออก"

อย่างไรก็ตามจะต้องมีการตั้งค่าสถานะเพื่อเลือกหน้าที่ต้องการจากบรรทัดคำสั่ง



2

คำถามของคุณไม่ชัดเจนคือคุณพูดถึงข้อความและกราฟิกแบบเวกเตอร์ใน pdf ของคุณหรือว่า PDF ของคุณมีภาพที่ฝังอยู่หรือไม่

เมื่ออ่านว่า gscan2pdf เป็นเรื่องเกี่ยวกับอะไรฉันเดาว่าไฟล์ pdf ของคุณมีกราฟิกฝังตัว (เท่านั้น)

convertเป็นหลัก "พิมพ์" ไฟล์ PDF ของคุณโดยไม่คำนึงถึงสิ่งที่เป็นเนื้อหา เช่นเดียวกับ @cjm แนะนำคุณอาจต้องการเปลี่ยนความหนาแน่นในการพิมพ์ นี่เป็นวิธีเดียวที่จะเพิ่มคุณภาพให้กับกราฟิกแบบเวกเตอร์

หากสิ่งที่คุณต้องการทำคือแยกภาพที่ฝังอยู่ (คล้ายกับ gscan2pdf ดูเหมือนว่าจะทำ) การเดาว่าความหนาแน่นมักจะนำไปสู่การสูญเสียคุณภาพหรือคุณภาพที่สูงกว่าที่ต้องการ (และเสียพื้นที่ดิสก์) คำตอบก็คือการดึงภาพออกมาแทนที่จะพิมพ์ pdf ดูบทความนี้ซึ่งโดยทั่วไปสนับสนุนการใช้pdfimagesเพื่อดึงภาพโดยไม่สูญเสียคุณภาพ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.