如果我做以下事情
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
Run Code Online (Sandbox Code Playgroud)
我使用Wand最终导致内存故障.
我确定它的.sequence部分.如果我删除它,它的罚款.我已经阅读了所有我能在序列上找到的内容,它是一个Image vs SingleImage.
SingleImage序列部分保留在内存中.我试过使用以下内容:
main.sequence[0].destroy()
Run Code Online (Sandbox Code Playgroud)
但它并没有摆脱记忆中的形象.
我正在处理数千个文件,但是在几十个文件之后我就会出现分段错误.
我很确定它关闭了'主'图像.只是不是main.sequence SingleImage.
有办法强行关闭吗?
我应该说我也试过这个
with Image(image=img.sequence[0]) as main:
Run Code Online (Sandbox Code Playgroud)
认为With语句将间接关闭它.但事实并非如此.
有人可以帮忙吗?
首先要做的事情 -使用 wand 提交错误。如果分配了图像序列,则wand.image.Image.destroy不会进行清理。好发现!wand.image.Sequence
你是绝对正确的main.sequence[0].destroy();SingleImage但是,您只能释放序列中分配的第一个。所以img.sequence[1:]仍然在记忆中设置。一个不太优雅的解决方案是迭代并销毁所有SingleImage的。
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()
Run Code Online (Sandbox Code Playgroud)
评论:从文件读取图像到img,将数据复制到main,并按序列创建子图像似乎非常占用内存。我确信您所做的不仅仅是识别图像宽度,但是可以重写吗?Imagemagick 确实有一个ping方法(尚未在 中实现wand),它不会将图像数据读入内存。
| 归档时间: |
|
| 查看次数: |
1456 次 |
| 最近记录: |