2012-05-07 1 views
6

Я хочу преобразовать несколько файлов .tif или .pdf нескольких страниц в отдельные .png изображения. Из командной строки (с помощью ImageMagick) Я просто делаю:Как обрабатывать многостраничные изображения в PythonMagick?

convert multi_page.pdf file_out.png 

И я получаю все страницы в виде отдельных изображений (file_out-0.png, file_out-1.png, ...)

Я бы например, для обработки этого файла в Python, к сожалению, PIL не может читать .pdf-файлы, поэтому я хочу использовать PythonMagick. Я пробовал:

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

или просто

im.write("file_out.png") 

Но я получаю только 1 страница преобразуется в PNG. Конечно, я мог загружать каждую страницу отдельно и конвертировать их по одному. Но должен быть способ сделать их все сразу?

+0

Вы нашли решение для mul pages pdf file? – Aragon

+0

Вы нашли решение. У меня такая же проблема. – stormlifter

ответ

6

ImageMagick не память эффективно, так что если вы попытаетесь прочитать большое PDF, как 100 страниц или около того, память требование будет огромным, и это может привести к сбою или серьезному замедлению работы вашей системы. Так что после всего чтения все страницы сразу с PythonMagick - плохая идея, ее небезопасно. Так PDFs, я в конечном итоге делает его постранично, но для этого мне нужно получить количество страниц первого использования pyPdf, его достаточно быстро:

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

У меня была такая же проблема, и как работа вокруг я использовал ImageMagick и сделал

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

более полный пример на основе ответа Иво Flipse и http://p-s.co.nz/wordpress/pdf-to-png-using-pythonmagick/

Это использует более высокое разрешение и использует PyPDF2 вместо старого pyPDF.

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