pdf để jpg mà không giảm chất lượng; gscan2pdf


51

Khi tôi chuyển đổi tệp pdf thành bó tệp jpg bằng cách sử dụng

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

Tôi đã giảm chất lượng đáng kể.

Tuy nhiên, nếu tôi làm như sau, sẽ không giảm chất lượng (đáng chú ý):

Bắt đầu gscan2pdf, chọn tệp-> nhập (và chọn tệp.pdf). Sau đó vào thư mục tạm thời của gscan2pdf. Có nhiều tệp pnm (một cho mỗi trang của tệp pdf). Bây giờ tôi làm

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

Các tệp jpg kết quả là (đại khái) có chất lượng tương đương với pdf gốc (đó là những gì tôi muốn).

Bây giờ câu hỏi của tôi là, nếu có một cách dòng lệnh đơn giản để chuyển đổi tệp pdf thành một loạt các tệp jpg mà không làm giảm chất lượng đáng chú ý? (Giải pháp trên quá phức tạp và tốn thời gian).


Điều không rõ ràng trong câu hỏi của bạn là liệu bạn có nói về văn bản và đồ họa vector trong pdf của bạn hay bạn muốn trích xuất hình ảnh nhúng.
asoundmove

Câu trả lời:


92

Không rõ ý của bạn là "giảm chất lượng". Điều đó có thể có nghĩa là rất nhiều thứ khác nhau. Bạn có thể gửi một số mẫu để minh họa? Có lẽ cắt phần tương tự ra khỏi các phiên bản chất lượng kém và chất lượng tốt (dưới dạng PNG để tránh mất chất lượng hơn nữa).

Có lẽ bạn cần sử dụng -densityđể thực hiện chuyển đổi ở mức cao hơn:

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

(Bạn có thể trả trước -units PixelsPerInchhoặc -units PixelsPerCentimeternếu cần. Bản sao của tôi mặc định là ppi.)

Cập nhật: Như bạn đã chỉ ra, gscan2pdf(cách bạn đang sử dụng) chỉ là một trình bao bọc cho pdfimages(từ poppler ). pdfimageskhông làm điều tương tự convertkhi đưa ra PDF làm đầu vào.

convert lấy PDF, hiển thị nó ở độ phân giải nào đó và sử dụng bitmap kết quả làm hình ảnh nguồn.

pdfimagesxem qua PDF để xem hình ảnh bitmap nhúng và xuất từng tệp thành một tệp. Nó chỉ đơn giản bỏ qua bất kỳ lệnh vẽ văn bản hoặc vector trong PDF.

Kết quả là, nếu những gì bạn có là một tệp PDF chỉ là một trình bao bọc xung quanh một loạt ảnh bitmap, pdfimagessẽ thực hiện công việc trích xuất chúng tốt hơn nhiều, bởi vì nó mang lại cho bạn dữ liệu thô ở kích thước ban đầu. Có lẽ bạn cũng muốn sử dụng -jtùy chọn này pdfimages, vì một tệp PDF có thể chứa dữ liệu JPEG thô. Theo mặc định, pdfimageschuyển đổi mọi thứ thành định dạng PNM và chuyển đổi JPEG> PPM> JPEG là một quá trình mất mát.

Vì vậy, hãy thử

pdfimages -j file.pdf page

Bạn có thể hoặc có thể không cần phải làm theo điều đó với một convertđể .jpgbước (tùy thuộc vào những gì bitmap định dạng PDF được sử dụng).

Tôi đã thử lệnh này trên một tệp PDF mà tôi đã tự tạo từ một chuỗi các hình ảnh JPEG. Các JPEG được trích xuất là byte theo byte giống hệt với hình ảnh nguồn. Bạn không thể có được chất lượng cao hơn thế.


+1 Tôi rất vui vì tôi đã không gửi cho kẻ hợm hĩnh đọc sai một trong những câu của bạn được truyền cảm hứng trong tôi và thực sự đã thử pdfimages - có lẽ là chương trình hữu ích nhất tôi đã sử dụng trong nhiều tháng! Tôi khuyến khích mọi người dùng thử!
ixtmixilix

@ixtmixilix, tôi tò mò. Bạn đã đọc sai điều gì, và làm thế nào?
cjm

Khá tuyệt vời! Giải quyết ngày của tôi. Cảm ơn bạn!
Geppettvs D'Constanzo

convertcũng không thực tế đối với các tệp PDF lớn. Ví dụ: phải mất 45 GB bộ nhớ để xử lý một cuốn sách gồm 700 trang 6 megapixel. Nó cũng mất khoảng một ngàn lần lâu hơn pdfimages.
Camille Goudeseune 7/12/2015

Đối với cách khác, chuyển đổi hình ảnh thành pdf hoặc tốt hơn, bọc hình ảnh thành pdf, sử dụng img2pdf, tại đây: gitlab.mister-muffin.de/josch/img2pdf (kết hợp jpg và jpg2000 thành pdf).
erik

4

Như câu trả lời của sinh viên pdfimageslà một lựa chọn tốt. Từ kinh nghiệm của tôi cả gsconvertxuất sang chất lượng kém bất kể bạn chỉ định đúng dpi.

Nhưng nếu pdf có nhiều lớp trên mỗi trang pdfimageskhông hoạt động và trích xuất các lớp thành hình ảnh riêng biệt, trong trường hợp đó tốt nhất là sử dụng inskcapeđể xuất trang như đã thấy.

Đây là các lệnh tôi sử dụng:

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

Lệnh đầu tiên chia tất cả các trang Lệnh thứ hai chuyển đổi từng trang thành png. Bạn có thể giữ chúng png hoặc chỉ chuyển đổi chúng thành jpeg

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

So với pdfimages, gsvà ImageMagick's converttôi thấy inkscapexuất khẩu có chất lượng tốt nhất.


3

phản hồi từ @cjm là chính xác, nhưng nếu bạn thích GUI và không muốn hiển thị tất cả các trang pdf, chỉ để có được một số hình ảnh, hãy sử dụng gimp.

Mở pdf với gimp, bạn sẽ nhận được một cửa sổ nhập với tất cả các trang được hiển thị. Chọn bất kỳ trang nào bạn muốn và đặt độ phân giải thành 600 pix / inch (tôi thấy 300 sắc nét quá nhiều trong nhiều trường hợp). Lưu vào định dạng bạn muốn với "Tệp / xuất"

Dù sao, phải có một cờ để chọn các trang mong muốn từ dòng lệnh.


2

Nhìn vào mã nguồn gscan2pdf tôi nhận thấy rằng nó sử dụng pdfimages. Vì vậy, pdfimages file.pdf pagesẽ kết quả trong page-001.ppm, page-002.ppmvv


pdfimages thực sự làm được việc
Eduard Florinescu

2

Điều không rõ ràng trong câu hỏi của bạn là liệu bạn có nói về văn bản và đồ họa vector trong pdf của bạn hay pdf của bạn có chứa hình ảnh nhúng hay không.

Đã đọc những gì gscan2pdf nói về, tôi đoán là các tệp pdf của bạn chứa (chỉ) đồ họa nhúng.

convertvề cơ bản là "in" pdf của bạn mà không liên quan đến nội dung là gì. Giống như @cjm gợi ý, bạn có thể muốn thay đổi mật độ in. Đây là cách duy nhất để tăng chất lượng cho đồ họa vector.

Nếu thay vào đó, những gì bạn muốn làm là trích xuất các hình ảnh nhúng (giống như gscan2pdf dường như sẽ làm), việc đoán mật độ thường sẽ dẫn đến giảm chất lượng hoặc chất lượng cao hơn yêu cầu (và lãng phí không gian đĩa). Câu trả lời sau đó là trích xuất hình ảnh thay vì in pdf. Xem bài viết này về cơ bản ủng hộ việc sử dụng pdfimagesđể trích xuất hình ảnh mà không làm giảm chất lượng.

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.