我有以下代码从网址获取图片:
im = cStringIO.StringIO(image_buffer)
现在我必须对原始图像执行不同的操作,例如:
Image.open(im).crop(box=(1, 1, 1, 1)
但是这将编辑我自己,所以我不能重复使用Image.open命令。
因此我想克隆im对象。我已经尝试过使用以下内容:
copy.deepcopy(im)
copy.copy(im)
im[:]
但这些似乎都不起作用,副本甚至抛出以下异常:
object.__new__(cStringIO.StringI) is not safe, use cStringIO.StringI.__new__()
我试图搜索此错误,但我不清楚为什么它拒绝克隆im对象。
这是用python编写的(使用django框架)
我正在使用PIL库进行图像处理
答案 0 :(得分:4)
您可以使用StringIO.getvalue()
method简单地输出字符串值并创建新对象来创建cStringIO.StringIO
文件对象的副本:
new_file = cStringIO.StringIO(original.getvalue())
也就是说,存储对图像对象的引用,并对其应用操作:
image = Image.open(im)
image.crop(box=(1, 1, 1, 1))
然后,您可以在应用所有转换后将图像保存到新文件(内存中或其他方式)。
您可以使用Image.copy()
method:
image = Image.open(im)
image_copy = image.copy()
image.crop(box=(1, 1, 1, 1))
此处image_copy
尚未解除。