用Python分割多頁TIFF的最佳方式是什麼? PIL似乎不支持多頁圖像,而且我還沒有找到python的libtiff的確切端口。 PyLibTiff會走嗎?有人可以提供一個簡單的例子,說明如何解析TIFF中的多個頁面?蟒蛇分割多頁TIFF
回答
我使用ImageMagick的外部程序多頁傳真轉換成可觀看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
並第一頁轉換爲PNG
aaa.tiff [1]將是第二頁,依此類推。
或者提取所有的圖像,也:
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
所以,只拆分一個多頁TIFF成許多頁TIFF,你將不得不執行:
convert in-12345.tiff /tmp/out-12345.tiff
,然後工作與臨時文件:/tmp/out-12345-*.tiff
但ImageMagick可以做很多處理,所以你可能可以在一個命令中實現你想要的結果。
你可以將其轉換爲PDF格式,並使用pyPDF分裂
頁面我寧願不轉換爲PDF格式,拆分並轉換回TIFF格式,除非絕對沒有其他方法可以拆分多頁TIFF。這似乎是一個提取單個頁面的倒退方式,但如果我錯了,請隨時糾正我。 – user1145643 2012-03-09 01:36:05
一個項目(披露:我是主要作者之一,這個問題是促使我去處理它的事情之一),這使得這很容易,是PIMS。 PIMS的核心本質上是以下課程的清理和概括版本。
一個類來做基本的幀提取+簡單的迭代。
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)
numpy重塑的目的是什麼? – speedplane 2016-02-12 21:01:06
@speedplane由於'getdata'返回一個扁平的圖像迭代器http://effbot.org/imagingbook/image.htm#tag-Image.Image.getdata – tacaswell 2016-02-13 16:18:09
@tacaswell有沒有辦法將提取的幀轉換爲PNG或JPEG格式'get_frame()'完成後的文件? – comproch 2017-07-24 00:12:42
Imagemagick對我真的很好。如果要分割一個tiff文件,基本上從tiff轉換爲tiff,可以使用標誌強制將輸出文件保存爲單個tiff文件。爲此,請嘗試
convert input.tif output-%d.tif
%d操作符是C-Printf樣式%d。因此,如果您需要3場運行序列,可以說
convert input.tif output-%3d.tif
等等。%d被圖像的「場景」編號替換。現在,場景數字可能總是或不總是以0開頭(或1,如果你想這樣)。要以您想要的方式設置序列,請嘗試
convert input.tif -scene 1 output-%3d.tif
這會從您提供的計數開始。
convert -scene 1 input.TIF output-%d.TIF
output-1.TIF
output-2.TIF
output-3.TIF
Magick確實!! :)
This link到文檔有更多的細節。這也適用於我的Windows機器。
以下內容將具有多個幀的tif文件拆分爲tif文件,其中每個文件都是一個幀。
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. 蟒蛇字符串分割
- 2. 蟒蛇分割字符串兩次
- 3. 蟒蛇分割故障(核心轉儲)
- 4. 顏色分割使用Kmeans,Opencv蟒蛇
- 5. 蟒蛇:分割字符串的字符
- 6. 分割字符串用星號蟒蛇
- 7. 將字符串分割與蟒蛇
- 8. Scrapy蟒蛇以下分頁
- 9. 蟒蛇多指標分配
- 10. 將多頁TIFF圖像分割成單獨的圖像(Java)
- 11. 蟒蛇分裂
- 12. 多類多輸出分類與蟒蛇
- 13. 分割字符串,引號內忽略分隔符(蟒蛇)
- 14. 分頁(第二級) - scrapy蟒蛇
- 15. 蟒蛇:UnboundLocalError:分配
- 16. 蟒蛇matplotlib分散
- 17. 蟒蛇CSV是分離太多
- 18. 蟒蛇在蟒蛇
- 19. 蟒蛇多線程
- 20. 切割清單蟒蛇基地
- 21. 多頁Tiff壓縮
- 22. 蟒蛇2.7:獲取分割故障,在GUI編程與Tkinter的
- 23. 分割字符串蟒蛇與改變指標
- 24. 貪婪的正則表達式分割蟒蛇每第n行
- 25. 如何從分割線串和比較蟒蛇
- 26. 分割字符串並保存逗號INT蟒蛇
- 27. 蟒蛇再由字母數字和符號分割字符串
- 28. 正則表達式來分割蟒蛇%年齡和值
- 29. 的蟒蛇,我如何通過小數點分割數
- 30. Vector2乘法導致蟒蛇中的分割錯誤
PIL具有「多圖像」文件有限的支持 - 這塔卡納t個最低LAOD和真皮休閒您應對GIF動畫,單個幀 - 我不知道,如果TIFF加載插件允許你閱讀每一頁,但。你能發佈一個鏈接到你的tiffs嗎? – jsbueno 2012-03-09 03:51:06
不幸的是...我現在處理的材料很敏感,我不知道如何從頭開始生成通用的多頁TIFF。我嘗試導出gimp中的多個圖層無濟於事。你有任何代碼示例?我可以在我的機器上試用它們。 – user1145643 2012-03-09 13:37:38