利用cropper插件裁剪本地图片,然后将裁剪过后的base64图片上传至七牛云空间
现在做的项目需要做一些图片处理,由于时间赶急,之前我便没有处理图片,直接将图片放在input[type=file]里面,以文件的形式提交给后台,这样做简直就是最低级的做法,之后各种问题便出来了,人物头像需要正方形,这样做难免出现异性,显示的时候便是各种丑。
项目赶完之后这两天优化本想在网上找一个现成的图片裁剪插件使用,但是在百度上面和jq22上面找了半天找到的都是一些服务器裁剪的事例,加上看别人的代码各种麻烦,简直头大,最后发现一个本地图片处理的插件,便想着不如自己写一个,虽然代码写着乱,但是自己乱写的也比别人好好写的更容易懂不是。哈哈
cropper插件详细api可参考以下链接 cropper本地图片裁剪插件
构建html结构
<div id="content">
<form id="NewQyq">
<div class="SeeCont">
<p><span style="color: red;">*</span>选择图片:</p>
<div class="SeeImg image_container">
<img class="myimg" src='' />
</div>
<button class="TxText xzBtn" id="imgReplaceBtn" type="button">更换图片 </button>
<br />
base64地址:<input name="url" id="imgShowurlbase" style="width: 400px;" value="f12打开控制台查看" />
<br />
七牛云地址: <input name="url" id="imgShowurl" style="width: 400px;" />
</div>
</form>
</div>
创建函数
function upImg(bili){
$("#imgReplaceBtn").on("click",function(){
$("body").prepend('<div class="parsetcroBox" >'
+'<div class="cropperBox">'
+'<h4 class="boxH4" >图片裁剪 <a class="imgBoxBtn">选择图片 <input type="file" class="file_upload" /></a> </h4>'
+'<hr />'
+'<div class="imgBox"><img id="preview" src="" /></div>'
+'<div class="imgBoxyulan"><img id="previewyulan" src="" /></div>'
+'<div class="bottomBox">'
+'<button class="imgBoxBtn queding">确定</button>'
+'<button class="imgBoxBtn xuanzhuan">旋转</button>'
+'</div>'
+' </button>'
+'</div>'
+'</div>')
})
}
选择图片之后,将选择的图片显示在裁剪区域,引入cropperjs包,实例化图片裁剪方法
var upImgageToken=''
$("body").on("change",".file_upload",function(){
var $file = $(this);
var fileObj = $file[0];
var windowURL = window.URL || window.webkitURL;
var dataURL;
var $img = $("#preview");
if(fileObj && fileObj.files && fileObj.files[0]){
dataURL = windowURL.createObjectURL(fileObj.files[0]);
$img.attr('src',dataURL);
}else{
dataURL = $file.val();
var imgObj = document.getElementById("preview");
imgObj.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
imgObj.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = dataURL; }
$img.cropper({
aspectRatio: bili , //1 / 1, //图片比例,1:1
crop: function(data) {
var $imgData=$img.cropper('getCroppedCanvas')
var dataurl = $imgData.toDataURL('image/png');
$("#previewyulan").attr("src",dataurl)
},
built: function (e) {
}
});
console.log(dataURL)
$img.cropper('replace',dataURL)
$(".xuanzhuan").on("click",function(){
$img.cropper('rotate', 90) //图片旋转
}) $("body").unbind("click").on("click",".queding",function(){ var $imgData=$img.cropper('getCroppedCanvas')
var dataurl = $imgData.toDataURL('image/png'); //dataurl便是base64图片
console.log(dataurl)
$(".myimg").attr("src",dataurl)
$(".parsetcroBox").remove()
imgReplaceBtn=1
//下面两种方法需要用到那种使用哪种即可,或者都不使用直接上传base64文件给后台即可,哈哈
//putb64(dataurl) //上传base64图片上传至七牛云方法,需要先获取到后台生成的上传token
//blob = dataURLtoBlob(dataurl); //将base64图片转化为blob文件方法
}) });
上面一个简单的本地裁剪获取base64图片便已经完成,看看代码,使用插件的情况下还是挺简单的,再次不得不说,cropper插件真的强大,强烈推荐使用。
以上是将base64图片上传给后台,后台得到base64图片后还得处理一遍,由于前两天项目中做了将视频上传到七牛云存储空间让七牛给我们做处理,我便想将图片也传到七牛上去,得到图片链接之后直接传一个链接地址给后台存储岂不是要简单许多。
终于在七牛摸个旮旯找到了七牛云上传base64图片的文档 七牛云上传base64图片sdk 上传base图片要比视屏处理要简单不少,不需要引用需要js,直接使用就行,根据官方jdk改了一下如下:
function putb64(picBase){ //七牛云官方文档方法
/*picUrl用来存储返回来的url*/
var picUrl;
/*把头部的data:image/png;base64,去掉。(注意:base64后面的逗号也去掉)*/
picBase=picBase.substring(22);
/*通过base64编码字符流计算文件流大小函数*/
function fileSize(str) {
var fileSize;
if(str.indexOf('=')>0) {
var indexOf=str.indexOf('=');
str=str.substring(0,indexOf);//把末尾的’=‘号去掉
}
fileSize=parseInt(str.length-(str.length/8)*2);
return fileSize;
}
/*把字符串转换成json*/
function strToJson(str) {
var json = eval('(' + str + ')');
return json;
}
//http://upload-z2.qiniu.com/putb64/ 只适用于七牛云华南空间 因为我的是七牛云华南空间,如果不是华南空间需要根据七牛云文档进行更改
var url = "http://upload-z2.qiniu.com/putb64/"+fileSize(picBase);
var xhr = new XMLHttpRequest();
xhr.onreadystatechange=function(){
if (xhr.readyState==4){
var keyText=xhr.responseText;
/*返回的key是字符串,需要装换成json*/
keyText=strToJson(keyText);
/* http://image.haoqiure.com/ 是我的七牛云空间网址,keyText.key 是返回的图片文件名*/
picUrl="http://image.haoqiure.com/"+keyText.key;
console.log(picUrl);
$("#imgShowurl").val(picUrl) //将图片链接显示在输入框去
}
}
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/octet-stream");
xhr.setRequestHeader("Authorization", "UpToken "+upImgageToken+"");
xhr.send(picBase);
}
使用七牛云有好处,但是需要后台配置不少参数,本人对于后台不懂,就不说了
但是如果没有使用七牛云的朋友又该怎么办,我们可以将base64图片转换成blob文件,百度上方法很多,我就随便找了一种,如下:
function dataURLtoBlob(dataurl) { //将base64格式图片转换为文件形式
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], {type:mime});
}
最后,在页面调用函数并传递需要裁剪的图片比例即可,如下:
upImg(1/1) //裁剪1:1比例的图片
流程可见如下:
完整dome 随便百度搞得,也算不上是插件吧,裁剪面板也还有许多功能没有完善,不过参考cropperjs api 自己想要什么功能加上就行啦,自己能用就行了,代码比较渣,乱,大神们轻喷,毕竟才入门不久0.0....
利用cropper插件裁剪本地图片,然后将裁剪过后的base64图片上传至七牛云空间的更多相关文章
- laravel7文件上传至七牛云并保存在本地图片
HTML代码: <form class="layui-form" action="{{route('doctor.store')}}" method=&q ...
- Chrome插件-把网页图片上传到七牛空间一
功能:图片上右键,点击上传图片到七牛,把图片上传的指定空间并返回图片URL. Chrome插件本质就是js代码,但是里面有一些限制,比如事件绑定等和普通js的绑定是有区别的,主要是为了安全性考虑. 做 ...
- KindEditor图片上传到七牛云
自己做了一个网站,编辑器用的是KindEditor,平时会涉及到KindEditor自带的图片上传,但是服务器用的是虚拟主机,没多少空间,就一直想着把图片放在免费的云存储空间,之前看KindEdito ...
- vue图片上传到七牛云
代码: <template> <div class="upload-info"> <div> <el-upload class=" ...
- 图片上传到七牛云/阿里云的OSS
1.准备 七牛云/阿里云OSS https://github.com/pfinal/storage 2.composer安装包 安装 composer require pfinal/storage 本 ...
- django + ckeditor + 七牛云,图片上传到七牛云
传送门 本人使用的是 Django 的自带的管理后台,安装 ckeditor 富文本编辑器后,上传图片的时候直接传到七牛云的.
- laravel上传到七牛图片插件
1.首先引入两个插件 2.在https://developer.qiniu.com/kodo/sdk/1241/php找到安装命令 在终端运行composer require qiniu/php-sd ...
- 使用PHP把图片上传到七牛
先从官网下载SDK,然后新建一个文件,里面包括上传,下载,删除 <?php header("Content-Type:text/html; charset=utf8"); r ...
- Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载
Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载 2018年5月26日 19:03 阅读 375 评论 7 我本地和服务器的连接一直使用的是 Xshell 5,而在与服务 ...
随机推荐
- Bootstrap入门(二十五)JS插件2:过渡效果
Bootstrap入门(二十五)JS插件2:过渡效果 对于简单的过渡效果,只需将 transition.js 和其它 JS 文件一起引入即可.如果你使用的是编译(或压缩)版的bootstrap.js ...
- 如何让微信小程序快速接入七牛云
如果你确定用七牛运行小程序的话,给大家分享一个九折优惠码:61d1fd4d1 月 9 日 微信小程序正式发布,小程序终于揭开了它神秘的面纱,开发者对小程序的追捧更是热度不减.从小程序的热门应用场景来看 ...
- CF 752C. Santa Claus and Robot
C. Santa Claus and Robot time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- ADO.NET 数据库操作类
操作数据类 避免代码重用.造对象太多.不能分工开发 利用面向对象的方法,把数据访问的方式优化一下,利用封装类 一般封装成三个类: 1.数据连接类 提供数据连接对象 需要引用命名空间: using ...
- BOM之history对象
前面的话 history对象保存着用户上网的历史记录,从窗口被打开的那一刻算起.由于安全方面的考虑,开发人员无法得到用户浏览器的URL,但借由用户访问过的页面列表,可以在不知道实际URL的情况下实现后 ...
- jQuery.sort对DOM元素进行排序
实例: 每个tr的第三列显示的都是数字,我们就以这数字列作为排序依据,方法就是利用jquery的sort()方法. 首先,利用jquery选择器获取每个tr元素,获取回来是一个数据: var $trs ...
- AR_Demon(使用vuforia平台提供的钥匙跟后台,实现相机拍图片读取模型以及视频的功能)
1.https://developer.vuforia.com注册账号. 2.分别添加License Manager(连接钥匙),Target Manager(图片后台下载). 3.下载vuforia ...
- swift2.0 字符串,数组,字典学习代码
swift 2.0 改变了一些地方,让swift变得更加完善,这里是一些最基本的初学者的代码,里面涉及到swift学习的最基本的字符串,数组,字典和相关的操作.好了直接看代码吧. class View ...
- 如何一步一步用DDD设计一个电商网站(十四)—— 回顾与总结
本系列所有文章 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念 如何一步一步用DDD设计一个电商网站(二)—— 项目架构 如何一步一步用DDD设计一个电商网站(三)—— 初涉核心域 如 ...
- 简单了解Hibernate
orm 对象 object 关系relational映射 mppingorm对象关系映射hibernate 框架是什么?很简单 持久化框架 他轻松的封装了jdbc那些繁琐的操作什么是持久化?持久化就 ...