Qual è il modo migliore per dividere un TIFF multipagina con python? PIL non sembra avere supporto per le immagini multi-pagina, e non ho trovato una porta esatta per libtiff per python. PyLibTiff sarebbe la strada da percorrere? Qualcuno può fornire un semplice esempio di come posso analizzare più pagine all'interno di un TIFF?Split tiff multi-pagina con python
risposta
Io faccio uso ImageMagick come programma esterno per convertire più pagine di fax in visualizzabile 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
si converte prima pagina PNG
aaa.tiff [1] sarebbe una seconda pagina e così via.
O per estrarre tutte le immagini, si fa:
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
Così, per dividere una sola TIFF multipagina in molti TIFF si dovrà eseguire:
convert in-12345.tiff /tmp/out-12345.tiff
e poi lavorare con file temporanei: /tmp/out-12345-*.tiff
Tuttavia, ImageMagick può eseguire molte elaborazioni, quindi è possibile ottenere il risultato desiderato in un unico comando.
Si potrebbe convertire in PDF e utilizzare pyPDF per dividere le pagine
Preferisco non convertire in PDF, dividere e riconvertire in TIFF a meno che non ci sia assolutamente nessun altro modo per dividere i TIFF multipagina. Sembra un modo al contrario di estrarre singole pagine, ma sentitevi liberi di correggermi se ho torto ... – user1145643
Un progetto (divulgazione: quale io sono uno degli autori principali, questa domanda è stata una delle cose che mi ha spinto a lavorarci sopra) che rende questo è facile è PIMS. Il nucleo di PIMS è essenzialmente una versione pulita e generalizzata della classe seguente.
Una classe per l'estrazione di frame di base + iterazione semplice.
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)
Qual è lo scopo del rimodellamento di Numpy? – speedplane
@speedplane Perché 'getdata' restituisce un iterabile appiattito dell'immagine http://effbot.org/imagingbook/image.htm#tag-Image.Image.getdata – tacaswell
@tacaswell Esiste un modo per convertire il frame estratto in png o jpeg i file dopo "get_frame()" sono terminati? – comproch
Imagemagick ha funzionato per me davvero bene. Per dividere un file tiff, in pratica la conversione da tiff a tiff, si può usare un flag per forzare il salvataggio dei file di output in singoli file tiff. Per farlo, prova
convert input.tif output-%d.tif
L'operatore% d è uno stile C-Printf% d. Quindi, se avete bisogno di un 3 campo di sequenza in esecuzione, si può dire
convert input.tif output-%3d.tif
e così via ..% d è sostituito dal numero "scena" dell'immagine. Ora, i numeri di scena possono o non possono sempre iniziare con 0 (o 1, se lo vuoi in quel modo). Per impostare una sequenza nel modo desiderato, prova
convert input.tif -scene 1 output-%3d.tif
Ciò avvia la sequenza direttamente dal conteggio che hai fornito.
convert -scene 1 input.TIF output-%d.TIF
output-1.TIF
output-2.TIF
output-3.TIF
Magick davvero !! :)
This link alla documentazione ha maggiori dettagli. Funziona anche sulla mia macchina Windows.
Il seguente divide un file tif con più frame in file tif in cui ogni file è un frame.
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. Qt multipagina TIFF
- 2. Strumenti per convertire PDF multipagina in multipagina TIFF
- 3. Convertire molti PNG a TIFF multipagina
- 4. Conversione multipagina da TIFF a PNG .Net
- 5. Divisione di Tiff multipagina in Tiff singolo su Windows 7/.Net 4.0
- 6. Scaling automatico di TIFF multipagina NSImage in un CALayer
- 7. ImageMagick o GhostScript: converti un TIFF multipagina in un PDF multipagina
- 8. Divisione di un'immagine TIFF multipagina in singole immagini (Java)
- 9. Python Regex Split Mantiene Split caratteri pattern
- 10. Utilizzo di convert o mogrify per unire più file PNG in un singolo file TIFF multipagina
- 11. Python usa split con le matrici
- 12. Python split string by pattern
- 13. Annotazioni Tiff
- 14. Prima voce da Split Split
- 15. Come miniaturizzare un pdf multipagina con graffetta
- 16. non supportato TIFF Compressione
- 17. Python split() senza rimuovere il delimitatore
- 18. WPF BitmapImage e TIFF con CMYK + Alpha
- 19. comprimere l'output tiff con compressione g4
- 20. greedy regex split python ogni ennesima riga
- 21. python, regex split e carattere speciale
- 22. Yii Procedura guidata modulo multipagina
- 23. Segmenta facet_wrap in PDF multipagina
- 24. Python Split path in modo ricorsivo
- 25. Formattazione split delle stringhe in python 3
- 26. Comportamento del metodo split split
- 27. Come gestire le immagini multipagina in PythonMagick?
- 28. Split NSString con delimitatori multipli?
- 29. ARRAYFORMULA() non funziona con SPLIT()
- 30. problema compilation con split/splitter
PIL ha un supporto limitato ai documenti "multi-immagine" - è cana t almeno laod, e leat avete a che fare con, i singoli fotogrammi in GIF animate - Non so se il plug-in TIFF carico consente leggere ogni pagina, però. Puoi pubblicare un link a uno dei tuoi tiff? – jsbueno
Purtroppo no ... Il materiale che sto trattando in questo momento è sensibile e non ho idea di come generare un tiff generico a più pagine da zero. Ho provato a esportare più livelli in gimp senza alcun risultato. Hai qualche esempio di codice? Potrei provarli sulla mia macchina. – user1145643