Zola 通过内置函数 提供对自动调整图像大小的支持resize_image
,该函数在模板代码和短代码中都可用。
函数用法如下:
resize_image(path, width, height, op, format, quality)
path
: 源图像相对于目录结构content
中目录的路径。
width
和height
:调整大小的图像的尺寸(以像素为单位)。用法取决于op
参数。
op
(可选):调整大小操作。这可以是以下之一:
"scale"
"fit_width"
"fit_height"
"fit"
"fill"
下面解释了每一个的作用。默认值为"fill"
。
format
(可选):调整大小后的图像的编码格式。可能是以下之一:
"auto"
"jpg"
"png"
"webp"
默认为"auto"
,这意味着根据输入图像格式选择格式。为 JPEG 和其他有损格式选择 JPEG,为 PNG 和其他无损格式选择 PNG。
quality
(可选):调整后图像的 JPEG 或 WebP 质量,以百分比表示。仅在编码 JPEG 或 WebP 时使用;对于 JPEG 默认值为75
,对于 WebP 默认值为无损。
Zola 在构建过程中执行图像处理,并将调整大小的图像放在静态文件目录的子目录中:
static/processed_images/
每个调整大小的图像的文件名是函数参数的哈希,这意味着一旦图像以某种方式调整大小,它将存储在上述目录中,并且在后续构建期间不需要再次调整大小(除非图像本身、尺寸或其他参数已更改)。
该函数返回具有以下架构的对象:
/// The final URL for that asset
url: String,
/// The path to the static asset generated
static_path: String,
/// New image width
width: u32,
/// New image height
height: u32,
/// Original image width
orig_width: u32,
/// Original image height
orig_height: u32,
所有示例的来源都是这个 300 像素 × 380 像素的图像:
"scale"
无论宽高比如何,只需将图像缩放到指定尺寸 ( width
& )。height
resize_image(..., width=150, height=150, op="scale")
"fit_width"
调整图像大小,使生成的宽度width
和高度保持纵横比不变。height
不需要参数。
resize_image(..., width=100, op="fit_width")
"fit_height"
调整图像大小,使生成的高度height
和宽度保持纵横比不变。width
不需要参数。
resize_image(..., height=150, op="fit_height")
"fit"
喜欢"fit_width"
并"fit_height"
组合,但仅在图像大于任何指定尺寸时才调整大小。这种模式很方便,例如,如果图像在短代码中自动缩小到特定尺寸以进行移动优化。调整图像大小,使结果适合width
并height
同时保持纵横比。这意味着宽度或高度将分别为 maxwidth
和height
,但可能其中之一更小以保持纵横比。
resize_image(..., width=5000, height=5000, op="fit")
resize_image(..., width=150, height=150, op="fit")
"fill"
这是默认操作。width
它采用与和
相同纵横比的图像中心部分,height
并将其大小调整为width
和height
。这意味着超出调整后的宽高比的图像部分将被裁剪掉。
resize_image(..., width=150, height=150, op="fill")
resize_image
通过简码在 markdown 中使用resize_image
是 Zola 内置的 Tera 函数(参见模板章节),但它可以使用简码在 Markdown 中使用。
上面的示例是使用resize_image.html
以以下内容命名的简码文件生成的:
{% set image = resize_image(path=path, width=width, height=height, op=op) %}
<img src="{{ image.url }}" />
可以resize_image()
多次使用和/或循环使用。它旨在有效地处理这个问题。
assets
这可以与页面元数据一起使用来创建图片库。该assets
变量包含资源页面目录中所有资产的路径(请参阅资产托管);如果您有图像以外的文件,则需要先在循环中将它们过滤掉,如下例所示。
这可以用在短代码中。例如,我们可以创建一个非常简单的纯 html 的可点击图片库,其中包含以下简码gallery.html
:
<div>
{% for asset in page.assets -%}
{%- if asset is matching("[.](jpg|png)$") -%}
{% set image = resize_image(path=asset, width=240, height=180) %}
<a href="{{ get_url(path=asset) }}" target="_blank">
<img src="{{ image.url }}" />
</a>
{%- endif %}
{%- endfor %}
</div>
正如您所注意到的,我们没有指定op
参数,这意味着它将默认为"fill"
. 同样,格式将默认为"auto"
(根据需要选择 PNG 或 JPEG),JPEG 质量将默认为75
.
要从 Markdown 文件中调用它,只需执行以下操作:
{{ gallery() }}
这是结果:
图片归属:公共领域,除了:_06-example.jpg_:Willi Heidelbach,_07-example.jpg_:Daniel Ullrich。有时在构建画廊时,了解每个资产的尺寸很有用。您可以使用 get_image_metadata获取此信息。