代码之家  ›  专栏  ›  技术社区  ›  MikeN

统一缩放/裁剪/格式化用户上传的虚拟人物

  •  0
  • MikeN  · 技术社区  · 15 年前

    我允许用户在我的网站上传他们自己的个人资料图片。这些图像以各种不同的格式和大小出现。当我显示这些配置文件照片时,我希望它们具有统一的像素大小而不失真。

    我是否必须让用户在上传图像时正确裁剪图像?

    对于一个随机图像,我如何缩小它,使其低于某个像素的高度/宽度,而不扭曲图像?

    7 回复  |  直到 11 年前
        1
  •  1
  •   Chris Amico    15 年前

    我使用了几个不同的应用程序来完成这项工作:

    • sorl.thumbnail :足够简单的界面,并为您制作标签(便于管理)。我不喜欢在模型属性上定义图像大小和规格,这会导致代码混乱,并混淆设计和数据的分离。
    • Photologue :图像大小在管理员中定义并存储在数据库中。那很方便。将zip文件上载到库中。很多好东西。可能比你需要的更多。
    • ImageKit :下一个版本的Photologue正基于此构建。它是较低级别的,在specs文件中定义图像规格(大小和处理器)。它做的并不比它需要做的多,但似乎足够了。

    如我所说,我已经将这三个应用于不同的项目(按照列出的顺序,巧合的是)。听上去你在做什么,我会带着SORL或IMAGEKIT去。

        2
  •  5
  •   michuk    15 年前

    为什么不使用 django-avatar 项目?

    Filmaster 我们还缓存了化身。您可以在这里查看模板标记代码: https://musielak.eu/public/film20/film20/userprofile/templatetags/avatars.py (用户:正当地四处张望,通过:film@ster)。

        3
  •  3
  •   rob    15 年前

    你可以用 PIL Image.thumbnail 方法。

        4
  •  3
  •   aem    15 年前

    我想 PythonMagick 会让你这么做的。它是的python版本 ImageMagick

    如果你要坚持一个特定的长宽比,让用户从他们的个人资料照片中选择一个合适的长宽比区域可能是有意义的。例如,Twitter的个人资料照片是正方形的,48px乘以48px。如果你不让用户选择一个合适的纵横比区域,那么当你缩小它时,图像就会被压扁。

    安全说明:值得一提的是,始终通过缩略图程序运行用户上载的图像是一个好主意,因为恶意用户可能会将信息嵌入各种可能导致安全漏洞的图像文件类型中。在过去的几年里,已经发现了一系列这样的发现,我们有理由期待更多的发现。另一个好的做法是为来自不受信任域的用户提供内容,这样用户上传的恶意代码就不会窃取应用程序的cookie。

        5
  •  2
  •   ironfroggy    15 年前

    使用django-sorl,它将为您提供自动生成和缓存不同大小缩略图的标签,包括缩放和智能裁剪。我使用它,将文件和缩略图放在本地S3挂载上,它会自动将所有缩略图放在用户可以从S3中获取它们的位置。

        6
  •  1
  •   Cameron    15 年前

    如果flash是一个选项,那么可以将图像读取到flash影片(使用filereference类),在那里裁剪/调整大小,然后将图像编码为所需的图像格式(在 AS3 corelib package )然后上传到服务器。

    注意:这只能在闪存10中完成。

    更多信息,请查看 http://labs.findsubstance.com/2008/04/03/as3-upload-encode-images/

        7
  •  1
  •   Jonathan Root Josep Valls    11 年前

    …闪光灯??谈论在山上散步,穿过池塘。

    python有一个称为pil的图像库。你必须自己下载它,但它不会比这简单得多,除非你想让像Django阿凡达这样的应用为你处理一些额外的东西。

    http://effbot.org/imagingbook/image.htm

    真的很容易!即使将图像类型转换为“save”方法也很容易。