无法打开 90% 的最近保存的图片(webp 格式)

无法打开 90% 的最近保存的图片(webp 格式)

我最近在笔记本电脑上安装了 Ubuntu 20.04,但遇到了这个问题,我无法打开我保存的大多数图像。我收到一条错误消息,提示

无法识别的图像文件格式

(但它们实际上只是 jpg 和 PNG)。

我已经将图片移到 U 盘,然后移到 Windows PC 上测试,它们可以正常打开。我还可以选择使用 Firefox 打开虽然这可行,但很不方便。我尝试重命名它们,但遇到了同样的问题。我尝试过更新、升级、重新启动并从终端打开图像,但我仍然无法打开从 reddit 保存的一些愚蠢的壁纸。

我该如何修复此问题?


更新:

所以我能够弄清楚,事实证明这些是 webp图像,这很奇怪,因为它们都保存在 .jpg 甚至 .png 下,无需我干预。所以我安装了一些可以正确查看它们的程序,但仍然存在问题。如果我要在电子邮件或网站或其他东西上链接图像,我将无法真正看到我链接的是什么,除非我先在单独的窗口中打开。所以我不知道该怎么做。

来源:OP 的评论

答案1

您无法打开的 90% 的图片都是 .webp 图片文件,这种文件在网络上越来越常见。webP 使用现代 VP8 压缩格式来为网络提供高效的图片压缩。在相同质量下,比优化的 JPEG 额外增加 30% 以上并不罕见。当您解压 .webp 文件时,您可以看到质量的差异。

在所有当前支持的 Ubuntu 版本中打开终端并输入:

sudo apt install webp

在 Ubuntu 22.04 及更高版本中安装 webp-pixbuf-loader 包将在文件管理器中显示 webp 文件的缩略图。

sudo apt install webp-pixbuf-loader

假设您有一个名为 FILE 的图像文件,该文件在文件管理器中不显示缩略图,并且Unrecognized Image File Format在您尝试打开它时返回错误。要将名为 FILE 的 .webp 文件转换为 .png,请运行以下命令。

dwebp FILE -o output_image.png 

要将 webp 转换为 .png,请运行以下命令。

dwebp 输入图像.webp -o 输出图像.png# 或 output_image.jpg 为 jpg

要使用 ImageMagick 将 webp 转换为 .png,请运行以下命令。

convert input.webp output.png
find . -type f -name "*.webp"  -exec rename 's/.webp/.png/' {} +'

要将多个 webp 文件转换为 .png,请运行以下命令。

for x in ./*.webp; do
  convert "${x%}" "${x%}".png
done
find . -type f -name "*.webp.png" -exec rename 's/.webp//' {} +

webp 包还包含cwebp命令。cwebp使用 WebP 格式压缩图像。输入格式可以是 PNG、JPG、TIFF、WebP 或原始 Y'CbCr 样本。

答案2

我分享了我用来将 webp 文件转换为更传统格式的原始脚本。这样它们就可以在默认的 Ubuntu 桌面的任何地方使用,包括 Nautilus 中的工作缩略图。

请注意:我是这方面的业余爱好者,不是可靠的专家。如果您使用/修改此脚本,那是您的选择和责任。

该脚本取决于webp正在安装的包。它会递归地遍历给定目录及其子目录中找到的每个 *.webp 文件。

它会转换为 png,因为这是我的偏好,但可以在以 开头的行中进行更改dwebp。或者,可以为 fileneme 扩展名引入一个变量,以使其更符合人体工程学。

它还具有后备操作,因为有时 dwebp 无法转换:根据我的经验,有时使用 .webp 扩展名(由 Firefox 提供)保存的文件仍然只是常规的 .jpg 或 .png。然后 dwebp 返回错误。我发现大多数情况下,此类文件都是 .jpg,因此在后备操作中我将它们重命名为 .jpg。我认为在这种情况下,让脚本找出真实格式是完全有可能的;但由于这种情况很少发生,我宁愿在 Nautilus 中搜索文件名段“webp-convert-fallback”,看看其中是否有任何文件无法显示缩略图,然后尝试手动将它们重命名为其他扩展名(通常它们要么是 .png,要么是 .gif)。

文件名包含空格也是一个挑战,但我一直重构直到它起作用(在 GNU bash 版本 5.0.17 上)。

#!/bin/bash

CURRENTDIR=$(pwd);

# See https://stackoverflow.com/questions/4638874/how-to-loop-through-a-directory-recursively-to-delete-files-with-certain-extensi/15088473#15088473
# See https://stackoverflow.com/questions/9612090/how-to-loop-through-file-names-returned-by-find#answer-9612560
find $CURRENTDIR -name '*.webp' -print0 | while read -d $'\0' file
do
    # echo $file && continue

    # See https://stackoverflow.com/questions/29505788/bash-dirname-basename-problems-with-spaces#answer-29505840
    dirname=`dirname "$file"`
    # echo $dirname && continue

    # See https://linuxhandbook.com/basename/
    basename=`basename "$file" .webp`
    # echo $basename && continue
    
    # See https://gist.github.com/earthgecko/3089509
    rando=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 8 | head -n 1)

    dwebp "${file}" -o ${dirname}/"${basename}".webp-convert-${rando}.png

    # See https://linuxhint.com/check_command_succeeded_bash/
    if [ $? -eq 0 ]; then
        echo "========> DWEBP seemed successful:"
        echo "========> Putting ${basename}.webp into the Trash."

        # See https://askubuntu.com/questions/213533/command-to-move-a-file-to-trash-via-terminal
        # gvfs-trash "$file" # Older standard.
        gio trash "$file"    # Newer standard.
    else
        echo "########> Failed converting $file"
        mv "$file" "${dirname}/${basename}.webp-convert-fallback.jpg";
    fi
done;

另外,我快速提到,在 Firefox 中可以(至少曾经)禁用 .webp 图像。这样 Firefox 就会向网络服务器发送这样的请求标头,表明它无法处理 webp 文件;通常它应该触发网络服务器以传统格式发送图像。(在 Firefox 的about:config页面中搜索“webp”。)

但我不再选择以这种方式使用 webp,因为我遇到过一个不提供后备图像的网店;如果网店中没有图像,它几乎无法使用。因此我不得不屈服,让 Firefox 使用 webp;这就是我最终得到转换脚本的原因。

答案3

qView是一个轻量级的图像查看器支持.webp。

输入以下命令从其官方 PPA 安装它。

sudo add-apt-repository ppa:jurplel/qview
sudo apt update
sudo apt-get --install-suggests install qview

如果你不想添加其他 PPA,你可以简单地得到而是 .deb/appimage/flatpak。

答案4

我编写了一个脚本,这样每当我双击一个.webp文件时,它都会自动将其转换为.png原始图像并替换。这使得下载图像然后在 nemo 中查看它变得瞬间完成。

#!/bin/bash
# Convert webp to png
# Must install: sudo apt install webp

file="$1"
out=`basename "$file" | sed 's/\.webp//'`.png
echo "Output $out"
cd `dirname "$file"`

dwebp "$file" -o "$out" && rm "$file" 

将脚本另存为webp2png.sh并使其可执行。然后只需将.webp文件与脚本关联,方法是右键单击->“打开方式”并导航到脚本。

sudo apt install webp如果您还没有安装 webp,请不要忘记使用以下命令进行安装: 。

相关内容