gpt4 book ai didi

python - Django,保存图像,OSError : cannot identify image file

转载 作者:行者123 更新时间:2023-12-01 09:18:38 24 4
gpt4 key购买 nike

代码:

if request.is_ajax():
testpic = TestPic.objects.get(pk=1)

form = TestPicForm(request.POST, request.FILES)
if form.is_valid():
from PIL import Image
from io import BytesIO

data = request.FILES['file']
data_50 = request.FILES['file']

input_file = BytesIO(data.read())
image_crop = Image.open(input_file)
print('print 2')

# Problem starts.
input_file_50 = BytesIO(data_50.read())
image_crop_50 = Image.open(input_file_50)
image_crop = image_crop.crop((1,1,100,100))
image_crop_50 = image_crop_50.crop((40, 40, 140, 140))
image_resize = image_crop.resize((300, 300), Image.ANTIALIAS)
image_resize_50 = image_crop_50.resize((50, 50), Image.ANTIALIAS)

image_file = BytesIO()
image_resize.save(image_file, 'JPEG')

image_file_50 = BytesIO()
image_resize_50.save(image_file_50, 'JPEG')

data.file = image_file
testpic.file = data

data_50.file = image_file_50
testpic.file_50 = data_50

testpic.save()
return JsonResponse({'success': 'file_uploaded'})

return JsonResponse({'success': 'failed'})

回溯是这样的:

print 2
Traceback (most recent call last):
... I remove some lines ...
File "D:\pythonDev\project\upward\chatkaboo\authapp\views.py", line 844, in crop
image_crop_50 = Image.open(input_file_50)
File "D:\pythonDev\interpreters\forMultichat\lib\site-packages\PIL\Image.py", line 2590, in open
% (filename if filename else fp))
OSError: cannot identify image file <_io.BytesIO object at 0x0000024B40510BF8>

描述:

正如您在上面看到的,我的代码的目的是保存请求的图像文件。

我试图找出发生了什么以及哪一行有问题。因此打印了 print 2,因此 input_file_50 = BytesIO(data_50.read()) 行有问题。

问题:

为什么会发生这个错误? BytesIO 一次只能处理一个文件?

如何处理一个文件并将其保存为两个或多个文件?

最佳答案

正如 @wiesion 在对该问题的评论中所说,您可以尝试使用 data.seek(0) 重置缓冲区。

为什么?好吧,在你的代码中你有这个

data = request.FILES['file']
data_50 = request.FILES['file']

意味着datadata_50将指向同一个文件。当您调用 data.read() 时,内容将被读取并且当前位置保留在文件末尾。

当你稍后调用data_50.read()时,当前位置已经在末尾(因为它与data是同一个文件)并且没有更多内容被读取,因此调用 read() 不会返回任何内容。所以没有图像可以保存。

通过调用data.seek(0)(或data_50.seek(0)request.FILES['file'].seek(0) )您告诉该文件再次将当前位置放置在文件的开头,以便下次调用 read() 可以再次输出整个文件内容。

input_file = BytesIO(data.read())
image_crop = Image.open(input_file)
print('print 2')

# ADD THIS LINE TO YOUR CODE
# it modifies the 'data' object, which is the same as 'data_50'
data.seek(0)

# Problem starts.
input_file_50 = BytesIO(data_50.read())
image_crop_50 = Image.open(input_file_50)
<小时/>

您可以尝试的另一种方法(不调用 .seek(0))是将 .read() 的结果赋值给变量:

file_content = request.FILES['file'].read()
input_file = BytesIO(file_content)
input_file_50 = BytesIO(file_content)

image_crop = Image.open(input_file)
image_crop_50 = Image.open(input_file_50)

也许您可以尝试此版本,并让我们知道它是否解决了您的问题。

关于python - Django,保存图像,OSError : cannot identify image file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51000606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com