![如何在 nautilus 上预览 DDS 和 WEBP 图像?](https://linux22.com/image/980374/%E5%A6%82%E4%BD%95%E5%9C%A8%20nautilus%20%E4%B8%8A%E9%A2%84%E8%A7%88%20DDS%20%E5%92%8C%20WEBP%20%E5%9B%BE%E5%83%8F%EF%BC%9F.png)
我有太多图像需要视觉搜索,因此我无法单独打开每一张图片。
我必须做什么或安装什么才能在 nautilus 上显示 DDS 图像预览?
如果可能的话,我也想预览 webp。
答案1
/usr/share/thumbnailers
使用以下名称和内容创建文件:
直接数字信号处理器
从这里: 写给dds.thumbnailer
:
[Thumbnailer Entry]
Exec=/usr/bin/convert -thumbnail x%s %i png:%o
MimeType=image/x-dds;
网页版
首先安装webp: sudo apt-get install webp
.
基于这。 写给 webp.thumbnailer
:
sudo gedit /usr/share/thumbnailers/webp.thumbnailer
。
[Thumbnailer Entry]
Exec=/usr/bin/dwebp %i -scale 100 100 -o %o
MimeType=image/x-webp;image/webp;
并使用 完全退出 nautilus 后重新启动它nautilus -q
。
作为由@PereJoanMartorell 指出~/.cache/thumbnails/fail
我至少必须删除里面的文件。
笔记
这种 webp 方法的问题在于,所有缩略图都将是 100x100 像素。
但是这个脚本使其正常工作(并且可以高度简化,请参阅下面的答案这里,不依赖于 ScriptEchoColor 库)。此外,基于此改进的版本,对于动画 webp(看起来很有趣,但还没有尝试过,只是了解到 webp 可以制作动画!)。
观察。:在 18.04 和 20.04 上它只在 上运行nemo
,在 nautilus 上它无法生成缩略图但可以将其可视化。
答案2
一些预览方法WebPNautilus(GNOME Files)和基于 Nautilus 的文件管理器(Nemo、Caja)上的图像。
对于 Ubuntu 21.04 及更高版本
安装
imagemagick
sudo apt install imagemagick
获取MIME 类型WebP 图像
- 右键单击 WebP 文件,选择特性。
- 在基本的选项卡中,注意括号中的内容类型字段。通常是
image/webp
。
创建一个缩略图条目对于 WebP 图像
- 首先,创建一个名为的文件
thumbnailers
夹~/.local/share
。mkdir -p ~/.local/share/thumbnailers
webp.thumbnailer
在该文件夹中 创建一个名为的文件。nano ~/.local/share/thumbnailers/webp.thumbnailer
- 将以下行复制到文件中(使用Ctrl+C复制,使用 ++Ctrl粘贴到窗口中):
ShiftV
nano
[Thumbnailer Entry] Exec=/usr/bin/convert %i[0] -thumbnail %sx%s png:%o MimeType=image/webp;
- 按Ctrl+O和Enter保存文件,按Ctrl+X退出
nano
。
笔记:如果您在步骤 2 中获得的 MIME 类型不在上面列出的第三行(键
MimeType
)中,请将其添加到行尾,并可选择以分号(;
)结束该行。- 首先,创建一个名为的文件
清除旧的缓存缩略图并重新启动文件管理器
- 首先,使用以下命令之一完全关闭文件管理器:
nautilus -q nemo -q caja -q
- 接下来,删除缓存的失败缩略图:
rm -r ~/.cache/thumbnails/fail
- (可选)删除所有缓存的缩略图:
rm -r ~/.cache/thumbnails/*
- 最后,重新打开文件管理器。WebP 图像现在应该有其缩略图了。
- 首先,使用以下命令之一完全关闭文件管理器:
对于 Ubuntu 14.04 至 20.10
安装
webp
sudo apt-get install webp
该软件包提供了
dwebp
和webpmux
工具,用于将 WebP 图像转换为较小的 PNG 缩略图。获取MIME 类型WebP 图像
- 右键单击 WebP 文件,选择特性。
- 在基本的选项卡中,注意括号中的内容类型字段。通常是
image/webp
(但也可能是audio/x-riff
,甚至是application/x-wine-extension-webp
)。
创建一个缩略图脚本对于 WebP 图像
webp-thumbnailer-bin
创建一个名为的文件/usr/local/bin
:sudo nano /usr/local/bin/webp-thumbnailer-bin
- 复制此脚本(基于脚本回声颜色和艾斯蒂斯)进入文件(使用Ctrl+C复制,使用 ++Ctrl粘贴到窗口):
ShiftV
nano
#!/bin/bash sInFile="$1" nSize="$2" sOutFile="$3" # Check whether the input image is an animated WebP sInfo="$(webpmux -info "$sInFile")" nAnimation="$(echo "$sInfo" | grep --count animation)" # Get the dimensions of the input image; # For a still image, they are the width and height # of the canvas; # For an animated image, they are the width and height # of the first frame of the image, which might be # different from those of the canvas. if [[ $nAnimation -eq 0 ]]; then sSize="$(echo "$sInfo" | grep Canvas | cut --delimiter=' ' --output-delimiter=$'\t' --fields=3,5)" else sSize="$(echo "$sInfo" | grep '^ *1:' | sed -r 's|^ *1: +([0-9]+) +([0-9]+) .*|\1\t\2|')" fi nWidth="$(echo "$sSize" | cut --fields=1)" nHeight="$(echo "$sSize" | cut --fields=2)" # Get the version number of `dwebp` sVersion="$(dwebp -version)" # Calculate new dimensions for the output thumbnail; # `dwebp` 0.5.0 and later support using 0 as a scaling # dimension; # With older versions, the smaller dimension has to be # manually calculated (using `bc`). if [[ $sVersion < 0.5.0 ]]; then if((nWidth>nHeight)); then nNewWidth="$nSize" nNewHeight="$(echo "scale=10;f=$nHeight*($nNewWidth/$nWidth);scale=0;f/1" | bc)" else nNewHeight="$nSize" nNewWidth="$(echo "scale=10;f=$nWidth*($nNewHeight/$nHeight);scale=0;f/1" | bc)" fi else if((nWidth>nHeight)); then nNewWidth="$nSize" nNewHeight=0 else nNewHeight="$nSize" nNewWidth=0 fi fi # Generate output thumbnail; # If the input image is an animated WebP, the first # frame is extracted with `webpmux` and used as input # for `dwebp`. # Versions of `dwebp` older than 0.4.1 do not support # reading WebP data from standard input, so the frame # has to be written to disk first. if [[ $nAnimation -eq 0 ]]; then /usr/bin/dwebp "$sInFile" -scale "$nNewWidth" "$nNewHeight" -o "$sOutFile" else if [[ $sVersion < 0.4.1 ]]; then /usr/bin/webpmux -get frame 1 "$sInFile" -o "$sOutFile".webp /usr/bin/dwebp "$sOutFile".webp -scale "$nNewWidth" "$nNewHeight" -o "$sOutFile" rm "$sOutFile".webp else /usr/bin/webpmux -get frame 1 "$sInFile" -o - | /usr/bin/dwebp -scale "$nNewWidth" "$nNewHeight" -o "$sOutFile" -- - fi fi
- 按Ctrl+O和Enter保存文件,按Ctrl+X退出
nano
并返回终端。 - 使用以下命令使文件可执行:
sudo chmod +x /usr/local/bin/webp-thumbnailer-bin
笔记:如果你使用尼莫或者卡哈,您可以将该脚本放在主目录中的某个位置,然后运行上述类似的命令
sudo
,例如:mkdir -p ~/.local/bin nano ~/.local/bin/webp-thumbnailer-bin chmod +x ~/.local/bin/webp-thumbnailer-bin
创建一个缩略图条目对于 WebP 图像
- 首先,创建一个名为的文件
thumbnailers
夹~/.local/share
。mkdir -p ~/.local/share/thumbnailers
webp.thumbnailer
在该文件夹中 创建一个名为的文件。nano ~/.local/share/thumbnailers/webp.thumbnailer
- 将以下行复制到文件中(使用Ctrl+C复制,使用 ++Ctrl粘贴到窗口中):
ShiftV
nano
[Thumbnailer Entry] Exec=/usr/local/bin/webp-thumbnailer-bin %i %s %o MimeType=image/webp;audio/x-riff;
- 按Ctrl+O和Enter保存文件,按Ctrl+X退出
nano
。
笔记:如果您在步骤 2 中获得的 MIME 类型不在
MimeType
上述键中,请将其添加到行尾,并可选择以分号 (;
) 结束该行。- 首先,创建一个名为的文件
清除旧的缓存缩略图并重新启动文件管理器
- 首先,使用以下命令之一完全关闭文件管理器:
nautilus -q nemo -q caja -q
- 接下来,删除缓存的失败缩略图:
rm -r ~/.cache/thumbnails/fail
- 或者,删除所有缓存的缩略图(如果您以前使用未优化的缩略图条目或创建大缩略图的脚本):
rm -r ~/.cache/thumbnails/*
- 最后,重新打开文件管理器。WebP 图像现在应该有其缩略图了。
- 首先,使用以下命令之一完全关闭文件管理器:
笔记
两者的缩略图仍然和动画将使用上述方法创建 WebP 图像。
如果您希望所有用户都可以使用缩略图条目,请将其放置
/usr/share/thumbnailers
在~/.local/share/thumbnailers
:sudo nano /usr/share/thumbnailers/webp.thumbnailer
也可以使用类似的 GUI 文本编辑器
gedit
来创建和编辑缩略图条目,但如果您计划将条目放在中/usr/share/thumbnailers
,则nano
使用强力推荐。imagemagick
的一些细节convert
(如果您不想了解所有细节,请跳过此部分):[0]
指定了,这样,如果输入图像是动画 WebP,则只有第一帧被解压缩为 PNG 缩略图。请注意,只有imagemagick
6.9.10-68及更高版本(在 Ubuntu 21.04 及更高版本上)支持动画 WebP 编码和解码。-thumbnail %sx%s
用来代替-thumbnail %s
或-thumbnail x%s
确保输出缩略图的宽度和高度最多为 256 或 128 像素,这与官方缩略图制作者的行为.-thumbnail %s
仅限制宽度和-thumbnail x%s
仅限制高度(看图像几何来自 ImageMagick)。输出图像文件的格式是明确指定的,
png:
因为 Nemo、Caja 和某些版本的 Nautilus不要给输出缩略图提供有效的图像扩展名. 没有png:
,convert
只会创建与输入格式相同的文件(在本例中为 WebP)对于这些文件管理器来说,导致缩略图失败。
其他方法
笔记:
- 仅限缩略图仍然使用以下方法之一时将创建(非动画)WebP 图像。
- 步骤与上面的方法类似,因此仅介绍不同之处。
使用gm
(适用于 Ubuntu 16.04 及更高版本)
安装
graphicsmagick
提供该gm
工具:sudo apt install graphicsmagick
内容
webp.thumbnailer
:[Thumbnailer Entry] Exec=/usr/bin/gm convert %i[0] -thumbnail %sx%s png:%o MimeType=image/webp;
使用ffmpeg
(适用于 Ubuntu 16.04 及更高版本)
安装
ffmpeg
sudo apt install ffmpeg
内容
webp.thumbnailer
:[Thumbnailer Entry] Exec=/usr/bin/ffmpeg -y -i %i -filter scale=%s:%s:force_original_aspect_ratio=1 -f apng %o MimeType=image/webp;
理由:(如果不想了解具体内容请跳过此部分)
-y
指定强制ffmpeg
覆盖临时目录中的输出缩略图。如果没有此选项,则可能无法重新生成失败的缩略图。输出格式明确指定,
-f apng
因为 Nemo、Caja 和某些版本的 Nautilus不要给输出缩略图提供有效的图像扩展名.apng
实际上是用于创建动画 PNG 文件,但如果输入是静止图像,则只会创建普通 PNG。scale=%s:%s:force_original_aspect_ratio=1
用于使输出缩略图的最大尺寸最多为 128 或 256 像素(与官方缩略图制作者的行为)。 看FFmpeg 的文档用于scale
过滤器以获取更多细节。
使用totem-video-thumbnailer
(适用于 Ubuntu 14.04 及更高版本)
安装
totem
和gstreamer1.0-plugins-bad
sudo apt-get install totem gstreamer1.0-plugins-bad
该
totem
软件包提供了totem-video-thumbnailer
,同时该gstreamer1.0-plugins-bad
软件包附带了totem-video-thumbnailer
处理 WebP 图像所需的编解码器。笔记:
totem
是 GNOME 桌面上的默认视频播放器,因此它已预装在 Ubuntu 上。内容
webp.thumbnailer
:- 对于 Ubuntu 16.04 及更高版本(或
totem
3.11.90 及更高版本):请参阅Jan Broms 的回答 - 对于较旧的 Ubuntu 版本(或更旧的版本
totem
):[Thumbnailer Entry] Exec=/usr/bin/totem-video-thumbnailer -s %s --raw %u %o MimeType=image/webp;audio/x-riff;
理由:(如果你不想知道原因,请跳过此部分)
totem-video-thumbnailer
从totem
早于3.11.90默认为缩略图添加边框(胶片覆盖)。此--raw
选项用于禁用该功能。- 对于 Ubuntu 16.04 及更高版本(或
使用dwebp
(适用于 Ubuntu 14.04 及更高版本)
安装
webp
提供dwebp
sudo apt install webp
内容
webp.thumbnailer
:- 对于 Ubuntu 18.04 及更高版本(或
dwebp
0.5.0 及更高版本):[Thumbnailer Entry] Exec=/usr/bin/dwebp %i -resize %s 0 -o %o MimeType=image/webp;
- 对于较旧的 Ubuntu 版本(或更旧的版本
dwebp
):[Thumbnailer Entry] Exec=/usr/bin/dwebp %i -o %o MimeType=image/webp;audio/x-riff;
笔记:如果你使用鹦鹉螺在 Ubuntu 18.04 或更高版本上或卡哈在 Ubuntu 20.04 或更高版本上,不是自动缩小大于默认缩略图尺寸(128x128 或 256x256 像素)的缩略图,那么您应该采用其他方法之一(使用该方法可以正确调整输出缩略图的大小)。
- 对于 Ubuntu 18.04 及更高版本(或
测试于
- Ubuntu 14.04、16.04、18.04、20.04、20.10、21.04
- Linux Mint 20 Cinnamon
- Ubuntu MATE 20.04
答案3
现在有一个更简单的解决方案:
sudo apt install webp-pixbuf-loader
就这样。甚至不需要重启 Nautilus!
答案4
我跟着@CalicoCat 关于为静态 WebP 图像生成缩略图的说明并对代码进行了更改,以便为动画 WebP 图像生成缩略图。在 Linux Mint 20.1 上测试。在 @CalicoCat 的第 3 步中,将代码更改为下面的代码。
1. 编辑文件(若缺失则创建) sudo nano /usr/bin/webp-thumbnailer-bin
并将代码替换为下面的代码
#!/bin/bash
strInFile="$1"
nMaxDimension="$2"
strOutFile="$3"
strInfo="`DISPLAY=NONE vwebp -info "$strInFile"`"
strSize="`echo "$strInfo" | grep Canvas | sed -r 's"Canvas: (.*) x (.*)"\1\t\2"'`"
nImgC="`echo "$strInfo" | grep VP8X | sed -r 's"VP8X: Found (.*) images in file \(loop count = (.*)\)"\1"'`"
nWidth="`echo "$strSize" | cut -f1`"
nHeight="`echo "$strSize" | cut -f2`"
if((nWidth>nHeight));then
nNewWidth=$nMaxDimension
nNewHeight=`bc <<< "scale=10;f=$nHeight*($nNewWidth/$nWidth);scale=0;f/1"`
else
nNewHeight=$nMaxDimension
nNewWidth=`bc <<< "scale=10;f=$nWidth*($nNewHeight/$nHeight);scale=0;f/1"`
fi
if [ "$nImgC" -eq 1 ]; then
/usr/bin/dwebp "$strInFile" -scale $nNewWidth $nNewHeight -o "$strOutFile"
else
/usr/bin/webpmux -get frame 1 "$strInFile" -o - | /usr/bin/dwebp -scale $nNewWidth $nNewHeight -o "$strOutFile" -- -
fi
如果您之前没有遵循@CalicoCat 的说明,那么您需要执行下面的其他步骤。
2. 接下来,使文件可执行
sudo chmod +x /usr/bin/webp-thumbnailer-bin
3.然后在 /usr/share/thumbnailers
sudo nano /usr/share/thumbnailers/webp.thumbnailer
4.将以下内容复制到文件中
[Thumbnailer Entry]
Exec=/usr/bin/webp-thumbnailer-bin %i 256 %o
MimeType=image/webp;image/x-webp;audio/x-riff;application/x-wine-extension-webp;
5. 最后,清除缩略图缓存并重新生成缩略图
对于 Nautilus:
rm ~/.cache/thumbnails/fail/gnome-thumbnail-factory/*
rm ~/.cache/thumbnails/large/*
rm ~/.cache/thumbnails/normal/*
nautilus -q
或者 Nemo
rm ~/.cache/thumbnails/fail/gnome-thumbnail-factory/*
rm ~/.cache/thumbnails/large/*
rm ~/.cache/thumbnails/normal/*
nemo -q
我对@CalicoCat 的回答所做的更改的解释:
我添加了一个变量nImgC
,用于从 WebP 文件中获取帧数。如果只有一帧,则 WebP 图像是静态的。否则,WebP 图像是动画的。因此,我们使用webpmux
提取第一帧,然后dwebp
将其保存为可用的缩略图。
对于动画 WebP 图像的缩略图,我使用的是第一帧,因为使用任何其他帧都可能在缩略图中产生伪影(-get frame 1
是第一帧,-get frame 0
保留用于获取最后一帧,而最后一帧通常会因为某些动画的压缩方式而缺少像素)。
感谢@ColioCat 的帮助
感谢@ColioCat 删除了 2 个不必要的 cut 调用,并通过一些小技巧简化了代码。
/usr/bin/webpmux -get frame 1 "$strInFile" -o - | /usr/bin/dwebp -scale $nNewWidth $nNewHeight -o "$strOutFile" -- -
上面的代码取代了下面的代码,我们首先必须将webpmux
抓取的帧写入磁盘,使用它将dwebp
其转换为nautilus
或可以使用的内容nemo
,然后将其删除。根据建议,我在这里保留原始代码片段。
/usr/bin/webpmux -get frame 1 "$strInFile" -o "$strOutFile".temp
/usr/bin/dwebp "$strOutFile".temp -scale $nNewWidth $nNewHeight -o "$strOutFile"
rm "$strOutFile".temp