现在做的项目需要做一些图片处理,由于时间赶急,之前我便没有处理图片,直接将图片放在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图片上传至七牛云空间的更多相关文章

  1. laravel7文件上传至七牛云并保存在本地图片

    HTML代码: <form class="layui-form" action="{{route('doctor.store')}}" method=&q ...

  2. Chrome插件-把网页图片上传到七牛空间一

    功能:图片上右键,点击上传图片到七牛,把图片上传的指定空间并返回图片URL. Chrome插件本质就是js代码,但是里面有一些限制,比如事件绑定等和普通js的绑定是有区别的,主要是为了安全性考虑. 做 ...

  3. KindEditor图片上传到七牛云

    自己做了一个网站,编辑器用的是KindEditor,平时会涉及到KindEditor自带的图片上传,但是服务器用的是虚拟主机,没多少空间,就一直想着把图片放在免费的云存储空间,之前看KindEdito ...

  4. vue图片上传到七牛云

    代码: <template> <div class="upload-info"> <div> <el-upload class=" ...

  5. 图片上传到七牛云/阿里云的OSS

    1.准备 七牛云/阿里云OSS https://github.com/pfinal/storage 2.composer安装包 安装 composer require pfinal/storage 本 ...

  6. django + ckeditor + 七牛云,图片上传到七牛云

    传送门 本人使用的是 Django 的自带的管理后台,安装 ckeditor 富文本编辑器后,上传图片的时候直接传到七牛云的.

  7. laravel上传到七牛图片插件

    1.首先引入两个插件 2.在https://developer.qiniu.com/kodo/sdk/1241/php找到安装命令 在终端运行composer require qiniu/php-sd ...

  8. 使用PHP把图片上传到七牛

    先从官网下载SDK,然后新建一个文件,里面包括上传,下载,删除 <?php header("Content-Type:text/html; charset=utf8"); r ...

  9. Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载

    Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载 2018年5月26日 19:03 阅读 375 评论 7 我本地和服务器的连接一直使用的是 Xshell 5,而在与服务 ...

随机推荐

  1. spring mvc 文件下载

    在controller中进行代码编写: @RequestMapping("/download") public ResponseEntity<byte[]> downl ...

  2. html标签大全(1)

     http标签详解及讲解        1.基础标签 <!DOCTYPE html> <!--表示文本类型--> <html> <!--<html> ...

  3. 【原】小写了一个cnode的小程序

    小程序刚出来的第一天,朋友圈被刷屏了,所以趁周末也小玩了一下小程序.其实发觉搭建一个小程序不难,只要给你一个demo,然后自己不断的查看文档,基本就可以入门了,不过对于这种刚出来的东西,还是挺多坑的, ...

  4. Redis 介绍与安装

    Redis  是Key-Value 类型的内存数据库,支持多数据结构,性能非常出色,每秒处理十万次读写操作. 整个大致的过程是: 整个数据库加载到内存中,操作之,通过异步定期处理数据库数据的刷新到硬盘 ...

  5. CSS3中字体平滑处理和抗锯齿渲染

    在围观Drupal官方主题的时候,发现了一个有意思的非标准CSS选择器-webkit-font-smoothing,于是上手把玩了一番.如何使用css3字体平滑显示呢 要知道,W3C对CSS中字体的抗 ...

  6. ubuntu 压缩软件

    7-zip 安装: sudo apt-get install p7zip-full 使用方法: 7z x file file是你要解压的文件名 更多使用方法: man 7z rar sudo apt- ...

  7. C#中let字句

    应用场景: 在查询表达式中,存储子表达式的结果有时很有用,这样可以在随后的子句中使用. 可以使用 let 关键字完成这一工作,该关键字可以创建一个新的范围变量,并且用您提供的表达式的结果初始化该变量. ...

  8. 循环语句——for语句

    一.for语句结构:for (初始化表达式; 循环条件表达式 ;循环后的操作表达式 ) { 执行语句: } 循环条件表达式,必须是true或false 示例: class ForDemo { publ ...

  9. Windows下搭建HTTP/HTTPS服务器及测试过程

    1 安装Apache http://www.apachehaus.com/cgi-bin/download.plx 选择合适的版本下载 本次下载的是 Apache 2.4.x VC14 Apache版 ...

  10. asp.net core mvc剖析:KestrelServer

    KestrelServer是基于Libuv开发的高性能web服务器,那我们现在就来看一下它是如何工作的.在上一篇文章中提到了Program的Main方法,在这个方法里Build了一个WebHost,我 ...