legend3---图片裁剪实例代码
一、总结
一句话总结:
图片裁剪之后,图片尽量存为jpg,相比于png,jpg的图片要小很多
1、base64格式图片如何存储为jpg,如何存储为png?
存储为jpg就是canvas转base64的时候格式选jpeg,存png就是转的时候格式选png,转jpg例子:base64 = cas.toDataURL('image/jpeg'); // 转换为base64
var cas = $('#image_clip').cropper('getCroppedCanvas', { width : 150, height : 150 });// 获取被裁剪后的canvas var base64 = cas.toDataURL('image/jpeg'); // 转换为base64 var data = encodeURIComponent(base64);//作为URI编码
2、base64转png或者jpg时候,Data URL scheme 支持的类型有哪些?
常见的图片类型都支持,比如gif、png、jpeg等等,也就是可以把base64格式的数据转换为这些类型
data:,文本数据
data:text/plain,文本数据
data:text/html,HTML代码
data:text/html;base64,base64编码的HTML代码
data:text/css,CSS代码
data:text/css;base64,base64编码的CSS代码
data:text/JavaScript,Javascript代码
data:text/javascript;base64,base64编码的Javascript代码
data:image/gif;base64,base64编码的gif图片数据
data:image/png;base64,base64编码的png图片数据
data:image/jpeg;base64,base64编码的jpeg图片数据
data:image/x-icon;base64,base64编码的icon图片数据
3、如何将base64图片转换为jpg图片?
和Data URL scheme相关,获取base64数据的时候选择jpeg方式:var base64 = cas.toDataURL('image/jpeg'); // 转换为base64
var cas = $('#image_clip').cropper('getCroppedCanvas', { width : 150, height : 150 });// 获取被裁剪后的canvas var base64 = cas.toDataURL('image/jpeg'); // 转换为base64 var data = encodeURIComponent(base64);//作为URI编码
二、图片裁剪实例代码
博客对应课程的视频位置:
前端js代码:
1 <script> 2 function submit_clip_image() { 3 //console.log('2222222222'); 4 5 var cas = $('#image_clip').cropper('getCroppedCanvas', { 6 width : 150, 7 height : 150 8 });// 获取被裁剪后的canvas 9 var base64 = cas.toDataURL('image/jpeg'); // 转换为base64 10 var data = encodeURIComponent(base64);//作为URI编码 11 12 //之前的缩略图的图片 13 let old_user_img_url=$('#u_picture').val(); 14 //console.log(old_user_img_url); 15 //console.log(data); 16 17 let u_id=window.u_id; 18 19 $.ajax({ 20 url : "/component/uploader_img_base64", 21 type : 'POST', 22 data : {'u_id':u_id,'old_user_img_url':old_user_img_url,'base64_img':data}, 23 success : function(data) { 24 if(parseInt(data.valid)==1){ 25 $('#u_picture').val(data.message); 26 $('.fry_file_uploader_img').attr({'src':data.message}); 27 //让上传图片的框框隐藏 28 $('#fry_clip_user_img_box').hide(); 29 //console.log(data.message); 30 layer_alert_success_mobile('头像上传成功!'); 31 }else{ 32 layer_alert_fail_mobile(data.message); 33 } 34 } 35 }); 36 } 37 </script>
后端php代码:
1 //1、上传base64位的图片:用户的头像 2 public function uploader_img_base64(Request $request){ 3 4 //用户id 5 $u_id=Auth::guard('user')->user()->id; 6 if(!$u_id){ 7 return ['valid' => 0, 'message' => '用户信息过期,请刷新页面重试!!']; 8 } 9 10 $base64_img=$request->input('base64_img'); 11 $base64_img=urldecode($base64_img); 12 //获取原图片的相对路径 13 $old_user_img_url=$request->input('old_user_img_url'); 14 $position=stripos($old_user_img_url,'user_img/'); 15 if(strlen($old_user_img_url)>$position+9) 16 $old_user_img_url_relative=substr($old_user_img_url,$position+9); 17 18 preg_match('/^(data:s*image/(w+);base64,)/',$base64_img,$res); 19 20 21 if (isset($res[2])) { 22 //获取图片类型 23 $type = $res[2]; 24 if($type=='jpeg') $type='jpg'; 25 26 //图片保存路径 27 $new_file = ''.date('Ym',time()).'/'; 28 //$new_file = "attachment/user_img/".date('Ymd',time()).'/'; 29 30 //图片名字 31 $new_file = $new_file.str_random(10).mt_rand(10000,99999).'.'.$type; 32 $base64_img=base64_decode(str_replace($res[1],'', $base64_img)); 33 //dd($base64_img); 34 $ans=Storage::disk('user_img')->put($new_file, $base64_img); 35 36 if ($ans) { 37 $ans2=Storage::disk('user_img')->delete($old_user_img_url_relative.''); 38 //dd($ans2); 39 $img_url=asset('attachment/user_img/'.$new_file); 40 //$img_url='attachment/user_img/'.$new_file; 41 //修改用户的头像 42 User::where('id',$u_id)->update(['picture'=>$img_url]); 43 44 //unlink($old_user_img_url_relative.''); 45 return ['valid' => 1, 'message' => $img_url]; 46 } else { 47 return ['valid' => 0, 'message' => '上传失败请重试!']; 48 } 49 50 }else{ 51 return ['valid' => 0, 'message' => '上传失败请重试!!']; 52 } 53 54 }