大家可以复制下面代码,到你新建的htnl文件里,然后运行一下,当然里面的“img”文件夹自己建了。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Canvas改变生成缩略图</title>
<meta name="description" content="">
<meta name="keywords" content="">
<link href="" rel="stylesheet">
<style type="text/css">
.source{
float: left;
}
img{
margin-top: 20px;
border: 1px solid #f00;
}
.change{
margin-left: 10px;
float: left;
}
i{
font-size: 12px;
}
</style>
</head>
<body>
<div class="source">
<label for="">原图:</label><br/><img src="https://t8.baidu.com/it/u=1484500186,1503043093&fm=79&app=86&size=h300&n=0&g=4n&f=jpeg?sec=1585107708&t=736415ae9eb64eb0467fc78a8c82fa64" alt="">
</div>
<div class="change">
<label>选择尺寸</label>
<select name="" id="size">
<option value="100X100">100X100</option>
<option value="200X200">200X200</option>
<option value="300X300" selected>300X300</option>
<option value="400X400">400X400</option>
<option value="800X400">800X400</option>
<option value="500X500">500X500</option>
</select> <i>可右击另存查看尺寸</i><br />
<img src="" alt="" id="show">
</div>
<script type="text/javascript">
window.URL.createObjectURL(file);
var show = document.getElementById("show"),
size = document.getElementById("size"),
src = './img/111.jpg';
size.onchange = function(){
var value = this.value,
arr = value.split('X'),
w = arr[0],
h = arr[1];
setImage(src,w,h);
};
setImage(src,300,300);
function setImage(src,w,h){
resizeImage(src,function(data){
show.src = data;
},w,h);
}
function resizeImage(src,callback,w,h){
var canvas = document.createElement("canvas"),
ctx = canvas.getContext("2d"),
im = new Image();
w = w || 0,
h = h || 0;
im.onload = function(){
//为传入缩放尺寸用原尺寸
!w && (w = this.width);
!h && (h = this.height);
//以长宽最大值作为最终生成图片的依据
if(w !== this.width || h !== this.height){
var ratio;
if(w>h){
ratio = this.width / w;
h = this.height / ratio;
}else if(w===h){
if(this.width>this.height){
ratio = this.width / w;
h = this.height / ratio;
}else{
ratio = this.height / h;
w = this.width / ratio;
}
}else{
ratio = this.height / h;
w = this.width / ratio;
}
}
//以传入的长宽作为最终生成图片的尺寸
if(w>h){
var offset = (w - h) / 2;
canvas.width = canvas.height = w;
ctx.drawImage(im,0,offset,w,h);
}else if(w<h){
var offset = (h - w) / 2;
canvas.width = canvas.height = h;
ctx.drawImage(im,offset,0,w,h);
}else{
canvas.width = canvas.height = h;
ctx.drawImage(im,0,0,w,h);
}
callback(canvas.toDataURL("./img"));
}
im.src = src;
}
</script>
</body>
</html>