¿Cuál es la mejor manera de dividir un TIFF de varias páginas con python? PIL no parece tener soporte para imágenes de varias páginas, y no he encontrado un puerto exacto para libtiff para python. ¿Sería PyLibTiff el camino a seguir? ¿Alguien puede proporcionar un ejemplo simple de cómo puedo analizar varias páginas dentro de un TIFF?Split tiff de varias páginas con python
Respuesta
hago uso de ImageMagick como programa externo para convertir varias páginas de fax en visible PNG:
/usr/bin/convert /var/voip/fax/out/2012/04/fax_out_L1_17.tiff[0] -scale 50x100% -depth 16 /tmp/fax_images/fax_out_L1_17-0-m.png
Cómo convierte primera página de PNG
aaa.tiff [1] sería la segunda página, y así sucesivamente.
O para extraer todas las imágenes, qué:
convert -verbose fax_in_L1-1333564876.469.tiff a.png
fax_in_L1-1333564876.469.tiff[0] TIFF 1728x1078 1728x1078+0+0 1-bit Bilevel DirectClass 109KiB 0.030u 0:00.030
fax_in_L1-1333564876.469.tiff[1] TIFF 1728x1078 1728x1078+0+0 1-bit Bilevel DirectClass 109KiB 0.020u 0:00.010
fax_in_L1-1333564876.469.tiff[2] TIFF 1728x1078 1728x1078+0+0 1-bit Bilevel DirectClass 109KiB 0.020u 0:00.010
fax_in_L1-1333564876.469.tiff=>a-0.png[0] TIFF 1728x1078 1728x1078+0+0 1-bit Bilevel DirectClass 12KiB 0.030u 0:00.019
fax_in_L1-1333564876.469.tiff=>a-1.png[1] TIFF 1728x1078 1728x1078+0+0 1-bit Bilevel DirectClass 8KiB 0.040u 0:00.039
fax_in_L1-1333564876.469.tiff=>a-2.png[2] TIFF 1728x1078 1728x1078+0+0 1-bit Bilevel DirectClass 32KiB 0.070u 0:00.070
lo tanto, para simplemente dividir un TIFF de varias páginas en muchas páginas TIFF que tendría que ejecutar:
convert in-12345.tiff /tmp/out-12345.tiff
y luego trabajar con archivos temporales: /tmp/out-12345-*.tiff
Sin embargo, ImageMagick puede hacer un montón de procesamiento, por lo que probablemente pueda obtener el resultado deseado en un solo comando.
Se podría convertirlo a PDF y utilizar pyPDF para dividir las páginas
Prefiero no convertir a PDF, dividir y convertir de nuevo a TIFF a menos que no haya absolutamente ninguna otra manera de dividir archivos TIFF de varias páginas. Parece una forma inversa de extraer páginas individuales, pero no dude en corregirme si me equivoco ... – user1145643
Un proyecto (revelación: que yo soy uno de los autores principales, esta pregunta fue una de las cosas que me impulsaron a trabajar en él) que hace que esto sea fácil es PIMS. El núcleo de PIMS es esencialmente una versión limpiada y generalizada de la siguiente clase.
Una clase para hacer extracción de marco básica + iteración simple.
import PIL.Image
class Stack_wrapper(object):
def __init__(self,fname):
'''fname is the full path '''
self.im = PIL.Image.open(fname)
self.im.seek(0)
# get image dimensions from the meta data the order is flipped
# due to row major v col major ordering in tiffs and numpy
self.im_sz = [self.im.tag[0x101][0],
self.im.tag[0x100][0]]
self.cur = self.im.tell()
def get_frame(self,j):
'''Extracts the jth frame from the image sequence.
if the frame does not exist return None'''
try:
self.im.seek(j)
except EOFError:
return None
self.cur = self.im.tell()
return np.reshape(self.im.getdata(),self.im_sz)
def __iter__(self):
self.im.seek(0)
self.old = self.cur
self.cur = self.im.tell()
return self
def next(self):
try:
self.im.seek(self.cur)
self.cur = self.im.tell()+1
except EOFError:
self.im.seek(self.old)
self.cur = self.im.tell()
raise StopIteration
return np.reshape(self.im.getdata(),self.im_sz)
¿Cuál es el propósito de la modificación numpy? – speedplane
@speedplane Porque 'getdata' devuelve un iterable aplanado de la imagen http://effbot.org/imagingbook/image.htm#tag-Image.Image.getdata – tacaswell
@tacaswell ¿Hay alguna manera de convertir el marco extraído a png o jpeg archivos después de 'get_frame()' está hecho? – comproch
Imagemagick me funcionó bien real. Al dividir un archivo tiff, básicamente convirtiendo de tiff a tiff, se puede usar un indicador para forzar el guardado de archivos de salida en archivos tiff individuales. Para hacerlo, intente
convert input.tif output-%d.tif
El operador% d es un estilo C-Printf% d. Por lo tanto, si necesita una secuencia de funcionamiento 3 campo, se puede decir
convert input.tif output-%3d.tif
y así sucesivamente ..% d se sustituye por el número de "escena" de la imagen. Ahora, los números de escena pueden o no comenzar siempre con 0 (o 1, si así lo desea). Para configurar una secuencia de la manera que desee, intente
convert input.tif -scene 1 output-%3d.tif
Esto iniciaría la secuencia directamente desde el recuento que proporcionó.
convert -scene 1 input.TIF output-%d.TIF
output-1.TIF
output-2.TIF
output-3.TIF
Magick indeed !! :)
This link a la documentación tiene más detalles. Esto funciona en mi máquina de Windows también.
Lo siguiente divide un archivo tif con múltiples marcos en archivos tif donde cada archivo es un marco.
def parse_tif(filePath):
img = Image.open(filePath)
for i in range (numFramesPerTif):
try:
img.seek(i)
img.save('Block_%s.tif'%(i,))
except EOFError: #end of file error
- 1. ImageMagick o GhostScript: convierta un TIFF de varias páginas en un PDF de varias páginas
- 2. Herramientas para convertir PDF de varias páginas a multiples páginas TIFF
- 3. División de Tiff de varias páginas en Single Tiff's en Windows 7/.Net 4.0
- 4. Imprimir varias páginas con Javascript
- 5. ¿Cómo puedo generar mediante programación un TIFF de varias páginas a partir de muchos archivos TIFF de una sola página utilizando Python?
- 6. Zend depuración varias páginas
- 7. Cómo estructurar varias páginas con RequireJS
- 8. una galleta - Varias páginas
- 9. gwt aplicación de varias páginas
- 10. Python regex search AND split
- 11. Uso de convertir o mogrificar para combinar varios archivos PNG en un único archivo TIFF de varias páginas
- 12. Ghostscript: cómo decidir la resolución de salida de convertir un PDF de varias páginas a varios TIFF
- 13. Python cadena de split con delimitador de varios caracteres
- 14. Comportamiento de carga inesperado de PhantomJS con varias páginas
- 15. Informe de varias páginas de JasperReports con contenido diferente
- 16. páginas de Split A4 en un archivo PDF a páginas A5
- 17. formas de varias páginas en rieles
- 18. ¿Cómo crear un archivo PDF de varias páginas con Gnuplot?
- 19. GWT con varias páginas de host en una aplicación heredada
- 20. ¿Tiene contenido de páginas web con Python?
- 21. Simular documento de varias páginas en CSS3
- 22. Problema de parpadeo al navegar entre páginas con la plantilla de varias páginas en jQueryMobile + PhoneGap
- 23. No divida las palabras comillas dobles con Python string split()?
- 24. Subfigs de una figura en varias páginas
- 25. sede de varias páginas en nodejs
- 26. Python split() sin quitar el delimitador
- 27. ¿Cómo funciona RequireJS con varias páginas y vistas parciales?
- 28. Ver un TIFF multipágina en Javascript
- 29. python, regex split y carácter especial
- 30. Backbone.js y PhoneGap, una o varias páginas?
PIL tiene un apoyo limitado a los documentos "multi-imagen" - se Cana t menos laod y LEAT a lidiar con, marcos individuales en GIF animados - No sé si el TIFF carga plug-in que permite para leer cada página, sin embargo. ¿Puedes publicar un enlace a uno de tus tiffs? – jsbueno
Lamentablemente, no ... El material que estoy tratando ahora es delicado, y no tengo ni idea de cómo generar un tiff genérico de varias páginas desde cero. Intenté exportar varias capas en Gimp inútilmente. ¿Tienes algún ejemplo de código? Podría probarlos en mi máquina. – user1145643