Saltar al contenido

Dividir tiff de varias páginas con python

Solución:

Un proyecto (divulgación: del que soy uno de los principales autores, esta pregunta fue una de las cosas que me impulsó a trabajar en él) que hace que esto sea fácil es PIMS. El núcleo de PIMS es esencialmente una versión limpia y generalizada de la siguiente clase.

Una clase para hacer extracción de cuadros 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)

Imagemagick me funcionó muy bien. Cuando se divide un archivo tiff, básicamente convirtiéndolo de tiff a tiff, se puede usar una bandera para forzar el guardado de los archivos de salida en archivos tiff individuales. Para hacer eso, intenta

convert input.tif output-%d.tif

El operador% d es un estilo C-Printf% d. Entonces, si necesita una secuencia de ejecución de 3 campos, puede decir

convert input.tif output-%3d.tif

y así sucesivamente ..% d se reemplaza por el número de “escena” de la imagen. Ahora, los números de escena pueden comenzar o no 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 desde el recuento que proporcionó.

convert -scene 1 input.TIF output-%d.TIF
output-1.TIF
output-2.TIF
output-3.TIF

¡Magia de hecho! 🙂

Este enlace a la documentación tiene más detalles. Esto también funciona en mi máquina con Windows.

Utilizo ImageMagick como programa externo para convertir faxes de varias páginas en PNG visibles:

/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

convierte la primera página a PNG

aaa.tiff[1] sería la segunda página, y así sucesivamente.

O para extraer todas las imágenes, haga:

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

Por lo tanto, para dividir un TIFF de varias páginas en TIFF de muchas páginas, 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 realizar mucho procesamiento, por lo que probablemente pueda lograr el resultado deseado con un solo comando.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *