利用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,而在与服务 ...
随机推荐
- Firebug及YSlow简介与使用图文详解
Firebug本是Firefox浏览器下一个出色的网页设计插件,随着浏览器的发展,Firebug也推出了支持IE.Opera.Chrome的Firebug Lite.凭借Firebug的出色代码调试功 ...
- Java泛型类定义,与泛型方法的定义使用
package com.srie.testjava; public class TestClassDefine<T, S extends T> { public static void m ...
- HTML css 格式布局
CSS(cascading style sheets,层叠样式表),作用是美化HTML网页. /*注释*/ 注释语法 2.1 样式表的基本概念 2.1.1样式表的分类 1.内联样式表 和HTML联 ...
- linux之sed的常用操作
Sed命令: sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(patter ...
- 集成支付宝-iOS
前言 坑坑坑,把踩过的坑都要记下来!! 正文 1.支付宝的demo和文档都好难找啊@_@,像我这个记忆不太好的,第二次都找不到!!为了方便大家,还是直接给大家网址吧,(不要太感谢我喔~)https:/ ...
- lable 以及cell的高度自适应
1.先cell自适应 可以先拿到 这个lable里文字的高度 //lable自适应的高度 -(CGFloat)heightWithString:(NSString *)aString { CGRect ...
- swift 可选类型笔记
晚上十一点半了,看书累了,原本想睡了的,想了想,还是把刚看的总结一下,把这篇笔记写了吧.广州下雨,真特么的冷..好了,废话不说了,说正题说说Swift可选类型. 先定义一个变量: var string ...
- 如何让 Git 忽略掉文件中的特定行内容?
近期在git遇到几个问题,让我重新认识到git的强大性,下面列出来记录一下 有一个数据库的配置文件,在用 git add 添加到 index file 时不能透露了相关配置.而如果用 .gitigno ...
- loadrunner工作原理
- weex官方demo weex-hackernews代码解读(下)
weex 是阿里出品的一个类似RN的框架,可以使用前端技术来开发移动应用,实现一份代码支持H5,IOS和Android.而weex-hacknews则是weex官方出品的,首个使用 Weex 和 Vu ...