如何调整上传的图片大小?

时间:2009-11-20 10:46:46

标签: python django python-imaging-library

在VIEW中,我想调整上传图像的大小,并在模型中保存2份副本并更改

5 个答案:

答案 0 :(得分:8)

Sorl具有很强的缩略功能,也可以在模板中使用...它还会检查图像是否已经存在于文件系统中,否则它将创建新的已调整大小的文件。

取决于您尝试从中调用图片的位置。

http://thumbnail.sorl.net/docs

def image_thumb(self):
    thumb = DjangoThumbnail(self.image_file, (380, 246))
    return '<img src="%s" alt="%s" border="0" />' % (thumb.absolute_url, self.alt)
image_thumb.allow_tags = True

def get_thumb_url(self):
    thumb = DjangoThumbnail(self.image_file, (380, 246))
    return thumb.absolute_url

另外正如我所提到的,你可以直接从模板中调用它来加载任何图像。

{% load thumbnail %}
{% thumbnail url 100x100 crop,upscale %}

显然,您将调用文件顶部的加载项以及您希望显示的缩略图。关于这个的好处是你可以用这个

这样的python对象替换url
{% thumbnail image.get_absolute_url 150x150 crop %}

我希望大小是自我解释的,最终作物,高档是sorl-thumbnail的功能,它将对最终图像产生各种影响。

答案 1 :(得分:3)

从这里开始,有一件事需要注意:

  • 在您的模型(数据库)中,最好将路径保存到图像,而不是图像本身。如果可能的话,这些应保存在文件系统中并直接从那里提供(除非您无权访问文件系统)。

因此,在您看来,您应该执行以下操作:

  1. 将上传的文件保存到某个地方(除非它已保存,然后你有了它的路径,转到2),
  2. 将原始图片路径放入数据库
  3. 调整大小,
  4. 将已调整大小的图像保存到文件系统,
  5. 将已调整大小的图像的路径保存到数据库中。
  6. 关于第3点和第4点,我这样做:

    orig_img = Image.open(self.imageFile)
    orig_img_dim = orig_img.size # (orig_img_dim[0], orig_img_dim[1]) is (y, x) size of image
    if (orig_img_dim[0] > 600) or (orig_img_dim[1] > 1000): # only resize images too large
      orig_img.thumbnail((600, 1000), Image.ANTIALIAS)
    orig_img.save(DESTINATION_FILENAME)
    

    请注意,我只调整太大的图片(大于'缩略图'尺寸)。

答案 2 :(得分:3)

使用sorl - http://thumbnail.sorl.net/docs/

为你完成任务See this

class MyModel(models.Model):
    name = models.TextField(max_length=50)
    photo = ImageWithThumbnailsField(
                upload_to='profiles',
                thumbnail={'size': (50, 50)},
                extra_thumbnails={
                       'icon': {'size': (16, 16), 'options': ['crop', 'upscale']},
                       'large': {'size': (200, 400)},
                },
)

此代码可以随心所欲

答案 3 :(得分:2)

答案 4 :(得分:1)

Django Imagekit可让您指定多种图片尺寸。调整大小调整后的图像,然后您可以在视图和模板中访问它们和原始图像文件。