Hugo图像处理和文件命名优化

在使用Hugo构建静态网站时,经常需要处理图像,比如生成缩略图、添加水印等。但是,Hugo生成的文件名可能不够美观,本文将介绍如何优化这些文件名,使其更加友好。

问题描述

Hugo中,使用图像处理功能时,生成的文件名可能不够直观。例如,原始文件名为notebook.jpg,经过处理后,文件名可能会变成notebook_hu3d03a01dcc18bc5be0e67db3d8d209a6_1586565_filter_6003090614434618376.jpg,这样的文件名不仅难以阅读,也不利于SEO。

解决方案

从Hugo 0.100.0版本开始,支持在处理图像后重命名文件,使用resources.Copy函数可以实现这一点。但是,由于通常处理的是图像列表,因此需要动态生成文件名。

要将处理后的图像文件名恢复为原始文件名,可以在循环中使用.RelPermalink来获取原始文件的完整路径。修改后的代码如下:

{{ $withlogo := .Filter (images.Overlay $logo $x $y) | resources.Copy .RelPermalink }}

这样,处理后的图像文件名将与原始文件名相同。

对于缩略图,可以在文件名后添加一个后缀,例如_t。在Hugo的模板语言中,可以使用printf函数来构建字符串,并通过path函数来获取文件的目录、基本名和扩展名。

以下是构建新文件路径的代码示例:

{{ $thumbname := printf "%s/%s%s%s" (path.Dir .RelPermalink) (path.BaseName .RelPermalink) "_t" (path.Ext .RelPermalink) }} {{ $resized := .Fill "150x115 q20" | resources.Copy $thumbname }}

这样,缩略图的文件名将包含原始文件名、后缀和原始扩展名。

{{ $logo := resources.Get "img/overlay-logo.png" }} {{ $image := (.Page.Resources.ByType "image") }} {{ with $image }} {{ range . }} {{ $thumbname := printf "%s/%s%s%s" (path.Dir .RelPermalink) (path.BaseName .RelPermalink) "_t" (path.Ext .RelPermalink) }} {{ $resized := .Fill "150x115 q20" | resources.Copy $thumbname }} {{ $x := sub .Width (add $logo.Width 10) }} {{ $y := sub .Height (add $logo.Height 10) }} {{ $withlogo := .Filter (images.Overlay $logo $x $y) | resources.Copy .RelPermalink }} {{ end }} {{ end }}
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485