PHP处理Form表单提交的裁剪后的base64的图片并保存 以cropbox.js控件为例
我在开发项目的时候,前端给的上传头像插件是 cropbox.js ,当时觉得很好用,可是当要保存图片的时候问题来了,不知道怎么保存,百度了一大堆,发现很多人跟我一样也没有找到方法,不过思路都是一样的,把base64图片的路径转码再保存就可以了。我用的是ThinkPHP框架,下面直接亮代码,以我自己的实例来介绍:
HTML代码:
<form id="form" action="{:U("Admin/User/edit")}" method="post" enctype="multipart/form-data" /> <div> <div class="imageBox"> <div class="thumbBox"></div> <div class="spinner" style="display: none">Loading...</div> </div> <div class="action"> <div class="upload"> <a href="javascript:void(0)" class="upload-img"> <label for="upload-file">上传图像</label> </a> <input type="file" class="" name="upload-file" id="upload-file" /> </div> <input type="button" id="btnCrop" class="Btnsty_peyton" value="裁切"> <input type="button" id="btnZoomIn" class="Btnsty_peyton" value="+" > <input type="button" id="btnZoomOut" class="Btnsty_peyton" value="-" > </div> <div class="cropped"></div> </div> <button type="submit" class="btn" id="btnUp">确认修改</button> </form>
这是大概效果:
JQuery代码:
$(window).load(function() { var faceurl = "<?php echo $face;?>"; var options = { thumbBox: ".thumbBox", spinner: ".spinner", imgSrc: faceurl ? faceurl: "/Public/Uploadimg/headimg/food-apple.jpg", <span style="white-space:pre"> </span>//默认图片的URL } var cropper = $(".imageBox").cropbox(options); $("#upload-file").on("change", function(){ var reader = new FileReader(); reader.onload = function(e) { options.imgSrc = e.target.result; cropper = $(".imageBox").cropbox(options); } reader.readAsDataURL(this.files[0]); this.files = []; }) $("#btnCrop").on("click", function(){ var img = cropper.getDataURL(); $(".cropped").html(""); $(".cropped").append("<img src=""+img+"" align="absmiddle" style="width:64px;margin-top:4px;border-radius:64px;box-shadow:0px 0px 12px #7E7E7E;" ><p>64px*64px</p>"); $(".cropped").append("<img src=""+img+"" align="absmiddle" style="width:128px;margin-top:4px;border-radius:128px;box-shadow:0px 0px 12px #7E7E7E;"><p>128px*128px</p>"); $(".cropped").append("<img src=""+img+"" align="absmiddle" style="width:180px;margin-top:4px;border-radius:180px;box-shadow:0px 0px 12px #7E7E7E;"><p>180px*180px</p>"); $(".cropped").append("<input type="hidden" value=""+img+"" name="headpic">"); }) $("#btnZoomIn").on("click", function(){ cropper.zoomIn(); }) $("#btnZoomOut").on("click", function(){ cropper.zoomOut(); }) });
public function edit(){ $id["id"]=I("post.id"); $data=array( "face" =>I("post.headpic"), ); //处理用户裁剪的图片 if($data["face"]){ $face = $this->SaveFormUpload($id["id"], $data["face"]); if($face["error"]){ $this->error($face["msg"]); } $data["face"]= $face["url"]; }else{ unset($data["face"]); } $row=M("member")->where($id)->save($data); if($row!=null){ $this->success("修改成功!",U("User/list")); }else{ $this->error("修改失败!"); } } /** * 保存提交过来的图片 *@param $savepath string 保存图片的路径 不是全路径 *@param $img stiring base64图片实体,含base64图片头 *@return array *@author jorsh20151106 **/ function SaveFormUpload($savepath, $img, $types=array()){ $basedir = "/Uploadimg/headimg/".$savepath; $fullpath = dirname(THINK_PATH).$basedir; if(!is_dir($fullpath)){ mkdir($fullpath,0777,true); } $types = empty($types)? array("jpg", "gif", "png", "jpeg"):$types; $img = str_replace(array("_","-"), array("/","+"), $img); $b64img = substr($img, 0,100); if(preg_match("/^(data:s*image/(w+);base64,)/", $b64img, $matches)){ $type = $matches[2]; if(!in_array($type, $types)){ return array("error"=>1,"msg"=>"图片格式不正确","url"=>""); } $img = str_replace($matches[1], "", $img); $img = base64_decode($img); $photo = "/".md5(date("YmdHis").rand(1000, 9999)).".".$type; file_put_contents($fullpath.$photo, $img); return array("error"=>0,"msg"=>"保存图片成功","url"=>$basedir.$photo); } return array("error"=>2,"msg"=>"请选择要上传的图片","url"=>""); }整个过程大概就是这样,如果想知道获取过来的值是什么样的,可以自己输出 I("post.headpic") 的值来看,可以发现图片路径是 base64 转码过来的。
这是我的第一篇博文,谢谢大家的支持,有什么问题也可以提出来,互相学习。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: PHP base64转换成图片
- 下一篇: canvas获取base64图片并上传php服务器