2012-05-07 24 views
6

Quiero convertir algunos archivos .tif o .pdf de varias páginas a imágenes .png individuales. De línea de comandos (usando ImageMagick) acabo de hacer:¿Cómo manejar imágenes de varias páginas en PythonMagick?

convert multi_page.pdf file_out.png 

Y consigo todas las páginas como imágenes individuales (file_out-0.png, file_out-1.png, ...)

lo haría me gusta manejar esta conversión de archivos dentro de Python, desafortunadamente PIL no puede leer archivos .pdf, así que quiero usar PythonMagick. Probé:

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

o simplemente

im.write("file_out.png") 

Pero solo me dan 1 página convierte a PNG. Por supuesto, podría cargar cada página individualmente y convertirlas una a una. Pero debe haber una manera de hacerlos todos a la vez?

+0

¿Encontró alguna solución al archivo mul pages pdf? – Aragon

+0

¿Encontró alguna solución? Tengo el mismo problema. – stormlifter

Respuesta

6

ImageMagick no es eficiente de la memoria, por lo que si se intenta leer un PDF de gran tamaño, así como 100 páginas más o menos, la memoria el requisito será enorme y podría colapsar o ralentizar seriamente su sistema. Entonces, después de todo, leer todas las páginas a la vez con PythonMagick es una mala idea, no es seguro. Así que para pdfs, que terminé haciendo página por página, pero para eso necesita para obtener el número de páginas en primer lugar utilizando pyPdf, su razonablemente rápido:

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

que tenían el mismo problema y como un trabajo en torno a que utilicé ImageMagick e hicieron

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

Un ejemplo más completo basado en la respuesta de Ivo Flipse y http://p-s.co.nz/wordpress/pdf-to-png-using-pythonmagick/

Esto utiliza una resolución más alta y utiliza PyPDF2 en lugar de pyPDF anterior.

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