ฉันจะแปลง PNG เป็น PDF ด้วยคุณภาพสูงได้อย่างไรจึงไม่พร่ามัวหรือเลือน


54

มีคำถามมากมายเกี่ยวกับการแปลงไฟล์ PDF เป็นภาพ PNG แต่ฉันกำลังมองหาไฟล์ PNG ที่คมชัดและเพียงแค่หุ้มมันหรือฝังในไฟล์ PDF โดยไม่ทำให้มันพร่ามัวหรือ เลือน

ฉันตระหนักถึงการติดตั้ง imagemagic ฉันสามารถทำการแปลงง่าย ๆ เช่น:

convert sample.png sample.pdf

ฉันได้ลองสวิตช์มากมายเพื่อตั้งค่าความลึกและการตั้งค่าคุณภาพ:

convert -quality 100 sample.png sample.pdf

อย่างไรก็ตาม PDF ยังคงออกมาดูพร่ามัว / เลือน

นี่คือภาพตัวอย่าง:

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

ในฐานะที่เป็น png มันคมชัดและสะอาด เมื่อฉันแปลงเป็น PDF แม้ในขนาดเดียวกันมันก็ดูพร่ามัว:

รูปภาพ 4.png http://img803.imageshack.us/img803/9969/picture4at.png

ฉันจะแปลง PNG เป็น PDF ด้วยคุณภาพสูงได้อย่างไร


ฉันหวังว่าคุณจะพบคำตอบที่ดีสำหรับคำถามของคุณ แต่ฉันคิดว่ามันเป็นเพียงคุณสมบัติของ PDF เพื่อเก็บภาพในรูปแบบ JPG PNG เช่นเดียวกับที่คุณแสดงให้เราเห็นมีคุณภาพดีกว่า JPG มาก
jippie

1
@cwd: คุณพยายามใส่ไว้ในไฟล์. tex แล้วสร้าง PDF หรือไม่ ด้วย\usepackage[pdftex, final]{graphicx}และ\includegraphics[width=516px]{calendar.png}ตัวอย่างเช่น
Emanuel Berg

2
@ jippie: ไม่PDF สามารถเก็บบิตแมปแบบไม่สูญเสียได้ ลิงก์นี้ให้รายการของอัลกอริทึมการบีบอัดแทนที่จะเป็นรูปแบบเนื่องจากข้อมูลบิตแมปใน PDF ไม่สามารถแตกออกและดูได้โดยตรงในรูปแบบ JPEG หรือ TIFF แต่คุณจะไม่ผิดไปมากหากพูดว่ารูปภาพ PDF นั้นเป็น JPEG ), JPEG 2000 (สูญหายเช่นกัน) หรือหนึ่งในหลาย ๆ รูปแบบ TIFF (ไม่เสียเงิน) อย่างไรก็ตามสิ่งที่เป็นจริงคือเครื่องกลั่น PDF ที่กำหนดอาจใช้ค่าเริ่มต้นในการแปลบิตแมปเป็นรูปแบบ DCT (aka JPEG) และต้องบอกให้ใช้แบบฟอร์มที่ไม่มีการสูญเสียแทน
Warren Young

@cwd คุณคิดว่าจะยอมรับคำตอบบ้างไหม? ผมคิดว่าuser32208คำตอบ 's ค่อนข้างดีunix.stackexchange.com/a/64495/16920
LéoLéopoldเฮิรตซ์ 준 영

คำตอบ:


34

ลองใช้-densityตัวเลือก ความละเอียดเริ่มต้นคือ 72 จุดต่อนิ้ว -density 300จึงพยายามบางอย่างเช่น

สำหรับการอ้างอิงโปรดดูที่-densityเอกสารคู่มือตัวเลือกบรรทัดคำสั่งของ ImageMagick


ความหนาแน่นดูเหมือนจะเป็นกุญแจสำคัญ ขนาดและความหนาแน่นดูเหมือนจะสัมพันธ์กันดังนั้นฉันได้เล่นกับทั้งสองการตั้งค่าเพื่อให้ได้ผลลัพธ์ที่ดีที่สุดทั้งในแง่ของลักษณะที่ปรากฏและขนาดไฟล์ ... หากมีสูตรที่กำหนดไว้ฉันหวังว่าฉันจะรู้
Brian Z

วิธีการค้นหาตัวเลือกความหนาแน่นที่ดีที่สุด? ข้อมูลหายไปมากน้อยแค่ไหนในwith density 300ภาพตัวอย่าง? ฉันคิดว่าผลลัพธ์ขึ้นอยู่กับอินพุต มีเธรดใหม่เกี่ยวกับที่นี่unix.stackexchange.com/q/292025/16920
LéoLéopold Hertz 준영

นี่ไม่เปลี่ยนคุณภาพเลยสำหรับฉัน
Guillaume Chevalier

19

convertมันจะมีความซับซ้อนมากที่จะได้รับผลดีจากไฟล์ PDF ลองimg2pdfแทน จาก readme:

การแปลงภาพเป็น PDF แบบไม่เสียค่าใช้จ่ายโดยไม่จำเป็นต้องเข้ารหัสไฟล์ JPEG และ JPEG2000 อีกครั้งโดยไม่จำเป็น ดังนั้นไม่สูญเสียคุณภาพและไม่มีไฟล์เอาต์พุตขนาดใหญ่ที่ไม่จำเป็น

ในการชี้แจง: PDF สามารถฝังภาพ JPEG 2000 ที่ไม่มีการสูญเสียได้ (และผู้อ่านส่วนใหญ่ดูเหมือนจะให้การสนับสนุนพวกเขา ) ดังนั้นการแปลงนี้จะไม่สูญเสียอย่างสมบูรณ์:

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

(สมมติว่ามีผู้แทน JP2 อยู่แน่นอน: ตรวจสอบidentify -list format | grep JP2)


4
นี่คือ IMHO คำตอบที่ดีที่สุดที่นี่ แต่คุณควรอธิบายจุดของคุณให้ดีขึ้นนั่นคือ PDF สามารถฝังภาพ JPEG 2000 ที่ไม่สูญเสียได้ ดังนั้นคำสั่งเต็มรูปแบบสำหรับ OP convert sample.png -quality 0 sample.jp2; img2pdf -o sample.pdf sample.jp2จะเป็นสิ่งที่ชอบ (สมมติว่ามีผู้แทน JP2 อยู่แน่นอน: ตรวจสอบidentify -list format | grep JP2)
Nemo

1
หากคุณต้องการที่จะติดไปยังที่เก็บมาตรฐานบน Ubuntu 14 convertถึง TIFF tiff2pdfแล้ว
Camille Goudeseune

นี่เป็นคำตอบที่ดีมากขอบคุณมาก ๆ
Lyubomyr Shaydariv

@ brian-z ในคำตอบของคุณคุณช่วยอธิบายอาร์กิวเมนต์ได้-quality 0ไหม?
SebMa

SebMa, @Nemo เพิ่มคำสั่งนั้น แต่ฉันคิดว่ามันน่าจะเป็น-quality 100เช่นนั้นแทน
Brian Z

14

ผมเกือบจะแน่ใจว่าสิ่งที่คุณรับรู้ว่ามีการสูญเสียคุณภาพในรูปแบบไฟล์ PDF ให้เป็นเพียงผลของคุณดู PDF 's ป้องกันaliasingคุณลักษณะ

หากคุณใช้evinceในการดู PDF คุณสามารถดูคุณสมบัติป้องกันนามแฝงปิดโดยอัตโนมัติที่ซูมบางอย่าง (300% ในการทดสอบอย่างรวดเร็วของฉัน) คุณจะเห็นว่าเต็มตาเมื่อคุณซูมเข้าไปเรื่อย ๆ - คุณจะสังเกตเห็นว่าในบางจุดพิกเซลจะปรากฏขึ้นอย่างชัดเจนทันที นั่นคือจุดที่ต้องปิดการลบรอยหยักเพื่อให้สามารถตรวจสอบภาพได้อย่างแม่นยำ


อืม - เหมาะสมแล้ว แต่ฉันคิดว่าฉันหวังว่าจะสามารถตั้งค่าภาพและ "มุมมองเริ่มต้น" เป็น 100% เพื่อให้ดูคมชัดขึ้น
cwd

1
@cwd อย่าผิดพลาดซูม (วิธีการตรวจสอบไฟล์) โดยมีสาเหตุที่แท้จริงของภาพเรียบเนียนป้องกันนามแฝง จัดเก็บภาพอย่างเหมาะสม มันเป็นโปรแกรมดู PDF ที่เสียคุณ แต่อาจเป็นวิธีอื่นแม้ว่าคุณจะใช้แอปพลิเคชั่นการดูอื่น ๆ หรือเปลี่ยนการตั้งค่า จากนั้นคุณสามารถเห็นภาพที่คมชัดในไฟล์ PDF และไฟล์ PNG ที่ราบรื่นในโปรแกรมดูรูปภาพ
rozcietrzewiacz

3

Brian Z ข้างต้นระบุไว้ด้านล่างซึ่งเป็นวิธีที่ถูกต้องย้อนกลับได้อย่างสมบูรณ์และไม่มีการสูญเสีย (สมมติว่าขั้นตอนการแปลงเป็นความสูญเสียจริงซึ่งฉันคิดว่ามันเป็นอย่างน้อยก็ควรจะเป็น) วิธีที่จะทำให้ png คุณต้องแปลงจาก png เป็น lossless jp2 เพื่อให้สอดคล้องกับโครงสร้าง / โปรแกรมอ่าน PDF (ฉันคิดว่า)

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

อย่างไรก็ตามเป็นเรื่องที่น่าสังเกตว่าคุณสามารถจัดหาไฟล์. png โดยตรงไปที่ img2pdf เช่น:

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

สิ่งนี้จะสร้างไฟล์ PDF ที่เล็กที่สุดและจะแทรก hex ดิบของ png ลงในวัตถุภายใน pdf ที่สูญเสียไป *

* ข้อเสียเปรียบคือกระบวนการนี้ไม่สามารถย้อนกลับได้ซึ่งแตกต่างจากการใช้ jp2 ข้อมูลส่วนหัว / ส่วนท้ายและและส่วนหัว / ส่วนท้ายของชิ้นส่วนถูกแยกออก (ซึ่งทำให้ไฟล์มีขนาดเล็กลง!) จาก png ที่ถูกแทรกโดยปล่อยให้เฉพาะข้อมูลภาพดิบเท่านั้น (ข้อมูลเมตาที่ถูกลบจะรวมอยู่ในโครงสร้าง pdf) สันนิษฐานได้ว่า "แฮ็ค" ไฟล์ PDF เพื่อแสดง png ดิบซึ่งเป็นเทคนิคที่ไม่สอดคล้องกับคอนเทนเนอร์ มันแสดงผลได้ดีใน firefox และอาจแสดงผลได้ดีในเครื่องอ่านที่ทันสมัยทั้งหมด แต่หาก png ไม่สอดคล้องกับคอนเทนเนอร์ผู้อ่านที่เข้มงวดอาจไม่แสดงข้อมูล png ที่ดิบ (เนื่องจากไม่ควรคาดหวัง / ประมวลผลอย่างถูกต้อง)

ที่นี่คุณจะพบสคริปต์ทุบตีที่ดิบมากซึ่งทำงานให้ฉันเพื่อแยกและสร้างไฟล์ png ใหม่โดยใช้แฮชที่ตรงกันกับอันที่ใช้สำหรับการป้อนข้อมูลลงใน pdf https://github.com/jack4455667788/RebuildRawPNGExtractedFromPDF


2

PDF เป็นรูปแบบเวกเตอร์ (เช่นไฟล์ที่มีคำอธิบายของเส้นที่จะวาด) ในขณะที่รูปแบบอื่น ๆ (JPG, PNG) เป็นรูปแบบแรสเตอร์ (ไฟล์อธิบายถึงสีที่จะวาดในแต่ละพิกเซล) หากคุณขยาย PDF ขึ้นมันก็ยังคงเป็นเส้นคม JPG และ PNG แสดง pixelation

(ตกลงแล้วตกลงฉันโกหก PDF ยังสามารถเป็นแบบแรสเตอร์ได้)


2

ฉันคิดว่าสำหรับ-densityพารามิเตอร์png-to-pdf ควรเล็กกว่าใหญ่ คุณสามารถลองสิ่งที่ชอบconvert -quality 100 -density 50


3
ความหนาแน่นที่สูงขึ้นไม่ดีกว่าแน่นอนเพียงแค่ทำการทดสอบ 50 ผลลัพธ์ในจำนวนพิกเซลที่มองเห็นได้มากและ 300 นั้นก็ดูดีและคมชัด
Shaunhusain

สิ่งนี้ทำให้ฉันสับสน แต่ฉันคิดว่าความหนาแน่นที่สูงขึ้นส่งผลให้มีความละเอียดต่ำลง นั่นหมายความว่าหากผลลัพธ์เป็นฝอย (over-aliased เช่นตัวอย่างในคำถามต้นฉบับ) ดังนั้นความหนาแน่นต่ำกว่าคือสิ่งที่คุณต้องการ แต่ถ้า PDF เป็นพิกเซลแล้วคุณต้องแปลงด้วยความหนาแน่นที่สูงขึ้น
Brian Z
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.