我有一个网络爬虫,想要下载它正在抓取的页面的图像,并将其保存为Django模型中的“截图” ImageField。我正在使用以下代码:
def save_screenshot(source,screenshot):
box = (0, 0, 1200, 600)
im = Image.open(io.BytesIO(screenshot))
region = im.crop(box)
tempfile_io = io.BytesIO()
region.save(tempfile_io, 'JPEG', optimize=True, quality=70)
source.screenshot.save(source.slug_name+"-screenshot",ContentFile(tempfile_io.getvalue()),save=True)
它将截图保存到/media/news_source_screenshots/目录,但不会将其保存到模型中。该模型字段定义如下:
screenshot = models.ImageField(upload_to='news_source_screenshots',blank=True,null=True)
我漏掉了什么?
region
... 在source.screenshot.save(source.slug_name+"-screenshot", ContentFile(region.get_value()), save=True)
中,记住现在region
是你的临时文件,因为tempfile_io
是一个空缓冲区。 - German Alzatecode
TypeError: 'Image' does not support the buffer interfacecode
,此外图片也没有被保存在/media/news_source_screenshost/ 目录中。 - Anthony Ainsworthtempfile_io = io.BytesIO()
改为了tempfile_io = io.StringIO()
,但在region.save
这行代码处出现了TypeError: string argument expected, got 'bytes'
的错误提示。@german-alzate-martinez - Anthony Ainsworth