如果我执行以下操作
for root, dirs, files in os.walk(myDir):
for myFile in files:
with Image(filename=myFile) as img:
with Image(image=img) as main:
print main.sequence[0].width
我在使用 Wand 时遇到了内存错误。
我确信这是 .sequence 部分。如果我把它去掉,那就没问题了。我已经阅读了我能找到的所有序列,它是图像与单个图像的区别。
SingleImage 序列部分保留在内存中。我尝试使用以下内容:
main.sequence[0].destroy()
但它并没有消除记忆中的图像。
我正在处理数千个文件,但在处理了几十个文件后,我就遇到了分段错误。
我很确定它关闭了“主”图像。只是不是 main.sequence SingleImage。
有没有办法强制关闭呢?
我应该说我也尝试过这个
with Image(image=img.sequence[0]) as main:
认为 With 语句会间接关闭它。但事实并非如此。
有人可以帮忙吗?
首先要做的事情 - 归档用魔杖的虫子. The wand.image.Image.destroy
没有清理干净wand.image.Sequence
如果分配了图像序列。好发现!
你是绝对正确的main.sequence[0].destroy()
;但是,您只能释放第一个分配的SingleImage
在序列中。所以img.sequence[1:]
仍留在记忆中。一个不太优雅的解决方案是迭代并销毁所有SingleImage
's.
for root, dirs, files in os.walk(myDir):
for myFile in files:
with Image(filename=myFile) as img:
with Image(image=img) as main:
first = True
for frame in main.sequence:
if first:
print frame.width
first = False
frame.destroy()
comment:从文件中读取图像img
,将数据复制到main
,并且在序列中创建子图像似乎非常占用内存。我确信您所做的不仅仅是识别图像宽度,但是可以重写吗? Imagemagick确实有一个ping方法(尚未实现wand
),它不会将图像数据读入内存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)