使用canvas进行图片裁剪简单功能
1.html部分
使用一个input[type="file"]进行图片上传;
canvas进行图片的裁剪展示
<div>
<input type="file" id="imgFile">
</div>
<div id="demoBox" style="width: 300px;height: 300px;position: absolute;left: 300px;top: 0;overflow:hidden;border: 1px solid #ccc">
<img id="demoImg" alt="">
<div style="width: 150px;height: 150px;border: 1px solid #4fb8e3;background:rgba(255,255,255,.5);position: absolute;left: 0;top: 0;z-index: 1000;cursor:move" id="chooseBox"></div>
</div>
<div style="position: absolute;left: 700px;top: 0">
<canvas id="myCan" width="150" height="150"></canvas>
<button id="cut">裁剪文件</button>
<button id="btn">后台返回获取裁剪后的文件</button>
<img id="returnImg" alt="">
</div>
2.js部分
a.使用file文件的files属性,获取上传图片的基本属性;
b. new FileReader() 对象,使用其属性e.target.result将图片地址转为base64,赋给img标签上;
c. 创建一个裁剪选区,用以选择需要裁剪的部位,同事使用mousedown,mousemove,mouseup事件进行选框的拖拽;
d. 使用canvas中的drawImage()方法进行图片的裁剪,展示到canvass画布上;
e.用户在使用裁剪时候,可多次裁剪,因此需要每次裁剪之后利用clearRect()方法,进行画布的清除
// 图片裁剪 window.onload = function () { // 上传图片
var canvas = document.getElementById('myCan');
var imgFile = $('#imgFile');
var demoImg = $('#demoImg');
var ctx = canvas.getContext('2d');
imgFile.change(function () {
var file = imgFile[0].files[0];
console.log(file);
var reader = new FileReader();
reader.onload = function (e) {
console.log(e);
demoImg.attr('src', e.target.result);
};
reader.readAsDataURL(file);
}); // 位移选裁框
var dragDiv = $('#chooseBox');
dragDiv.mousedown(function (e) {
var oleft = $(this).position().left;
var otop = $(this).position().top;
var X = e.pageX - oleft;
var Y = e.pageY - otop;
$(document).mousemove(function (e) {
var left = e.pageX - X;
var top = e.pageY - Y;
if (left <= 0) {
left = 0;
}
else if (left >= ($('#demoBox').outerWidth(true) - dragDiv.outerWidth(true))) {
left = ($('#demoBox').outerWidth(true) - dragDiv.outerWidth(true));
} if (top <= 0) {
top = 0;
}
else if (top >= ($('#demoBox').outerHeight(true) - dragDiv.outerHeight(true))) {
top = ($('#demoBox').outerHeight(true) - dragDiv.outerHeight(true));
} dragDiv.css({
left: left,
top: top
}); });
});
$(document).mouseup(function () {
$(this).unbind('mousemove');
}); // 裁剪
function cut() {
var sx = dragDiv.position().left;
var sy = dragDiv.position().top;
var img = document.getElementById('demoImg');
ctx.drawImage(img, sx, sy, 150, 150, 0, 0, 150, 150);
} $('#cut').click(function () {
ctx.clearRect(0, 0, 150, 150);
cut();
}); };
使用canvas进行图片裁剪简单功能的更多相关文章
- Java实现图片裁剪预览功能
在项目中.我们须要做些类似头像上传,图片裁剪的功能,ok看以下文章! 须要插件:jQuery Jcrop 后端代码: package org.csg.upload; import java.awt.R ...
- 好用的开源库(二)——uCrop 图片裁剪
最近想要实现图片裁剪的功能,在Github上找到了这个uCrop,star的人挺多的,便是决定入坑,结果长达一个小时的看资料+摸索,终于是在项目中实现了图片裁剪的功能,今天便是来介绍一下uCrop的使 ...
- jQuery 图片裁剪插件 Jcrop
Jcrop是一个jQuery图片裁剪插件,它能为你的WEB应用程序快速简单地提供图片裁剪的功能.特点如下: 对所有图片均unobtrusively(无侵入的,保持DOM简洁) 支持宽高比例锁定 支持 ...
- Android图片裁剪之自由裁剪
我的博客http://blog.csdn.net/dawn_moon 客户的需求都是非常怪的.我有时候在给客户做项目的时候就想骂客户是sb.可是请你相信我,等你有需求,自己变成客户的时候,给你做项目的 ...
- (H5)canvas实现裁剪图片和马赛克功能,以及又拍云上传图片
1.核心功能 此组件功能包含: 图片裁剪(裁剪框拖动,裁剪框改变大小): 图片马赛克(绘制马赛克,清除马赛克): 图片预览.图片还原(返回原图.返回处理图): 图片上传(获取签名.上传图片). 2.核 ...
- 从web图片裁剪出发:了解H5中的canvas
本篇内容不针对canvas文档对每个api进行逐个的详解! 本篇内容不针对canvas文档对每个api进行逐个的详解! 本篇内容不针对canvas文档对每个api进行逐个的详解! 重说三,好了,现在进 ...
- 移动端 H5图片裁剪插件,内置简单手势操作
前面曾经写过一篇<H5图片裁剪升级版>,但里面需要借助第三方手势库,这次就不需要使用手势库,全部封装在代码中. 下图是裁剪的展示,下面就做了拖放和裁剪,没有做缩放,在插件中需要用到大量的计 ...
- iOS实现图片裁剪功能,基于TKImageView完善与讲解
1.功能需求:需要实现图片区域裁剪功能. 2.效果图: 3.实现原理:本来想自己实现的,刚好看到一个比较好的库:TKImageView,下载好研究了下,发现基本都能满足我的需求,而且封装的也比 ...
- 基于jQuery功能非常强大的图片裁剪插件
今天我们要来介绍一款基于jQuery功能非常强大的图片裁剪插件,这款jQuery图片裁剪插件可以选择裁剪框的尺寸比例,可以设置高宽尺寸,同时可以设置图片翻转角度,当然也支持图片的缩放,裁剪框也可以用鼠 ...
随机推荐
- Mybatis的@Options注解
mybatis的@Options注解能够设置缓存时间,能够为对象生成自增的key 第一个使用场景: 有一个表 CREATE TABLE instance ( instance_id BIGINT UN ...
- C++中的动态链接库
一,动态链接库的基本概念 1.DLL(Dynamic Linker Library)的概念 可以把DLL看做是一个仓库,它提供了一些可以直接拿来用的变量,函数或者类(但是不建议从DLL中获取变量),在 ...
- (27)IO流小结
字节流 输入字节流: ---------| InputStream 所有输入字节流的基类. 抽象类 ------------| FileInputStream 读取文件的输入字节流 --------- ...
- Java中反射与常用方法
java通常是先有类再有对象,有对象我就可以调用方法或者属性. 反射其实是通过Class对象来调用类里面的方法.通过反射可以调用私有方法和私有属性.大部分框架都是运用反射原理. 如何获得Class ...
- ReactJS入门:展示数据
由于公司开发需要,博主利用闲暇的时间对ReactJS的基础知识进行了一些粗浅的认识和了解.博主对ReactJS的学习主要来自官网(http://reactjs.cn/react/docs/thinki ...
- 对象的创建过程(chapter5.7.3)
总结一下对象的创建过程,假设有一个名为Dog的类: 1. 即使没有显示地使用static关键字,构造器实际上也是静态的方法,因此,当首次创建类型为Dog的对象时(构造器可以看成静态方法),或者Dog类 ...
- [个人小工具]清除SVN控制
SVN控制说白了就是在.svn文件夹内把项目文件的信息保存,清除SVN控制其实就是把.svn文件夹删除就可以了.但是如果文件夹太多,总不可能一个个文件夹去删除吧,所以写了个遍历文件夹删除的小工具. R ...
- Ubuntu抛弃了Untiy转向Gnome,美化之路怎么办?不用怕咱一步一步大变身!
跨平台系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#linux 常用软件安装+系统软件卸载:http://www.cnblogs.com/du ...
- macOS平台下虚拟摄像头的研发总结
一.背景介绍 虚拟摄像头,顾名思义,就是利用软件技术虚拟出一个摄像头硬件设备供用户使用.当我们需要对视频图像进行处理再输出时,虚拟摄像头就具备非常大的价值了.关于如何在Windwos上实现一个虚拟设备 ...
- Struts 2 实现登录以及显示信息
---恢复内容开始--- 这个星期主要做了一个项目的开始,基于开始学习Struts2的框架首先要先做好Action的按钮 这是我一个Action的展示,chain中是把一个数据带着去跳转另一个网页中 ...