将BytesIO保存到Django ImageField

2024-04-27 13:12:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个网页刮板,我想下载它正在抓取的页面的图像,并将其保存为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/目录,但不会将其保存到模型中。模型字段定义为:

^{pr2}$

我错过了什么?在


Tags: io模型刮板boxtrue网页source屏幕
1条回答
网友
1楼 · 发布于 2024-04-27 13:12:56
<>太好了!问题是,我使用如下代码调用上述方法:

source = NewsSource.objects.get(name=name)
html,screenshot = get_url(source.url)
save_screenshot(source,screenshot)
source.save()

所以save_sceenshot方法起作用了,但是它所做的工作被我的源.save()打电话。去想一想!在

相关问题 更多 >