首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法正确复制cStringIO对象

无法正确复制cStringIO对象
EN

Stack Overflow用户
提问于 2014-08-31 08:58:43
回答 1查看 520关注 0票数 2

我有以下代码从url获取图像:

代码语言:javascript
复制
im = cStringIO.StringIO(image_buffer)

现在,我必须对原始图像执行不同的操作,例如:

代码语言:javascript
复制
Image.open(im).crop(box=(1, 1, 1, 1) 

但是这将编辑itsself,所以我不能重用Image.open命令。

因此,我想克隆im对象。我曾尝试使用以下方法:

代码语言:javascript
复制
copy.deepcopy(im)
copy.copy(im)
im[:]

但是,所有这些似乎都不起作用,复制者甚至抛出以下异常:

代码语言:javascript
复制
object.__new__(cStringIO.StringI) is not safe, use cStringIO.StringI.__new__()

我试图搜索这个错误,但我不清楚为什么它拒绝克隆im对象。

这是用python编写的(使用django框架)

我使用PIL库进行图像处理。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-31 09:01:01

只需获取字符串值并使用cStringIO.StringIO创建一个新对象,就可以创建 method文件对象的副本。

代码语言:javascript
复制
new_file = cStringIO.StringIO(original.getvalue())

也就是说,将对图像对象的引用存储起来,并将操作应用于该对象:

代码语言:javascript
复制
image = Image.open(im)
image.crop(box=(1, 1, 1, 1))

这样,在应用所有转换之后,还可以将映像保存到新文件(内存中或其他文件)。

您可以更容易地使用 method创建图像对象的其他副本。

代码语言:javascript
复制
image = Image.open(im)
image_copy = image.copy()
image.crop(box=(1, 1, 1, 1))

在这里,image_copy仍未裁剪。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25590456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档