如何在 nautilus 上预览 DDS 和 WEBP 图像?

如何在 nautilus 上预览 DDS 和 WEBP 图像?

我有太多图像需要视觉搜索,因此我无法单独打开每一张图片。

我必须做什么或安装什么才能在 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 及更高版本

  1. 安装imagemagick

    sudo apt install imagemagick
    
  2. 获取MIME 类型WebP 图像

    • 右键单击 WebP 文件,选择特性
    • 基本的选项卡中,注意括号中的内容类型字段。通常是image/webp
  3. 创建一个缩略图条目对于 WebP 图像

    • 首先,创建一个名为的文件thumbnailers~/.local/share
      mkdir -p ~/.local/share/thumbnailers
      
    • webp.thumbnailer在该文件夹中 创建一个名为的文件。
      nano ~/.local/share/thumbnailers/webp.thumbnailer
      
    • 将以下行复制到文件中(使用Ctrl+C复制,使用 ++Ctrl粘贴到窗口中): ShiftVnano
      [Thumbnailer Entry]
      Exec=/usr/bin/convert %i[0] -thumbnail %sx%s png:%o
      MimeType=image/webp;
      
    • Ctrl+OEnter保存文件,按Ctrl+X退出nano

    笔记:如果您在步骤 2 中获得的 MIME 类型不在上面列出的第三行(键MimeType)中,请将其添加到行尾,并可选择以分号(;)结束该行。

  4. 清除旧的缓存缩略图并重新启动文件管理器

    • 首先,使用以下命令之一完全关闭文件管理器:
      nautilus -q
      nemo -q
      caja -q
      
    • 接下来,删除缓存的失败缩略图:
      rm -r ~/.cache/thumbnails/fail
      
    • (可选)删除所有缓存的缩略图:
      rm -r ~/.cache/thumbnails/*
      
    • 最后,重新打开文件管理器。WebP 图像现在应该有其缩略图了。

对于 Ubuntu 14.04 至 20.10

  1. 安装webp

    sudo apt-get install webp
    

    该软件包提供了dwebpwebpmux工具,用于将 WebP 图像转换为较小的 PNG 缩略图。

  2. 获取MIME 类型WebP 图像

    • 右键单击 WebP 文件,选择特性
    • 基本的选项卡中,注意括号中的内容类型字段。通常是image/webp(但也可能是audio/x-riff,甚至是application/x-wine-extension-webp)。
  3. 创建一个缩略图脚本对于 WebP 图像

    • webp-thumbnailer-bin创建一个名为的文件/usr/local/bin
      sudo nano /usr/local/bin/webp-thumbnailer-bin
      
    • 复制此脚本(基于脚本回声颜色艾斯蒂斯)进入文件(使用Ctrl+C复制,使用 ++Ctrl粘贴到窗口): ShiftVnano
      #!/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+OEnter保存文件,按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
    
  4. 创建一个缩略图条目对于 WebP 图像

    • 首先,创建一个名为的文件thumbnailers~/.local/share
      mkdir -p ~/.local/share/thumbnailers
      
    • webp.thumbnailer在该文件夹中 创建一个名为的文件。
      nano ~/.local/share/thumbnailers/webp.thumbnailer
      
    • 将以下行复制到文件中(使用Ctrl+C复制,使用 ++Ctrl粘贴到窗口中): ShiftVnano
      [Thumbnailer Entry]
      Exec=/usr/local/bin/webp-thumbnailer-bin %i %s %o
      MimeType=image/webp;audio/x-riff;
      
    • Ctrl+OEnter保存文件,按Ctrl+X退出nano

    笔记:如果您在步骤 2 中获得的 MIME 类型不在MimeType上述键中,请将其添加到行尾,并可选择以分号 ( ;) 结束该行。

  5. 清除旧的缓存缩略图并重新启动文件管理器

    • 首先,使用以下命令之一完全关闭文件管理器:
      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 及更高版本)

  • 安装totemgstreamer1.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 及更高版本(或totem3.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-thumbnailertotem早于3.11.90默认为缩略图添加边框(胶片覆盖)。此--raw选项用于禁用该功能。

使用dwebp(适用于 Ubuntu 14.04 及更高版本)

  • 安装webp提供dwebp

    sudo apt install webp
    
  • 内容webp.thumbnailer

    • 对于 Ubuntu 18.04 及更高版本(或dwebp0.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 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

相关内容