python - 无法正确克隆 cStringIO 对象

标签 python django python-imaging-library

我有以下代码来从网址获取图像:

im = cStringIO.StringIO(image_buffer)

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

Image.open(im).crop(box=(1, 1, 1, 1) 

但这会编辑 im 本身,因此我无法重复使用 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 库进行图像操作

最佳答案

您可以通过简单地获取字符串值并使用 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 保持未裁剪状态。

关于python - 无法正确克隆 cStringIO 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25590456/

相关文章:

python - 为什么 Flask 自动调试在 ubuntu 中不起作用

python - 如何从Python列表中计算数学问题?

python - 将列表元素作为单独的字符串传递给 Django 方法

python - 连接到远程 Django 服务器

django - 仅列出 OneToOneField Django 中的可用值

python - 粘贴具有 Alpha 透明度的图像

python - 将图像作为二维数组导入 python

python - 在 Pony ORM 中增量构建查询

python - 错误 : object of type 'zip' has no len() after adding extra header by using zip

google-app-engine - App Engine 图像调整大小而不保持纵横比?