Image resize by Javascript

ぐ巨炮叔叔 提交于 2019-11-27 20:19:46

A solution is to use modern ways like FileReader and Canvas (But this works only on the latest modern browsers).

http://caniuse.com/filereader

http://caniuse.com/canvas

In this example i show how to let the client resize an image before uploading by setting a max width & height mantaining aspect ratio.

In this example max widthHeight = 64; your final image is c.toDataURL();

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script>
var h=function(e){
 var fr=new FileReader();
 fr.onload=function(e){
  var img=new Image();
  img.onload=function(){
     var MAXWidthHeight=64;
   var r=MAXWidthHeight/Math.max(this.width,this.height),
   w=Math.round(this.width*r),
   h=Math.round(this.height*r),
   c=document.createElement("canvas");
   c.width=w;c.height=h;
   c.getContext("2d").drawImage(this,0,0,w,h);
   this.src=c.toDataURL();
   document.body.appendChild(this);
  }
  img.src=e.target.result;
 }
 fr.readAsDataURL(e.target.files[0]);
}
window.onload=function(){
 document.getElementById('f').addEventListener('change',h,false);
}
</script>
</head>
<body>
<input type="file" id="f">
</body>
</html>

In the canvas part of the code you can also add a cropping function.


Edit as asked in the comments

c.toDataURL();

is the image base64_string you can store it in a hidden input,append to a new FormData() or wherever you want.

on the server

$data=explode(',',$base64_string);
$image=base64_decode($data[1]);

write to file

$f=fopen($fileName,"wb");
fwrite($f,$image); 
fclose($f);

or

$gd=imagecreatefromstring($image);

you can also store the whole base64 image string in the database and always use that.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!