Django响应式图像库django-pictures

2024-02-03 22:44
文章标签 图像 django 响应 pictures

本文主要是介绍Django响应式图像库django-pictures,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是响应式图像?

响应式设计是指网页在不同尺寸的设备上都有良好的显示效果。响应式设计的网页图像,就是响应式图像。

图片

django-pictures是使用现代代码(如 AVIF 和 WebP)的响应式跨浏览器图像库。

特点

  • 使用 Picture 标签的响应式 Web 图像

  • 原生电网系统支持

  • 提供带或不带 CDN 的文件

  • 地方发展的占位符

  • 迁移支持

  • Celery、Dramatiq 或 Django RQ 的异步图像处理

  • DRF 支持

安装

python3 -m pip install django-pictures

settings.py添加设置

INSTALLED_APPS = [# ...'pictures',
]# the following are defaults, but you can override them
PICTURES = {"BREAKPOINTS": {"xs": 576,"s": 768,"m": 992,"l": 1200,"xl": 1400,},"GRID_COLUMNS": 12,"CONTAINER_WIDTH": 1200,"FILE_TYPES": ["WEBP"],"PIXEL_DENSITIES": [1, 2],"USE_PLACEHOLDERS": True,"QUEUE_NAME": "pictures","PROCESSOR": "pictures.tasks.process_picture",}

如果安装了Dramatiq或Celery,将默认为异步图像处理。

占位符

该库带有动态创建的占位符,以简化本地PICTURES["USE_PLACEHOLDERS"]发展。若要启用它们,请添加以下内容以启用该设置并添加以下 URL 配置:

# urls.py
from django.urls import include, path
from pictures.conf import get_settingsurlpatterns = [# ...
]if get_settings().USE_PLACEHOLDERS:urlpatterns += [path("_pictures/", include("pictures.urls")),]

配置

纵横比:指定图像的纵横比,图像将被裁剪到指定的纵横比。纵横比指定为带斜杠的字符串在宽度和高度之间。例如16/9,将图像裁剪为16:9。

# models.py
from django.db import models
from pictures.models import PictureFieldclass Profile(models.Model):title = models.CharField(max_length=255)picture = PictureField(upload_to="avatars",aspect_ratios=[None, "1/1", "3/2", "16/9"],# template.html
{% load pictures %}
{% picture profile.picture img_alt="Spiderman" ratio="16/9" m=6 l=4 %}

如果未在模板中指定纵横比或“无”,则图像将以文件的原始纵横比提供。

只能在模板中使用已在模型上定义的纵横比。 如果提供了其他值,则模型将默认为aspect_ratios[None]。

断点:可以定义自己的断点,它们应该与您的CSS库中使用的断点相同。只需覆盖PICTURES["BREAKPOINTS"]设置即可。

网格列:网格在网页设计中非常普遍,以至于它们甚至进入了CSS。默认为 12 列,可以通过设置PICTURES["GRID_COLUMNS"]覆盖此设置。

容器宽度:容器通常用于限制布局的最大宽度, 在更大的屏幕上提高可读性。默认为1200px,可以通过PICTURES["CONTAINER_WIDTH"]设置覆盖此设置。如果不使用容器,也可以将其设置为None。

像素密度:默认1x和2x像素密度服务。

与Django Rest框架(DRF)对接

django-pictures提供了一个只读PictureField,可用于包含所有 DRF 序列化程序中可用的图片大小。

from rest_framework import serializers
from pictures.contrib.rest_framework import PictureFieldclass PictureSerializer(serializers.Serializer):picture = PictureField()

响应可以限制为单个纵横比和图像源,如下所示,向字段提供aspect_ratio和image_source参数。

from rest_framework import serializers
from pictures.contrib.rest_framework import PictureFieldclass PictureSerializer(serializers.Serializer):picture = PictureField(aspect_ratio="16/9", image_source="WEBP")

还可以向序列化程序提供可选的GET参数, 以指定要包含在响应中的纵横比和断点。参数以fieldname_为前缀,以避免与其他字段冲突。

curl http://localhost:8000/api/path/?picture_ratio=16%2F9&picture_m=6&picture_l=4
# %2F is the url encoded slash

访问结果:

{"other_fields": "…","picture": {"url": "/path/to/image.jpg","width": 800,"height": 800,"ratios": {"1/1": {"sources": {"image/webp": {"100": "/path/to/image/1/100w.webp","200": "…"}},"media": "(min-width: 0px) and (max-width: 991px) 100vw, (min-width: 992px) and (max-width: 1199px) 33vw, 25vw"}}}
}

注意:仅当指定了断点时,才会包含键media。

github:https://github.com/codingjoe/django-pictures

这篇关于Django响应式图像库django-pictures的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/675647

相关文章

对Django中时区的解读

《对Django中时区的解读》:本文主要介绍对Django中时区的解读方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景前端数据库中存储接口返回AI的解释问题:这样设置的作用答案获取当前时间(自动带时区)转换为北京时间显示总结背景设置时区为北京时间 TIM

Python+wxPython构建图像编辑器

《Python+wxPython构建图像编辑器》图像编辑应用是学习GUI编程和图像处理的绝佳项目,本教程中,我们将使用wxPython,一个跨平台的PythonGUI工具包,构建一个简单的... 目录引言环境设置创建主窗口加载和显示图像实现绘制工具矩形绘制箭头绘制文字绘制临时绘制处理缩放和旋转缩放旋转保存编

python+OpenCV反投影图像的实现示例详解

《python+OpenCV反投影图像的实现示例详解》:本文主要介绍python+OpenCV反投影图像的实现示例详解,本文通过实例代码图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前言二、什么是反投影图像三、反投影图像的概念四、反向投影的工作原理一、利用反向投影backproj

Django之定时任务django-crontab的实现

《Django之定时任务django-crontab的实现》Django可以使用第三方库如django-crontab来实现定时任务的调度,本文主要介绍了Django之定时任务django-cront... 目录crontab安装django-crontab注册应用定时时间格式定时时间示例设置定时任务@符号

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

html5的响应式布局的方法示例详解

《html5的响应式布局的方法示例详解》:本文主要介绍了HTML5中使用媒体查询和Flexbox进行响应式布局的方法,简要介绍了CSSGrid布局的基础知识和如何实现自动换行的网格布局,详细内容请阅读本文,希望能对你有所帮助... 一 使用媒体查询响应式布局        使用的参数@media这是常用的

OpenCV图像形态学的实现

《OpenCV图像形态学的实现》本文主要介绍了OpenCV图像形态学的实现,包括腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽运算和黑帽运算,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起... 目录一、图像形态学简介二、腐蚀(Erosion)1. 原理2. OpenCV 实现三、膨胀China编程(

springboot filter实现请求响应全链路拦截

《springbootfilter实现请求响应全链路拦截》这篇文章主要为大家详细介绍了SpringBoot如何结合Filter同时拦截请求和响应,从而实现​​日志采集自动化,感兴趣的小伙伴可以跟随小... 目录一、为什么你需要这个过滤器?​​​二、核心实现:一个Filter搞定双向数据流​​​​三、完整代码

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

Django序列化中SerializerMethodField的使用详解

《Django序列化中SerializerMethodField的使用详解》:本文主要介绍Django序列化中SerializerMethodField的使用,具有很好的参考价值,希望对大家有所帮... 目录SerializerMethodField的基本概念使用SerializerMethodField的