2012-05-07 11 views
6

Tôi muốn chuyển đổi một số tệp .tif hoặc .pdf nhiều trang thành hình ảnh .png riêng lẻ. Từ dòng lệnh (sử dụng ImageMagick) Tôi chỉ làm:Cách xử lý hình ảnh nhiều trang trong PythonMagick?

convert multi_page.pdf file_out.png 

Và tôi nhận được tất cả các trang như hình ảnh cá nhân (file_out-0.png, file_out-1.png, ...)

tôi sẽ muốn xử lý chuyển đổi tệp này trong Python, rất tiếc PIL không thể đọc tệp .pdf, vì vậy tôi muốn sử dụng PythonMagick. Tôi cố gắng:

import PythonMagick 
im = PythonMagick.Image('multi_page.pdf') 
im.write("file_out%d.png") 

hoặc chỉ

im.write("file_out.png") 

Nhưng tôi chỉ nhận được 1 trang chuyển đổi sang png. Tất nhiên tôi có thể tải từng trang riêng lẻ và chuyển từng trang một. Nhưng phải có cách để làm tất cả cùng một lúc?

+0

bạn có tìm thấy giải pháp nào cho các tệp pdf trang không? – Aragon

+0

Bạn có tìm thấy giải pháp nào không. Tôi có cùng một vấn đề. – stormlifter

Trả lời

6

ImageMagick không phải là bộ nhớ hiệu quả, vì vậy nếu bạn cố gắng đọc một pdf lớn, giống như 100 trang hoặc lâu hơn, bộ nhớ yêu cầu sẽ rất lớn và có thể bị lỗi hoặc làm chậm nghiêm trọng hệ thống của bạn. Vì vậy, sau khi đọc tất cả các trang cùng một lúc với PythonMagick là một ý tưởng tồi, nó không an toàn. Vì vậy, đối pdf, tôi đã kết thúc làm việc đó từng trang, nhưng cho rằng tôi cần phải nhận được số lượng trang đầu tiên sử dụng pyPdf, nó hợp lý nhanh:

pdf_im = pyPdf.PdfFileReader(file('multi_page.pdf', "rb")) 
npage = pdf_im.getNumPages() 
for p in npage: 
    im = PythonMagick.Image('multi_page.pdf['+ str(p) +']') 
    im.write('file_out-' + str(p)+ '.png') 
0

tôi đã cùng một vấn đề và như là một công việc xung quanh tôi được sử dụng ImageMagick và đã

import subprocess 
params = ['convert', 'src.pdf', 'out.png'] 
subprocess.check_call(params) 
1

Một ví dụ hoàn chỉnh hơn dựa trên câu trả lời của Ivo Flipse và http://p-s.co.nz/wordpress/pdf-to-png-using-pythonmagick/

Điều này sử dụng độ phân giải cao hơn và sử dụng PyPDF2 thay vì pyPDF cũ hơn.

import sys 
import PyPDF2 
import PythonMagick 

pdffilename = sys.argv[1] 
pdf_im = PyPDF2.PdfFileReader(file(pdffilename, "rb")) 
npage = pdf_im.getNumPages() 
print('Converting %d pages.' % npage) 
for p in range(npage): 
    im = PythonMagick.Image() 
    im.density('300') 
    im.read(pdffilename + '[' + str(p) +']') 
    im.write('file_out-' + str(p)+ '.png')