在使用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 }}