纯前端实现WebP/PNG/JPEG图片格式转换:基于Canvas与FileReader
本文介绍如何在纯前端环境下,利用HTML5 Canvas的toDataURL方法和FileReader API,实现图片格式在WebP、JPEG和PNG之间的在线转换。通过读取上传文件、绘制至画布并指定MIME类型,无需后端支持即可完成格式转换与预览。
前端图片格式转换需求与思路
功能需求:在网页应用中,用户上传图片后,可根据选择的目标格式,将原图转换为指定格式。
实现思路:此类功能通常由后端语言(如PHP、Java等)处理,但若需完全在前端浏览器中实现,则需借助HTML5提供的API。
基于Canvas与FileReader的实现步骤
1、通过input标签触发文件选择,利用FileReader对象将选中的图片文件读取并加载到内存中。
2、将加载的图片绘制到Canvas画布上,调用canvas.toDataURL()方法,并将第二个参数设置为目标格式,例如"image/webp"、"image/jpeg"或"image/png"。
3、将生成的Data URL赋值给img标签的src属性,在网页中显示转换后的图片。用户可通过右键点击该图片进行保存,从而获得对应格式的文件。
toDataURL方法详解与注意事项
toDataURL说明:该方法返回一个包含图片数据的data URI字符串。可通过type参数指定图片类型,默认值为PNG格式,图片分辨率固定为96dpi。
语法:
canvas.toDataURL(type, encoderOptions);
type【可选】指定图片格式,默认为image/png。可选值包括"image/webp"、"image/jpeg"和"image/png"。
encoderOptions【可选】当指定格式为image/jpeg或image/webp时,此参数用于设置图片质量,取值范围为0到1。若超出范围,默认使用0.92;其他格式下该参数将被忽略。
注意点:
1、若画布的宽度或高度为0,该方法将返回字符串“data:,”。
2、目前仅webkit内核浏览器支持“image/webp”类型,因此强烈建议使用Chrome浏览器进行测试和操作。
代码示例与在线演示
代码例子:
html结构如下:
<input type="file" id="inputimg">
<select id="myselect">
<option value="1">webp格式</option>
<option value="2">jpeg格式</option>
<option value="3">png格式</option>
</select>
<button id="start">开始转换</button>
<p>预览:</p>
<img id="imgShow" src="" alt="">
js逻辑如下:
/*事件*/
document.getElementById('start').addEventListener('click', function(){
getImg(function(image){
var can=imgToCanvas(image),
imgshow=document.getElementById("imgShow");
imgshow.setAttribute('src',canvasToImg(can));
});
});
// 把image 转换为 canvas对象
function imgToCanvas(image) {
var canvas = document.createElement("canvas");
canvas.width = image.width;
canvas.height = image.height;
canvas.getContext("2d").drawImage(image, 0, 0);
return canvas;
}
//canvas转换为image
function canvasToImg(canvas) {
var array=["image/webp","image/jpeg","image/png"],
type=document.getElementById('myselect').value-1;
var src = canvas.toDataURL(array[type]);
return src;
}
//获取图片信息
function getImg(fn){
var imgFile = new FileReader();
try{
imgFile.onload = function(e) {
var image = new Image();
image.src= e.target.result; //base64数据
image.onload=function(){
fn(image);
}
}
imgFile.readAsDataURL(document.getElementById('inputimg').files[0]);
}catch(e){
console.log("请上传图片!"+e);
}
}
在线Demo:
演示地址:https://www.jb51.net/tools/webp.html
说明:该功能需在Chrome浏览器中运行。开发者可在此基础上扩展,实现批量图片转换等功能。
到此这篇关于js+canvas实现图片格式webp/png/jpeg在线转换的文章就介绍到这了,更多相关webp/png/jpeg在线转换内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
JS中使用位运算(~~)和一元加号(+)快速转换字符串为整数
2026-11-03 22:41:12
怎么使用命令行批量格式化项目中的JS文件
2026-11-03 19:04:42
JS代码美化后报错怎么办?常见格式化冲突解决方法
2026-11-03 18:47:01
不用moment.js,怎么用原生JS Intl API格式化时间戳
2026-11-03 18:10:30
原生JS与dayjs获取当前日期的代码对比
2026-11-03 17:57:26
