WebP是一种主要应用于网页上的图片格式,由谷歌推出。
目的是能够更有效的压缩图片,来节省图片传输所消耗的时间和服务器带宽。
但是毕竟应用场景有限,所以有时候需要将webp转换为png图片。
引言
在试了几个能够转换webp为png的网站后,发现了几个问题。转换为png后,透明图层变成了白色图层,这个是不希望的。
不支持批量转换,或者设置了批量转换门槛(比如收费,限制同时转换数量等)。
在懒得下载一个专门转换格式用的软件情况下,我决定自己动手造个轮子。
安装官方包
首先需要webp包,谷歌提供了官方包,可以在这里下载:
https://storage.googleapis.com/downloads.webmproject.org/releases/webp/index.html
不过ubuntu下可以直接通过apt命令安装webp包,centos应该也有,很方便(以ubuntu举例):apt update
apt install webp
安装后,输入 dwebp ,如果返回的不是 dwebp: command not found,那么就安装成功了。
dwebp pic.webp -o pic.png就能将webp文件转换为png文件。
使用PHP脚本
接下来让他能够批量转换,我使用了世界上最好的语言(PHP)编写脚本:// 获取原始文件夹名称
if(!isset($argv[1])) {
die('Please enter the original folder path.'.PHP_EOL);
}
// 判断文件夹路径是绝对路径还是相对路径
if(substr($argv[1], 0, 1) == '/') {
$path_folder = $argv[1];
}
else {
$path_folder = __DIR__.'/'.$argv[1];
}
if(substr($argv[1], -1) != '/') {
$path_folder .= '/';
}
// 判断文件夹是否存在
if(!is_dir($path_folder)) {
die('Original folder does not exist.'.PHP_EOL);
}
// 创建结果输出文件夹
$output_folder = __DIR__.'/'.time().'-png';
if(!mkdir($output_folder)) {
die('Failed to create folder, please check the permissions of the current path.'.PHP_EOL);
}
// 遍历原始文件夹
$folder = scandir($path_folder);
foreach($folder as $webp_file) {
// 获取文件扩展名为.webp的的文件
if(substr($webp_file, -4) == '.webp') {
// 除扩展名外,输出的文件名和输入文件名相同
$result_name = str_replace('.webp', '.png', $webp_file);
// 调用shell命令
$run_result = shell_exec('dwebp '.$path_folder.$webp_file.' -o '.$output_folder.'/'.$result_name);
}
}
die('Successful conversion, folder path: '.$output_folder.PHP_EOL);
用法很简单,将以上代码放入php文件中,通过cli方式调用,传参要转换的文件夹(绝对路径和相对路径皆可),就可以把文件夹内所有webp转换为png了,举例:php webp_converter.php webp_folder
或php webp_converter.php /home/webp_folder
注意事项脚本会在php文件目录下创建一个输出png图片的文件夹,请确保当前php路径有写入权限。
脚本会调用shell_exec函数,所以如果发现转换失败了,请检查是否开启了PHP的安全模式。
如果需要用sudo php ...的方式来调用,代码中的$argv[1]需要改成$argv[2],因为传参的顺序改变了。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/96431.html