<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js">
</script>

<style type="text/css">
* {
padding: 0px;
margin: 0px;
}

.main {
position: relative;
height: 500px;
width: 500px;
border: 1px solid gray;
overflow: hidden;
}

#btnfile {
}

.image {
position: absolute;
height: 500px;
width: 500px;
z-index: 1;
}

.cut_container {
position: absolute;
border: 1px solid orange;
height: 150px;
width: 150px;
left: 175px;
top: 175px;
z-index: 8888;
}

.btn_container {
position: absolute;
top: 500px;
}
</style>
</head>
<body>
<canvas id="mycan" width="200" height="200" style="display:none"></canvas>
<div class="main" id="img_container">
<div class="cut_container" id="cut_container" draggable="false"></div>

<img id="myImg" class="image" src="data:images/6.jpg" draggable="false" />

</div>
<div class="btn_container">
<input type="file" id="btnfile" />
<button id="btn_cut" onclick="cut_picture()">确定</button>
</div>

</body>
</html>
<script type="text/javascript">
var img = document.getElementById("myImg");
var width = parseInt(img.width);
var height = parseInt(img.height);
var x = 0; var y = 0;
var cut = $(document.getElementById("cut_container"))
$("#btnfile").change(function () {
var fr = new FileReader();
var file = this.files[0];
fr.readAsDataURL(file);
fr.onload = function () {
console.log(fr.result);
img.src = fr.result;
width = img.width;
height = img.height;
}

})
var x = 0, y = 0;
var canvas = document.getElementById("mycan");
var ctx = canvas.getContext("2d");
img.onload = function () {
ctx.drawImage(img, 0, 0, width, height);
}

document.getElementById("img_container").onmousewheel = function (e) {
e = event || e;
var v = e.wheelDelta;
if (v > 0) {
width += 10;
height += 10;
$(img).css({ height: height, width: width })
}
else {
width -= 10;
height -= 10;
if (width < 150 || height < 150) {
width = 150;
height = 150;
}
$(img).css({ height: height, width: width })

}
}

$("#myImg").mousedown(function (e) {
e = event || e;
var W = e.offsetX * 1;
var H = e.offsetY * 1;

$("#img_container").bind("mousemove", function (ex) {
ex = event || ex;
var left = ex.clientX * 1;
var top = ex.clientY * 1;
var l = left - W;
var t = top - H +$(document).scrollTop()*1;

$("#myImg").css({ left: l, top: t })
})
})
$("#img_container").mouseup(function () {
$("#img_container").unbind("mousemove")
})
function cut_picture() {
canvas.height = 150;
canvas.width = 150;
x = parseInt(img.style.left) - parseInt(cut.css("left"));
y = parseInt(img.style.top) - parseInt(cut.css("top"));
ctx.drawImage(img, x, y, width, height);
console.log(canvas.toDataURL())
window.open(canvas.toDataURL())
}

</script>

利用canvas图片剪切的更多相关文章

  1. Canvas 实现图片剪切

    用户上传头像然后截图的需求很常见,很多做法是把图像发送到后端,把裁剪后的结果发送给浏览器,这种方式会增加处理时延.最近正好学习了HTML5里的canvas,发现它的图片处理功能比较强大,就打算用can ...

  2. 利用canvas压缩图片

    现在手机拍的照片动不动就是几M,当用户上传手机里的照片时一个消耗流量大,一个上传时间长,为了解决这个问题,就需要压缩图片: 想法:利用canvas重绘图片,保持宽高比不变,具体宽高根本具体情况而定. ...

  3. 利用canvas制作图片(可缩放和平移)+相框+文字

    前言: 公司一个售前问我能不能用H5做一个手机拍照,给相片添加相框和添加文字上传到服务器的功能,我当时一琢磨觉得可行,就利用空余时间做了一个demo,去掉了拍照和上传,如果以后有机会,会给补上,当然对 ...

  4. canvas 图片拖拽旋转之二——canvas状态保存(save和restore)

    引言 在上一篇日志“canvas 图片拖拽旋转之一”中,对坐标转换有了比较深入的了解,但是仅仅利用坐标转换实现的拖拽旋转,会改变canvas坐标系的状态,从而影响画布上其他元素的绘制.因此,这个时候需 ...

  5. 图片上传,图片剪切jquery.imgareaselect

    ---恢复内容开始--- <%@ page language="java" contentType="text/html; charset=UTF-8" ...

  6. 用JavaScript实现图片剪切效果

    学会如何获取鼠标的坐标位置以及监听鼠标的按下.拖动.松开等动作事件,从而实现拖动鼠标来改变图片大小. 还可以学习css中的clip属性. 一.CSS实现图片不透明及裁剪效果. 图片剪切三层结构 1.第 ...

  7. HTML5利用canvas,把多张图合并成一张图片

    需求分析,根据当前网页中的几张图片,在手机上长按,保存图片到相册或者发送给好友. drawCanvas(){ var self = this; var imgsrcArray = [ require( ...

  8. canvas图片合成中的坑

    需求 要用代码来实现多张外部图片和文字的合并而且要上传到七牛云,再将图片链接通过客户端分享出去.图片背景需要支持用户自定义更换. 实现方案 在一个canvas上多次调用drawImage函数,分别绘制 ...

  9. 利用canvas将网页元素生成图片并保存在本地

    利用canvas将网页元素生成图片并保存在本地 首先引入三个文件: 1.<script type="text/javascript" src="js/html2ca ...

随机推荐

  1. LeetCode 204 Count Primes

    Problem: Count the number of prime numbers less than a non-negative number, n. Summary: 判断小于某非负数n的质数 ...

  2. ajax用get刷新页面元素在IE下无效解决~~

    总结一下解决办法: 在IE下用Ajax请求某一页面,通常会因为缓存的原因而返回上一次的结果,造成混乱,[即get方式时,获取数据,因发送参数和地址都一致,故IE浏览器会从缓存中取,而不会去请求服务器端 ...

  3. Matlab 周期方波信号傅里叶级数展开

    方波信号为: 傅里叶级数展开为: 程序运行结果: 程序代码: clear x = -6:0.01:6; T = 4; f = x; for N = 1:length(f) temp = rem(abs ...

  4. in (1,2)and in('1,2')解决

    select wm_concat(org_name) from mstorg where instr((select pass_dists from licrequests where req_no= ...

  5. Ruby混合类型

    当一个类拥有可以从多个父类继承的特点,类应该显示多重继承. Ruby没有直接支持多继承,但Ruby模块有另一个精彩使用.他们几乎消除多重继承的需要,提供了一个工厂,称为混入. 混合类型给一个精彩的控制 ...

  6. https单向认证和双向认证

    单向认证: .clinet<--server .clinet-->server .client从server处拿到server的证书,通过公司的CA去验证该证书,以确认server是真实的 ...

  7. Selenium 简单的例子

    Selenium是一个web自动化验收测试框架.   Selenium Client Driver - Selenium 2.0 Document http://seleniumhq.github.i ...

  8. 修改MS SQL忽略大小写 分类: SQL Server 数据库 2015-06-19 09:18 34人阅读 评论(0) 收藏

    第一步:数据库->属性->选项->限制访问:SINGLE_USER 第二步:ALTER DATABASE [数据库名称] collate Chinese_PRC_CI_AI 第三步: ...

  9. 【CentOS】LAMP相关3

    调优,安全如果是运维一个网站,PHP搭建的话,可能会出现500的错误,白页怎么去排查呢,今天就涉及到这方面的东西 http://blog.csdn.net/bsi_l4/article/details ...

  10. ASP.NET 给作为隐藏域的TextBox赋值之后提交表单,无响应?

    操作步骤: 给页面隐藏TextBox赋值,然后触发ASP.NET change事件,调用ASP.NET后台方法,调用后执行客户端脚本this.RegisterClientScriptBlock(Dat ...