【问题标题】:python : error while saving image from urlpython:从url保存图像时出错
【发布时间】:2012-10-30 17:31:22
【问题描述】:

我需要使用 Django 从 url 保存图像。 所以我确实像教程所说的那样,但我得到了一个奇怪的错误。

page = requests.get(url)
if page.status_code != 200 or not page.content:
assert 0, 'can\'t download article image'
image = image_content_file(page.content)
article.image.save('%i.jpg' % article.pk, image, save=False)

我的文章模型:

class Article(models.Model):
   title = models.CharField(max_length=255)
   content = models.TextField(blank=True)
   image = models.ImageField(blank=True, upload_to='upload/article_image')
   date_created = models.DateTimeField(null=True, blank=True, db_index=True)

我创建了upload/article_image 文件夹并将其权限设置为777

我的image_content_file 功能:

def image_content_file(img_content):
    input_file = StringIO(img_content)
    output_file = StringIO()
    img = Image.open(input_file)
    if img.mode != "RGB":
        img = img.convert("RGB")
    img.save(output_file, "JPEG")
    return ContentFile(output_file.getvalue())

但我得到了这个错误

image = image_content_file(page.content)
  File "/home/yital9/webservers/binarybits/binarybits/../binarybits/utils/img.py", line 24, in image_content_file
    img.save(output_file, "JPEG")
  File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 1439, in save
    save_handler(self, fp, filename)
  File "/usr/local/lib/python2.7/dist-packages/PIL/JpegImagePlugin.py", line 471, in _save
    ImageFile._save(im, fp, [("jpeg", (0,0)+im.size, 0, rawmode)])
  File "/usr/local/lib/python2.7/dist-packages/PIL/ImageFile.py", line 481, in _save
    e = Image._getencoder(im.mode, e, a, im.encoderconfig)
  File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 399, in _getencoder
    return apply(encoder, (mode,) + args + extra)
TypeError: function takes at most 9 arguments (11 given)

你能告诉我什么是问题吗?

【问题讨论】:

标签: python django image jpeg python-imaging-library


【解决方案1】:

这段代码应该能满足你的需要:

import urllib2
from django.core.files.base import ContentFile

content = ContentFile(urllib2.urlopen(url).read())
article.image.save('%i.jpg' % article.pk, content, save=True)

如果您只是想从网上下载图片,最好这样做:

from urllib import urlretrieve
urlretrieve(url, '%i.jpg' % article.pk)

【讨论】:

  • 这与问题完全没有关系。
  • 为什么?这就是python从url下载文件的方式。如果我知道解决问题的更好方法,在我看来是相关的指出来。
  • 如果您查看代码,他正在将他的图片转换为 RGB 颜色空间,然后将其保存。这是错误发生的时候,而不是他尝试下载错误的时候。 但是你说得对,他下载图片的方法很奇怪,用你的方法会更容易。我写的第一条评论太快了,抱歉。
  • 你能给我一个保存这张图片的例子吗? foo = urlretrieve(data['image'], '/home/yital9/webservers/binarybits/binarybits/media/upload/article_image/%i.jpg' % article.pk) article.image.save('%i.jpg ' % article.pk, foo) -- 此代码将图像保存在文件夹中,但不保存到模型中
  • 对不起,我误解了问题,现在检查答案
【解决方案2】:

要使其在 Python 3 中工作,您必须使用

urllib.request.urlretrieve(url=filepath)

【讨论】:

    猜你喜欢
    • 2015-07-25
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    • 2015-04-05
    • 2012-03-30
    • 1970-01-01
    相关资源
    最近更新 更多