Google Chrome 有时会获取 .jpg 图像并将其转换为 .webp 文件。
问题是,当我将此图像保存到文件时,我无法打开该文件。我尝试手动将文件的扩展名更改为“.jpg”,但该文件仍然无法读取(不使用外部软件)。
有没有办法完全禁用 Chrome 中的 .webp 图像?
如果没有,是否有一种简单的方法或变通方法可以将以 WebP 格式呈现的图像保存为 JPEG?此处提供的解决方案对我来说不起作用,因为我的 URL 不包含“-rw”后缀。
OS X El Capitan,版本 10.11.6。
答案1
开源解决方案
WebP是 Google 目前开发的一种图像格式,基于收购 On2 Technologies 所获得的技术。
如果User-Agent
场地在你的HTTP(S) 请求标头显示你正在使用最新版本的浏览器,内容分发网络 (CDN)服务器可能会以这种新的 WebP 格式提供原始.jpg
或.png
图像,以减少数据流量。尽管如此,这些提供的图像文件将保留其原始文件扩展名;这确实具有误导性。
在 GNU/Linux 系统上,一种解决方案是使用或wget
命令下载原始图像文件curl
。
有几款 Google Chrome 扩展程序提供了将 WebP 格式的图片保存为其他格式的方法。不过,只有一个扩展程序开源软件;将图像另存为类型。
不过,这款扩展程序和其他类似扩展程序都有一个令人讨厌的缺点。在保存之间,这些扩展程序不记得目录上一个图片保存到其中。这可能是也可能不是由于 Google 的扩展程序沙盒政策。无论如何,我打开了一个GitHub 问题关于它。
答案2
@Darius 提供的方法 1 有一半效果,但需要结合第二个修改。仅更改 User-Agent 并不能完全解决问题,因为图像服务器可能还会查看 HTTP“Accept”请求标头,其中列出了浏览器兼容的文件格式。对于 chrome,默认的 Accept Header 是“text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8"。从该列表中删除 image/webp 格式并更改 User-Agent 即可解决问题。操作如下:
答案3
我找到了一个可能的解决方案。我只需在 URL 末尾添加一个问号 (?) 即可下载图像。例如:
https://www.fritolay.com/sites/fritolay.com/files/2019-08/Desk-Where-to-Buy.jpg 当我进入“将图像另存为”时,此链接会使用 webp 扩展名下载
https://www.fritolay.com/sites/fritolay.com/files/2019-08/Desk-Where-to-Buy.jpg? 当我“将图片另存为”时,此链接下载为 jpg
请测试并确认这是否适用于其他人。
答案4
您可以使用 cURL(据我所知,自 Windows 10 起就包含在内 / macOS 和 OSX 也附带了 cURL)或 Windows PowerShell:
卷曲
curl --output image.jpg --url https://domain.tld/image.jpg
电源外壳
Invoke-WebRequest -OutFile image.jpg -Uri https://domain.tld/image.jpg
如果你没有上述任何一项,你可以直接在浏览器中执行此操作。看起来比实际要难:
- 打开新标签/窗口并输入地址
about:blank
以打开空白页面 - 按 F12 打开开发者控制台,转到“控制台”选项卡,输入
document.write('<a href="https://domain.tld/image.jpg">download</a>');
(更改https://domain.tld/image.jpg
为要保存的图像的 URL)并按 Enter - 右键单击新出现的链接,然后单击“将链接另存为...”以下载原始图像而不是 WEBP
服务器以 WEBP 格式提供图像的原因是因为您的浏览器在请求中告诉服务器它支持图像:
我不知道服务器为什么决定以 WEBP 格式提供图像,但我认为如果它检测到客户端(浏览器)通过在“Accept:”标头中发送“image/webp”来支持这种较小的文件格式,它会运行某种插件或内置函数来自动将图像转换为这种较小的文件格式。
在每个支持并在请求标头中发送此信息的浏览器(如 Firefox)中,您都会看到此效果。省略发送此信息将阻止服务器以 WEBP 格式提供图像。例如,通过 PHP 或上述方法之一请求图像将为您提供原始文件,因为它们未在请求中包含此信息。