工夫したコードで、im
をコピーして、コピーをImageSequence.Iterator
に渡してみたら、どうでしょうか?
下記のコードのように:
Like!
python で複数のマルチtiffを分割しました。
複数を順番に処理するとエラーが発生しました。
解決方法をお教えくださいませ。
環境
OS:windows
python 3.85
PCによっては動作します。
Traceback (most recent call last):
File "test2.py", line 11, in <module>
File "test2.py", line 7, in DIV
File "C:\Users\dcuser03\anaconda3\lib\site-packages\PIL\Image.py", line 2169, in save
OSError: [Errno 24] Too many open files: '0456.jpg'
エラー箇所
OSError: [Errno 24] Too many open files: '0456.jpg'
import glob
from PIL import Image, ImageSequence
def DIV(N):
img = Image.open(N)
for i, page in enumerate(ImageSequence.Iterator(img)):
page.save("{}.jpg".format(str(i+1).zfill(4)), format='jpeg', quality=95)
L=glob.glob("*.TIF")
for j in L:
DIV(j)
エラー箇所
for i, page in enumerate(ImageSequence.Iterator(img)):
page.save("{}.jpg".format(str(i+1).zfill(4)), format='jpeg', quality=95)
withやcloseで閉じ、ファイルディスクリプタ上限に達しないよう工夫しましたが結果は同じでした。
工夫したコード(同様のエラー)
def DIV(N):
with Image.open(N) as im:
index = 1
for frame in ImageSequence.Iterator(im):
frame.save(N[:11] + "{}.jpg".format(str(index+1).zfill(4)), format='jpeg', quality=95)
index += 1
何卒お願い申し上げます。
工夫したコードで、im
をコピーして、コピーをImageSequence.Iterator
に渡してみたら、どうでしょうか?
下記のコードのように:
@peco-poco
Questionerお教えいただき誠にありがとうございます!
まだうまくいっていません。
下記2つを試しました。
内容は同じです(withブロックの有無)
def DIV(N):
im = Image.open(N)
co_im = im.copy() #co_im = copy.copy(im)も同様
im.close()
index = 1
for f in ImageSequence.Iterator(co_im):
f.save(N[:11] + "{}.jpg".format(str(index).zfill(4)), format='jpeg', quality=95)
index += 1
def DIV(N):
with Image.open(N) as im:
co_im = copy.copy(im)
index = 1
for f in ImageSequence.Iterator(co_im):
f.save(N[:11] + "{}.jpg".format(str(index).zfill(4)), format='jpeg', quality=95)
index += 1
結果、Tiffファイルの一枚目のみをjpgとして保存。つまり1000枚以上あるその他の画像は正しく分割、保存されませんでした。
次に
co_im = copy.deepcopy(im)
としてみたところ
下記エラーが出てしまいました。
引き続き工夫していきます。
何卒お教えいただければ幸甚に存じます。
Traceback (most recent call last):
File "T2C_ver1.00.py", line 37, in <module>
DIV(i)
File "T2C_ver1.00.py", line 22, in DIV
for f in ImageSequence.Iterator(co_im):
File "C:\Users\dcuser03\anaconda3\lib\site-packages\PIL\ImageSequence.py", line 49, in __next__
self.im.seek(self.position)
File "C:\Users\dcuser03\anaconda3\lib\site-packages\PIL\TiffImagePlugin.py", line 1044, in seek
if not self._seek_check(frame):
File "C:\Users\dcuser03\anaconda3\lib\site-packages\PIL\ImageFile.py", line 300, in _seek_check
frame < self._min_frame
File "C:\Users\dcuser03\anaconda3\lib\site-packages\PIL\Image.py", line 541, in __getattr__
raise AttributeError(name)
AttributeError: _min_frame