统一缩放/裁剪/格式化用户上传的头像

时间:2009-07-02 19:44:34

标签: jquery html django

我让用户在我的网站上为自己上传个人资料图片。这些图像以各种不同的格式和大小进行。当我显示这些个人资料照片时,我希望它们具有均匀的像素大小而不会失真。

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

给定一个randomn图像,如何将其缩小以使其低于某个像素高度/宽度而不扭曲图像?

7 个答案:

答案 0 :(得分:5)

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

他们有一个非常整洁的解决方案,带有一个标签,可以在第一次显示之前调整图像大小。您可以存储原始图像并定义您在网站上接受的图像尺寸,其余部分将自动完成。

Filmaster我们也会缓存头像。您可以在此处查看模板标记代码:https://musielak.eu/public/film20/film20/userprofile/templatetags/avatars.py(用户:justlookingaround,pass:film @ ster)。

答案 1 :(得分:3)

我认为PythonMagick会让你这样做。它是ImageMagick

的Python版本

如果您要坚持特定的宽高比,让用户从他们的个人资料照片中选择正确宽高比的区域可能是有意义的。例如,Twitter个人资料照片是方形的,48像素×48像素。如果您不让用户选择正确宽高比的区域,则缩小图像时会压缩图像。

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

答案 2 :(得分:3)

您可以使用PILImage.thumbnail方法。

答案 3 :(得分:2)

使用Django-Sorl,它会为您提供自动生成和缓存缩略图的标签,这些标签有不同的尺寸,包括缩放和智能裁剪。我使用它,将文件和缩略图放在本地S3-mount上,它会自动将所有缩略图放在用户可以从S3获取的位置。

答案 4 :(得分:1)

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

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

有关详细信息,请查看http://labs.findsubstance.com/2008/04/03/as3-upload-encode-images/

答案 5 :(得分:1)

我使用了几个不同的应用来做到这一点:

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

就像我说的那样,我已经将所有三个用于不同的项目(按照列出的顺序,巧合)。对于听起来你正在做的事情,我会选择Sorl或ImageKit。

答案 6 :(得分:1)

...... Flash?谈论在山上漫步只是为了穿过一个池塘。

Python有一个名为PIL的图像库。你必须自己下载它,但它没有那么简单,除非你想让像django-avatar这样的应用程序为你处理一些额外的东西。

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

这真的很容易!甚至转换图像类型就像“保存”方法的单个字符串参数一样简单。