一 、准备工作

1.首先需要先下载cropper,常规使用npm,进入项目路径后执行以下命令:

npm install cropper

2. cropper基于jquery,在此不要忘记引入jq,同时记得引入cropper.css

3. 此处后端使用的nodejs,不过不懂node的影响也不大。

二 、 图片裁剪并预览

1.首先利用cropper完成图片裁剪并预览:

    <input type="file" name="" id="imgBtn" name="imgCut">
<!-- 预览容器-->
<div class="box">
<img src="" id="preview">
</div>
<!-- 点击上传按钮裁剪-->
<input type="button" name="" value="上传" onclick="imgSubmit()">
<script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" src="../js/cropper.min.js"></script>
<script>
//生成裁剪区域
$("#imgBtn").change(function(e){
var file = $("#imgBtn").get(0).files[0];
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload=function(e){
alert('文件读取完成');
$("#preview").attr("src",e.target.result)
var $img = $("#preview");
$('.box > img').cropper({
aspectRatio: 16 / 9,
crop: function(data) {
}
});
} })
//预览裁剪后的图片
function imgSubmit(){
var result= $('.box > img').cropper("getCroppedCanvas");
document.body.appendChild(result);
}
</script>

裁剪并预览的完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" type="text/css" href="../css/cropper.min.css">
<style type="text/css">
.box{
width: 600px;
height: 600px;
border:5px solid #555fff;
border-radius: 10px;
}
</style>
</head>
<body>
<input type="file" name="" id="imgBtn" name="imgCut">
<!-- 预览容器-->
<div class="box">
<img src="" id="preview">
</div>
<!-- 点击上传按钮裁剪-->
<input type="button" name="" value="上传" onclick="imgSubmit()">
<script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" src="../js/cropper.min.js"></script>
<script>
//生成裁剪区域
$("#imgBtn").change(function(e){
var file = $("#imgBtn").get().files[];
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload=function(e){
alert('文件读取完成');
$("#preview").attr("src",e.target.result)
var $img = $("#preview");
$('.box > img').cropper({
aspectRatio: / ,
crop: function(data) {
}
});
} })
//预览裁剪后的图片
function imgSubmit(){
var result= $('.box > img').cropper("getCroppedCanvas");
document.body.appendChild(result);
}
</script> </body>
</html>

三、图片裁剪预览后以base64发送至服务端

此处后端使用nodejs,没有基础的可以看我之前的nodejs文章。

前端页面如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" type="text/css" href="../css/cropper.min.css">
<style type="text/css">
.box{
width: 600px;
height: 600px;
border:5px solid #555fff;
border-radius: 10px;
}
</style>
</head>
<body>
<form>
<input type="file" name="" id="imgBtn" name="imgCut">
<div class="box">
<img src="" id="previewyulan">
</div>
<input type="button" name="" value="上传" onclick="imgSubmit()">
</form> <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" src="../js/cropper.min.js"></script>
<script type="text/javascript">
$("#imgBtn").change(function(e){
var file = $("#imgBtn").get(0).files[0];
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload=function(e){
alert('文件读取完成');
$("#previewyulan").attr("src",e.target.result)
var $img = $("#preview");
$('.box > img').cropper({
aspectRatio: 16 / 9,
crop: function(data) {
//转换为base64
// var $imgData=$img.cropper('getCroppedCanvas')
// var dataurl = $imgData.toDataURL('image/png');
// $("#previewyulan").attr("src",dataurl)
}
});
} }) function imgSubmit(){
//获取裁剪后的canvas对象
var result= $('.box > img').cropper("getCroppedCanvas");
//将canvas对象转换为base64
var dataurl =result.toDataURL('image/png');
document.body.appendChild(result);
//发起post请求
var data = "img="+dataurl+"";
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(event){
if(xhr.readyState == 4){ //4:解析完毕
if(xhr.status == 200){ //200:正常返回
console.log(xhr)
}
}
};
xhr.open('POST','imgCut',true); //true为异步
xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
xhr.send(data);
} </script>
</body>
</html>

路由拦截:

app.post("/html/imgCut",function(req,res){
console.log(req.body.img);
//此处省略详细的后端逻辑代码
res.send();
})

有需要可以留言。

node.js平台下,cropper.js实现图片裁剪预览并转换为base64发送至服务端。的更多相关文章

  1. cropper.js实现图片裁剪预览并转换为base64发送至服务端。

    一 .准备工作 1.首先需要先下载cropper,常规使用npm,进入项目路径后执行以下命令: npm install cropper 2. cropper基于jquery,在此不要忘记引入jq,同时 ...

  2. JavaScript实现图片裁剪预览效果~(第一个小玩具)

    感觉开始学习的前一个月真的太不珍惜慕课网的资源了  上面蛮多小玩意真的蛮适合我这样刚入门JavaScript的同学加深使用理解 大概收藏了百来门或大或小的课程  有一个感觉就是学这个真的比光是看书看概 ...

  3. Java实现图片裁剪预览功能

    在项目中.我们须要做些类似头像上传,图片裁剪的功能,ok看以下文章! 须要插件:jQuery Jcrop 后端代码: package org.csg.upload; import java.awt.R ...

  4. node.js平台下,利用cookie实现记住密码登陆(Express+Ejs+Mysql)

    本博文需有node.js+express+mysql入门基础,若基础薄弱,可参考博主的其他几篇node.就是博文: 1.下载Mysql数据库,安装并配置 创建用户表供登录使用: 2.node.js平台 ...

  5. JS实现图片base64转blob对象,压缩图片,预览图片,图片旋转到正确角度

    base64转blob对象 /** 将base64转换为文件对象 * @param {String} base64 base64字符串 * */ var convertBase64ToBlob = f ...

  6. js实现FileUpload选择图片后预览功能

    当asp.net的FileUpload选择一个图片后不需要上传就能显示出图片的预览功能, 代码: <%@ Page Language="C#" AutoEventWireup ...

  7. JavaScript实现本地图片上传前进行裁剪预览

    本项目支持IE8+,测试环境IE8,IE9,IE10,IE11,Chrome,FireFox测试通过 另:本项目并不支持Vue,React等,也不建议,引入JQuery和Vue.React本身提倡的开 ...

  8. jQuery Lightbox图片放大预览

    简介:jQuery Lightbox图片放大预览代码是一款可以在用户点击页面中的小图片时,将该图片的高清版本以Lightbox的方式放大显示在页面的中间,提高用户的体验度. 效果展示 http://h ...

  9. 图片本地预览 flash html5

    dataURI 一种能够在页面嵌入外部资源的URI方案.能够降低图片或者样式表的http请求数量,提高效率. ie8把dataURI 的属性值限制在32k以内. 图片本地预览: 由于安全原因,通过fi ...

随机推荐

  1. java Mybatis框架动态SQL

    1.if+where <select id="getgoods" resultType="Goods" > select * from goods ...

  2. windows下配置php + mysql环境

    一.php服务器环境:apache + php安装与配置 1.下载apache.(httpd.apache.com) apache官网只提供源码,编译文件会有跳转到别的网站的下载地址. 如需VC9或V ...

  3. CLR设计类型之接口

    写在前面的话:             写到这一节的时候,CLR设计类型就已经结束了,因为CLR要求的是有一定基础的人看的,所以我们不是从基础类型以及运算符开始的,文章从一开始就讲的是深入面向对象编程 ...

  4. fragmentTabHost 使用示例

    目前我们看微信的底部,有四个导航栏,那我们应该来怎么实现类似的导航栏呢? 在 android 4.0 的时候,推出了一个新的工具,fragmentTabHost . fragmentTabHost  ...

  5. 五、VueJs 填坑日记之将接口用webpack代理到本地

    上一篇博文,我们已经顺利的从cnodejs.org请求到了数据,但是大家可以注意到我们的/src/api/index.js的第一句就是: // 配置API接口地址 var root = 'https: ...

  6. 老男孩Python全栈开发(92天全)视频教程 自学笔记02

    day2课程目录: 操作系统的历史 二进制运算 字符编码与计算机容量 编程语言介绍 开发语言分类 演讲能力锻炼 day2课程内容梳理: 操作系统发展史: Unix系统 极其稳定 现在很多银行还在用 L ...

  7. [动态规划]P1854 花店橱窗布置

    题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目.花束可以移动,并且每束花用1到F的整数标识 ...

  8. java虚拟机概述

    java 虚拟机是什么?       java虚拟机是一个将字节码指令映射为对应物理操作系统指令的程序.       java程序的运行需要事先安装 jdk,而在jdk内部的jre中其核心就是 jvm ...

  9. OC的内存管理和@class

    1. 基本原理 1. 什么是内存管理 ➢ 移动设备的内存极其有限,每个app所能占用的内存是有限制的 ➢ 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收 ...

  10. fragment显示 Binary XML file line #12: Error inflating class fragment 错误

    问题 最近换了新机子,今天在静态用fragment时突然发现闪退,一看显示 Binary XML file line #12: Error inflating class fragment 错误 后面 ...