it-swarm-vi.com

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

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).

56
student

Không rõ ý của bạn là "mất 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 PixelsPerInch Hoặc -units PixelsPerCentimeter Nế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 ). pdfimages không làm điều tương tự như convert khi làm PDF làm đầu vào.

convert lấy tệp 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.

pdfimages xem qua PDF để xem hình ảnh bitmap nhúng và xuất từng hình ảnh 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à PDF chỉ là một trình bao bọc xung quanh một loạt ảnh bitmap, pdfimages sẽ thực hiện công việc trích xuất chúng tốt hơn nhiều, vì nó giúp bạn lấy được dữ liệu thô Kích thước ban đầu. Bạn cũng có thể muốn sử dụng tùy chọn -j Để pdfimages, vì PDF có thể chứa dữ liệu JPEG thô. Theo mặc định, pdfimages chuyể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 không cần phải theo bước đó với bước convert thành .jpg (Tùy thuộc vào định dạng bitmap mà PDF đang sử dụng).

Tôi đã thử lệnh này trên 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 từng 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ế.

101
cjm

Như câu trả lời của sinh viên đã nói pdfimages là một lựa chọn tốt. Từ kinh nghiệm của tôi, cả gsconvert xuấ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 pdfimages không hoạt động và trích xuất các lớp dưới dạng 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, gs và ImageMagick's convert Tôi thấy inkscape 'xuất khẩu chất lượng tốt nhất.

4
Eduard Florinescu

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ở một 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 cứ 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.

3
albfan

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

2
student

Đ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 liệu 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.

convert về 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ư 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í dung lượng đĩ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 mà về cơ bản chủ trương sử dụng pdfimages để trích xuất hình ảnh mà không làm giảm chất lượng.

2
asoundmove