Làm cách nào tôi có thể chuyển đổi PNG sang PDF với chất lượng cao để nó không bị mờ hoặc mờ?


54

Có rất nhiều câu hỏi về cách chuyển đổi tệp PDF thành hình ảnh PNG, nhưng tôi đang tìm kiếm một tệp PNG sắc nét và về cơ bản chỉ bọc nó hoặc nhúng nó vào một tệp PDF mà không bị mờ hoặc mờ.

Tôi nhận ra với cài đặt tưởng tượng, tôi có thể thực hiện một chuyển đổi đơn giản như:

convert sample.png sample.pdf

Tôi cũng đã thử rất nhiều công tắc để đặt độ sâu và cài đặt chất lượng:

convert -quality 100 sample.png sample.pdf

Tuy nhiên, PDF vẫn xuất hiện trông mờ / mờ.

Đây là một hình ảnh mẫu:

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

Như một png nó sắc nét và sạch sẽ. Khi tôi chuyển đổi nó thành PDF, ngay cả ở cùng kích thước, nó trông vẫn mờ:

Ảnh 4.png http://img804.imageshack.us/img804/9969/picture4at.png

Làm cách nào tôi có thể chuyển đổi PNG sang PDF với chất lượng cao?


Tôi hy vọng bạn tìm thấy một câu trả lời tốt cho câu hỏi của bạn, nhưng tôi nghĩ rằng đó chỉ là một thuộc tính nhất định của PDF để lưu trữ hình ảnh ở định dạng JPG. PNG, giống như cái bạn chỉ cho chúng tôi, có chất lượng tốt hơn nhiều so với JPG.
jippie

1
@cwd: Bạn đã thử đặt nó vào tệp .tex rồi tạo tệp PDF chưa? Với \usepackage[pdftex, final]{graphicx}\includegraphics[width=516px]{calendar.png}, ví dụ.
Emanuel Berg

2
@jippie: Không, PDF có thể lưu trữ bitmap một cách dễ dàng . Liên kết đưa ra danh sách các thuật toán nén thay vì định dạng, vì dữ liệu bitmap bên trong PDF không thể được trích xuất và xem trực tiếp dưới dạng JPEG hoặc TIFF, nhưng bạn sẽ không sai khi nói rằng hình ảnh PDF là JPEG (mất dữ liệu ), JPEG 2000 (cũng mất dữ liệu) hoặc bất kỳ biến thể TIFF nào (lossless). Có gì tuy nhiên, sự thật, là một nhà sản xuất rượu PDF nhất định có thể mặc định bitmap dịch vào DCT (aka JPEG) hình thức, và phải được thông báo sử dụng một hình thức lossless để thay thế.
Warren Young

@cwd Bạn đã nghĩ đến việc chấp nhận một số câu trả lời? Tôi nghĩ câu trả lời của user32208 khá tốt unix.stackexchange.com/a/64495/16920
Léo Léopold Hertz

Câu trả lời:


34

Hãy thử sử dụng -densitytùy chọn. Độ phân giải mặc định là 72 chấm trên mỗi inch. Vì vậy, hãy thử một cái gì đó như -density 300.

Để tham khảo xem -densitytrong tài liệu tùy chọn dòng lệnh ImageMagick.


Mật độ chắc chắn là chìa khóa. Tỷ lệ và mật độ dường như có liên quan nghịch đảo, vì vậy tôi đã chơi với cả hai cài đặt để có kết quả tối ưu về cả ngoại hình và kích thước tệp ... Nếu có một công thức định sẵn, tôi ước tôi biết điều đó.
Brian Z

Làm thế nào để tìm tùy chọn mật độ tốt nhất? Bao nhiêu dữ liệu bị mất with density 300với bất kỳ hình ảnh ví dụ? Tôi nghĩ rằng kết quả phụ thuộc vào đầu vào. Một chủ đề mới về nó ở đây unix.stackexchange.com/q/292025/16920
Léo Léopold Hertz

Điều này không thay đổi chất lượng đối với tôi.
Guillaume Chevalier

19

Nó có thể rất phức tạp để có được đầu ra pdf tốt từ convert. Hãy thử img2pdfthay thế. Từ bài đọc:

Chuyển đổi không mất hình ảnh sang PDF mà không cần mã hóa lại các tệp JPEG và JPEG2000 một cách không cần thiết. Do đó, không mất chất lượng và không có tệp đầu ra lớn không cần thiết.

Để làm rõ: PDF có thể nhúng hình ảnh JPEG 2000 không mất dữ liệu (và hầu hết người đọc xuất hiện để hỗ trợ chúng ). Vì vậy, việc chuyển đổi này là hoàn toàn không mất mát:

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

(Giả sử đại biểu JP2 có sẵn tất nhiên: kiểm tra identify -list format | grep JP2.)


4
Đây là IMHO câu trả lời tốt nhất ở đây, nhưng bạn nên giải thích rõ hơn quan điểm của mình, tức là PDF có thể nhúng hình ảnh JPEG 2000 không mất dữ liệu. Vì vậy, lệnh đầy đủ cho OP sẽ là một cái gì đó như : convert sample.png -quality 0 sample.jp2; img2pdf -o sample.pdf sample.jp2. (Giả sử đại biểu JP2 có sẵn tất nhiên: kiểm tra identify -list format | grep JP2.)
Nemo

1
Nếu bạn muốn bám vào các kho lưu trữ tiêu chuẩn trên Ubuntu 14, convertđể tiff và sau đó tiff2pdf.
Camille Goudeseune 04/11/2015

Đây là một câu trả lời tuyệt vời, cảm ơn bạn rất và rất nhiều.
Lyubomyr Shaydariv

@ brian-z Trong câu trả lời của bạn , bạn có thể vui lòng giải thích lập luận -quality 0không?
Ngày

SebMa, @Nemo đã thêm lệnh đó, nhưng tôi nghĩ có lẽ nên -quality 100thay thế?
Brian Z

14

Tôi gần như chắc chắn rằng những gì bạn cảm nhận như một sự mất mát chất lượng trong PDF, chỉ là một ảnh hưởng của bạn xem PDF chống 's răng cưa tính năng.

Nếu bạn sử dụng evinceđể xem PDF, bạn có thể thấy tính năng khử răng cưa tự động tắt ở một mức thu phóng nhất định (300% trong thử nghiệm nhanh của tôi). Bạn có thể thấy điều đó một cách sống động khi bạn tiếp tục phóng to - bạn sẽ nhận thấy rằng tại một số điểm, các pixel trở nên rõ ràng rõ ràng. Đó là điểm khi khử răng cưa phải được tắt để cho phép kiểm tra hình ảnh chính xác.


Hmm - điều đó có ý nghĩa nhưng tôi đoán rằng tôi đã hy vọng có thể bằng cách nào đó đặt hình ảnh và "chế độ xem ban đầu" thành 100% để nó trông sắc nét hơn.
cwd

1
@cwd Đừng nhầm lẫn thu phóng (một cách kiểm tra tệp) với nguyên nhân thực sự làm mịn hình ảnh: chống răng cưa . Hình ảnh được lưu trữ đúng cách. Đó là trình xem PDF đánh lừa bạn. Nhưng nó có thể là cách khác ngay cả - nếu bạn dùng một số ứng dụng xem khác hoặc thay đổi cài đặt của chúng. Sau đó, bạn có thể thấy một hình ảnh sắc nét trong một tệp PDF và một tệp PNG được làm mịn trong trình xem hình ảnh.
rozcietrzewiacz

3

Brian Z ở trên đã cung cấp những điều dưới đây, đó là cách chính xác, hoàn toàn có thể đảo ngược và không mất mát (giả sử bước chuyển đổi thực tế là không mất dữ liệu, mà tôi nghĩ rằng đó là hoặc ít nhất nên là) để đưa png vào pdf. Bạn được yêu cầu chuyển đổi từ png sang lossless jp2 để tuân thủ cấu trúc / trình đọc PDF (tôi nghĩ).

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

Tuy nhiên, điều đáng chú ý là bạn có thể tự cung cấp các tệp .png trực tiếp cho img2pdf như:

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

Điều này sẽ tạo ra tệp pdf nhỏ nhất và sẽ chèn hex thô của png vào các đối tượng trong pdf một cách dễ dàng *.

* Hạn chế là quá trình này không thể đảo ngược không giống như sử dụng jp2. Dữ liệu đầu trang / chân trang và chunk tiêu đề / chân trang đã bị tước (điều này thực sự làm cho các tệp thậm chí nhỏ hơn!) Từ png được chèn chỉ để lại dữ liệu ảnh thô (siêu dữ liệu đã bị xóa được tích hợp vào cấu trúc pdf), có lẽ là để "hack" pdf để hiển thị png thô không tuân thủ kỹ thuật với container. Nó hiển thị tốt trong firefox và có thể hiển thị tốt trong tất cả các trình đọc hiện đại, nhưng nếu png không tuân thủ với container thì các trình đọc nghiêm ngặt có thể không hiển thị dữ liệu png thô (vì họ không nên mong đợi / xử lý chính xác).

Ở đây bạn có thể tìm thấy một tập lệnh bash cực kỳ hữu ích để tôi trích xuất và xây dựng lại các tệp png với các giá trị băm phù hợp với các tập lệnh được sử dụng để nhập vào pdf. https://github.com/jack4455667788/RebuildRawPNGExtractedFromPDF


2

PDF là định dạng vectơ (nghĩa là tệp chứa mô tả các đường cần vẽ), trong khi các định dạng khác (JPG, PNG) là định dạng raster (tệp mô tả màu nào để tô mỗi pixel). Nếu bạn thổi một tệp PDF lên, nó vẫn chỉ là những đường kẻ sắc nét; JPG và PNG hiển thị pixelation.

(OK, OK, tôi đã nói dối. PDF cũng có thể là một raster).


2

Tôi nghĩ rằng đối với -densitytham số png-to-pdf nên nhỏ hơn là lớn. Bạn có thể thử một cái gì đó nhưconvert -quality 100 -density 50


3
Không có mật độ cao hơn chắc chắn là tốt hơn, chỉ cần thực hiện một thử nghiệm, 50 kết quả trong rất nhiều pixel rất rõ ràng, 300 là đẹp và sắc nét.
shaunhusain

Điều này đã gây nhầm lẫn cho tôi, nhưng tôi nghĩ rằng mật độ cao hơn dẫn đến đầu ra với độ phân giải thấp hơn. Điều đó có nghĩa là nếu đầu ra mờ (quá bí danh, như ví dụ trong câu hỏi ban đầu) thì mật độ thấp hơn là những gì bạn muốn. Nhưng nếu một tệp PDF được pixelated thì thực sự bạn cần phải chuyển đổi với mật độ cao hơn .
Brian Z
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.