django模板标签做一些基本的图像处理,并缓存得到的图像

django-simplethumb的Python项目详细描述


#django simplethumb-动态调整图像大小

[![构建状态](https://api.travis ci.org/jscaltreto/django simplethumb.png)(http://travis ci.org/jscaltreto/django simplethumb)

交叉兼容。

这实现了一个新的模板标记"simplethumb",它接受两个参数:

*image file-表示静态文件的字符串,或imagefieldfile实例(表示imagefield对象)。
*spec-要运行的转换的规范在图像上。

标记将URL返回到生成的缩略图。

与imagefit一样,修改后的图像只有在浏览器请求时才会生成。这是通过将规范编码到生成的文件名中来实现的。一旦请求,就会读入编码的
规范,然后从磁盘读取原始图像并进行处理,然后返回缩略图。此选项(默认启用)缓存机制可确保对同一映像的重复请求
不会被重复重新处理。


理论上,一个不太好的攻击者可能会向您的服务器发送大小不等的映像请求的垃圾邮件,而CPU开销会很大。为了解决这个问题,包含了一些基本的安全性:
规范包含一个检查字节,并通过将原始图像文件的hmac进行异或运算来混淆
名称及其修改时间(用于缓存破坏)。如果校验和失败,则返回404。

d/或pr.



\在模板中按名称命名。
*无数据库要求、新型号或修改型号等。
*与MediaQueries完美匹配,以适应移动、平板电脑和多尺寸屏幕。
*比HTML/CSS大小调整和无大文件下载更好的质量,非常适合带宽更低的应用。








例1:以200 x 150 px的最大大小呈现图像:以200 x 150 px的最大大小呈现图像:以200 x 150 px的最大大小呈现图像:

``html
{%simplethumb"myimage.png""200x 150"%}
```

例2:将模型的新闻图像渲染为缩略图(假设缩略图是一个已定义的预设预设的预设的预设图像)作为缩略图(假设缩略图是一个已定义的预设的预设预设的预设的预设图像)作为缩略图(假设):

``html
{%simplethumb"news.image""thumbnail"%}
`````


例3:以150 x 150 px的最大裁剪尺寸呈现/static/myimage.png图像图像:

``html
{{%simplethumb"myimage.png"myimage.png"150x 150,c"}
`````
>
>
`````br/>例3:以maxii/maxii/stat/myimage.png格式呈现/static/myimage.png图像;以maxii/maxii/static/myimage.png格式呈现。是的最大高度为150 px并转换为JPEG:

``html
{{{simplethumb"myimage.png""x150 jpg"}
````


套件)
*如果您希望避免服务器上出现非常大的图像,请在上载之前考虑调整原始图像的大小。




[最新版本](https://img.shields.io/pypi/v/django simplethumb.svg)

``bash
pip-install-django simplethumb
````


`>
`>
`````>````````

` ` ` ` ` ` ` ` ` ` ` ` ` ` `
` ` ` ` ` ` ` ` `
` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `是的####更新已安装的应用程序

在"设置"中。py,在已安装的应用程序中添加"simplethumb"。

```python
已安装的应用程序=(
…,
'simplethumb',

````


),


`````









<
<
<
<



















是的您可以通过设置来覆盖它们或创建新的设置。py



>自定义预置示例:

``python
simplethumb预置={
‘缩略图’:'64x64,c’,
‘我的预设1’:'300x200 jpeg’,
‘我的预设2’:'100x’,

`










//
//35;缓存

bec由于动态调整图像的大小很昂贵,默认情况下会启用django缓存。


您可以通过覆盖下面通过设置描述的默认值来自定义默认缓存首选项。py:

``python
`enable/disable server cache
simplehumb cache enabled=true
使用cache dict设置特定于simplehumb的缓存名称
simplehumb cache_backend_name='simplehumb'
设置缓存ttl(默认为30天)
simplehumb cache_ttl=3600*24*30

caches={
'simplehumb':{
'backend':'django.core.cache.backends.filebased.filebasedcache',
"location":os.path.join(tempfile.gettempdir(),'django_simplethumb')
}
}
````


请注意,"caches"的默认值将与"expires header"中的默认值合并。pires header告诉浏览器应该从服务器请求
资源还是使用缓存版本。
这有两个核心好处。浏览器将在第二次加载时使用资源的缓存版本
,页面加载将快得多。此外,它还需要较少的服务器请求。


作为页面评分参数,网页中使用的静态资源应包含
过期信息以获得更好的性能。

expires头的默认值与缓存ttl(30天)相同。
通过settings.py将此值设置为:

`` python
simplethumb_expire_header=3600 1小时
```


mize_png`-是否优化png文件(默认值为false)
*`simplethumb_hmac_key`-生成用于编码规范的hmac时要使用的密钥(默认值为settings.secret_key)

虽然有些标记可能组合在一起,
有些将发生冲突,并可能产生意外的结果。鼓励使用常识(即不要试图同时将图像转换为JPEG和PNG)。

*调整图像大小-"wxh"-按比例缩放图像以适合宽框和高框。例如,"300x400"
*适合宽度-"wx"-按比例缩放图像以获得宽度。例如,"300x"
*适合高度-"xh"-按比例缩放图像以获得高度。例如,"x400"
*缩放图像-"p%"-按比例缩放图像的百分比。例如,"50%"
*裁剪图像-"wxh,c-缩放图像以*填充*一个宽而高的框,裁剪掉多余的部分。例如,"100x100,c"
*将图像转换为JPEG-"JPEG"-将图像转换为JPEG(可选地包括1到100之间的"质量"设置)。例如,"jpeg80"
*将图像转换为png-"png"-将图像转换为png(可选地包括要优化的字母)。例如,"pngo"
*裁剪图像与比率-"c_x_u:y_u"-将图像裁剪为指定的纵横比。这是P在调整大小之前执行。例如,"c16:9"

如果未指定要转换的格式,则将使用原始图像格式。尽管它将使用定义的默认质量或优化设置重新提交。


除了"缩放图像"之外,任何"调整大小"命令都不会增加图像的大小。因此,如果
图像小于指定的边界,则不会缩放图像。还要注意,所有作物都是"中心作物"

,因为规格最终将以小二进制格式编码以包含在图像url中,因此可以指定的大小有一些硬限制。任何高于这些限制的内容都将被截断:

*宽度和高度属性限制为13位,这意味着最大图像大小为8191x8191px(大约67mp,相当大)。
*百分比比例属性限制为10位,这意味着图像只能缩放到1023%。
*裁剪比率存储为自定义的16位无符号浮点(5位指数,11位尾数),因此存在与精度相关的限制。它应该足够适合图像裁剪。

通过pip
2卸载pil。通过自制程序安装pip:`brew install pil`
3。通过pip重新安装pil:`pip install pil`





欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何在Java中扩展工厂方法模式中的类   在Java中,什么更适合于网络?UDP还是TCP?   java onJsAlert返回消息是对象而不是字符串   音频用Java调高/调低电脑音量?   java将JTextField添加到JOptionPane中:ShowOptionDialog   java合并对来自的行进行排序。txt文件   在Java库Android Studio 1.0.1中找不到本地路径   java如何从序列中删除最后一个数字?   netty简单Java api,用于形成和发送ntp数据包   java装饰器模式问题   Java复制数组引用   在SpringBootApplication类中使用服务的java抛出NullPointerException   在Struts 2中使用拦截器进行身份验证后的java登录重定向   java@SpringBootApplication ComponentScan在新的Eclipse项目中无法正常工作   如何从Android中的java代码中删除任何xml属性   java为什么我的JUnit错误收集器不报告错误?