我最近在笔记本电脑上安装了 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
答案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,请不要忘记使用以下命令进行安装: 。