前端使用ajax上传图片,后台php接收图片数据,进行处理,使用php扩展gd库将图片格式转换成webp,返回给前端。
需要在目录下创建一个文件夹并命名为img
如果看的懂改一改就是一个图床了,如盒子萌boxmoe博客的图床(img.boxmoe.com)也改为了上传后转换成webp
前端html ajax上传代码
<!DOCTYPE html> <html lang="zh_CN"> <head> <meta charset="UTF-8"> <title>图片(jpg,jpeg,png)转webp</title> <style> .center{ text-align: center; } .bt{ font-size: 25px; font-weight: 700; } .xz{ color: red; } .loading{ display:none; } </style> </head> <body> <section> <p class="bt center">图片(jpg/jpeg/png)转webp格式</p> </section> <section class="center"><!-- 业务核心代码 --> <form id="form1"> <input type="file" multiple name="file" accept="image/png,image/gif,image/jpg,image/jpeg"> <input type="button" value="提交" onclick="loadXMLDoc()" disabled="true"> </form> <br> <div> <img class="loading" src="loading.gif" alt="loading" width="200" height="200"> <img id="myDiv" src="" width="300"> <p class="center"><a class="xz" id="xiazai" href="" target="_blank" rel="external nofollow noopener" download="webp.webp">点击下载</a>或者右击另存为,保存图片</p> </div> </section> <script> //设置未选择上传文件时,禁用提交按钮 var a = document.getElementsByTagName('input')[0]; var b = document.getElementsByTagName('input')[1]; a.oninput = function(){ if (a!=null&&a!="") { b.disabled = false; } } // ajax异步请求服务器 function loadXMLDoc() { var loading = document.getElementsByClassName('loading')[0]; loading.style.display = "inline"; var form=document.getElementById("form1"); var fd =new FormData(form); var xmlhttp; if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码 xmlhttp=new XMLHttpRequest(); } else { // IE6, IE5 浏览器执行代码 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { loading.style.display = "none"; document.getElementById("xiazai").href = xmlhttp.responseText; document.getElementById("myDiv").src = xmlhttp.responseText; } } xmlhttp.open("post","webp.php",true); xmlhttp.send(fd); } </script> </body> </html>
后端webp.php代码
<?php $name = $_FILES['file']['name'];//文件名 $dizhi = $_FILES['file']['tmp_name'];//图片临时地址,脚本结束则销毁 $houzhui = $_FILES['file']['type'];//图片类型 $str = md5(uniqid(mt_rand(), true));//生成唯一ID $zz = base64EncodeImage($houzhui,$dizhi,$str); echo "data:image/webp;base64,".$zz; function base64EncodeImage($houzhui,$dizhi,$str) { switch ($houzhui) { case 'image/png': $im = imagecreatefrompng($dizhi); break; case 'image/gif': $im = imagecreatefromgif($dizhi); break; case 'image/jpeg': $im = imagecreatefromjpeg($dizhi); break; case 'image/jpg': $im = imagecreatefromjpeg($dizhi); break; default: exit("上传文件格式不正确"); break; } header("Content-type:image/webp"); imagewebp($im,'img/'.$str.'.webp'); imagedestroy($im); return base64_encode(file_get_contents('img/'.$str.'.webp'));//先将文件写入字符串,在进行base64编码 } ?>
您好~我是腾讯云开发者社区运营,关注了您分享的技术文章,觉得内容很棒,我们诚挚邀请您加入腾讯云自媒体分享计划。完整福利和申请地址请见:https://cloud.tencent.com/developer/support-plan
作者申请此计划后将作者的文章进行搬迁同步到社区的专栏下,你只需要简单填写一下表单申请即可,我们会给作者提供包括流量、云服务器等,另外还有些周边礼物。
方法很不错,码住了