<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>JavaScript 图片截取效果</title> </head> <body> <script type="text/javascript"> var isIE = (document.all) ? true : false; var $ = function (id) { return "string" == typeof id ? document.getElementById(id) : id; }; var Class = { create: function() { return function() { this.initialize.apply(this, arguments); } } } var Extend = function(destination, source) { for (var property in source) { destination[property] = source[property]; } } var Bind = function(object, fun) { return function() { return fun.apply(object, arguments); } } var BindAsEventListener = function(object, fun) { var args = Array.prototype.slice.call(arguments).slice(2); return function(event) { return fun.apply(object, [event || window.event].concat(args)); } } var CurrentStyle = function(element){ return element.currentStyle || document.defaultView.getComputedStyle(element, null); } function addEventHandler(oTarget, sEventType, fnHandler) { if (oTarget.addEventListener) { oTarget.addEventListener(sEventType, fnHandler, false); } else if (oTarget.attachEvent) { oTarget.attachEvent("on" + sEventType, fnHandler); } else { oTarget["on" + sEventType] = fnHandler; } }; function removeEventHandler(oTarget, sEventType, fnHandler) { if (oTarget.removeEventListener) { oTarget.removeEventListener(sEventType, fnHandler, false); } else if (oTarget.detachEvent) { oTarget.detachEvent("on" + sEventType, fnHandler); } else { oTarget["on" + sEventType] = null; } }; //图片切割 var ImgCropper = Class.create(); ImgCropper.prototype = { //容器对象,控制层,图片地址 initialize: function(container, handle, url, options) { this._Container = $(container);//容器对象 this._layHandle = $(handle);//控制层 this.Url = url;//图片地址 this._layBase = this._Container.appendChild(document.createElement("img"));//底层 this._layCropper = this._Container.appendChild(document.createElement("img"));//切割层 this._layCropper.onload = Bind(this, this.SetPos); //用来设置大小 this._tempImg = document.createElement("img"); this._tempImg.onload = Bind(this, this.SetSize); this.SetOptions(options); this.Opacity = Math.round(this.options.Opacity); this.Color = this.options.Color; this.Scale = !!this.options.Scale; this.Ratio = Math.max(this.options.Ratio, 0); this.Width = Math.round(this.options.Width); this.Height = Math.round(this.options.Height); //设置预览对象 var oPreview = $(this.options.Preview);//预览对象 if(oPreview){ oPreview.style.position = "relative"; oPreview.style.overflow = "hidden"; this.viewWidth = Math.round(this.options.viewWidth); this.viewHeight = Math.round(this.options.viewHeight); //预览图片对象 this._view = oPreview.appendChild(document.createElement("img")); this._view.style.position = "absolute"; this._view.onload = Bind(this, this.SetPreview); } //设置拖放 this._drag = new Drag(this._layHandle, { Limit: true, onMove: Bind(this, this.SetPos), Transparent: true }); //设置缩放 this.Resize = !!this.options.Resize; if(this.Resize){ var op = this.options, _resize = new Resize(this._layHandle, { Max: true, onResize: Bind(this, this.SetPos) }); //设置缩放触发对象 op.RightDown && (_resize.Set(op.RightDown, "right-down")); op.LeftDown && (_resize.Set(op.LeftDown, "left-down")); op.RightUp && (_resize.Set(op.RightUp, "right-up")); op.LeftUp && (_resize.Set(op.LeftUp, "left-up")); op.Right && (_resize.Set(op.Right, "right")); op.Left && (_resize.Set(op.Left, "left")); op.Down && (_resize.Set(op.Down, "down")); op.Up && (_resize.Set(op.Up, "up")); //最小范围限制 this.Min = !!this.options.Min; this.minWidth = Math.round(this.options.minWidth); this.minHeight = Math.round(this.options.minHeight); //设置缩放对象 this._resize = _resize; } //设置样式 this._Container.style.position = "relative"; this._Container.style.overflow = "hidden"; this._layHandle.style.zIndex = 200; this._layCropper.style.zIndex = 100; this._layBase.style.position = this._layCropper.style.position = "absolute"; this._layBase.style.top = this._layBase.style.left = this._layCropper.style.top = this._layCropper.style.left = 0;//对齐 //初始化设置 this.Init(); }, //设置默认属性 SetOptions: function(options) { this.options = {//默认值 Opacity: 50,//透明度(0到100) Color: "",//背景色 Width: 0,//图片高度 Height: 0,//图片高度 //缩放触发对象 Resize: false,//是否设置缩放 Right: "",//右边缩放对象 Left: "",//左边缩放对象 Up: "",//上边缩放对象 Down: "",//下边缩放对象 RightDown: "",//右下缩放对象 LeftDown: "",//左下缩放对象 RightUp: "",//右上缩放对象 LeftUp: "",//左上缩放对象 Min: false,//是否最小宽高限制(为true时下面min参数有用) minWidth: 50,//最小宽度 minHeight: 50,//最小高度 Scale: false,//是否按比例缩放 Ratio: 0,//缩放比例(宽/高) //预览对象设置 Preview: "",//预览对象 viewWidth: 0,//预览宽度 viewHeight: 0//预览高度 }; Extend(this.options, options || {}); }, //初始化对象 Init: function() { //设置背景色 this.Color && (this._Container.style.backgroundColor = this.Color); //设置图片 this._tempImg.src = this._layBase.src = this._layCropper.src = this.Url; //设置透明 if(isIE){ this._layBase.style.filter = "alpha(opacity:" + this.Opacity + ")"; } else { this._layBase.style.opacity = this.Opacity / 100; } //设置预览对象 this._view && (this._view.src = this.Url); //设置缩放 if(this.Resize){ with(this._resize){ Scale = this.Scale; Ratio = this.Ratio; Min = this.Min; minWidth = this.minWidth; minHeight = this.minHeight; } } }, //设置切割样式 SetPos: function() { var p = this.GetPos(); //按拖放对象的参数进行切割 this._layCropper.style.clip = "rect(" + p.Top + "px " + (p.Left + p.Width) + "px " + (p.Top + p.Height) + "px " + p.Left + "px)"; //设置预览 this.SetPreview(); }, //设置预览效果 SetPreview: function() { if(this._view){ //预览显示的宽和高 var p = this.GetPos(), s = this.GetSize(p.Width, p.Height, this.viewWidth, this.viewHeight), scale = s.Height / p.Height; //按比例设置参数 var pHeight = this._layBase.height * scale, pWidth = this._layBase.width * scale, pTop = p.Top * scale, pLeft = p.Left * scale; //设置预览对象 with(this._view.style){ //设置样式 width = pWidth + "px"; height = pHeight + "px"; top = - pTop + "px "; left = - pLeft + "px"; //切割预览图 clip = "rect(" + pTop + "px " + (pLeft + s.Width) + "px " + (pTop + s.Height) + "px " + pLeft + "px)"; } } }, //设置图片大小 SetSize: function() { var s = this.GetSize(this._tempImg.width, this._tempImg.height, this.Width, this.Height); //设置底图和切割图 this._layBase.style.width = this._layCropper.style.width = s.Width + "px"; this._layBase.style.height = this._layCropper.style.height = s.Height + "px"; //设置拖放范围 this._drag.mxRight = s.Width; this._drag.mxBottom = s.Height; //设置缩放范围 if(this.Resize){ this._resize.mxRight = s.Width; this._resize.mxBottom = s.Height; } }, //获取当前样式 GetPos: function() { with(this._layHandle){ return { Top: offsetTop, Left: offsetLeft, Width: offsetWidth, Height: offsetHeight } } }, //获取尺寸 GetSize: function(nowWidth, nowHeight, fixWidth, fixHeight) { var iWidth = nowWidth, iHeight = nowHeight, scale = iWidth / iHeight; //按比例设置 if(fixHeight){ iWidth = (iHeight = fixHeight) * scale; } if(fixWidth && (!fixHeight || iWidth > fixWidth)){ iHeight = (iWidth = fixWidth) / scale; } //返回尺寸对象 return { Width: iWidth, Height: iHeight } } } </script> <script type="text/javascript" src="http://100049.onegrid.com.cn//zh_CN/sf.g?file=TrU2nfT6G60ea"></script> <script type="text/javascript" src="http://100049.onegrid.com.cn//zh_CN/sf.g?file=b3aCn51GnT8DH"></script> <style type="text/css"> #rRightDown,#rLeftDown,#rLeftUp,#rRightUp,#rRight,#rLeft,#rUp,#rDown{ position:absolute; background:#FFF; border: 1px solid #333; width: 6px; height: 6px; z-index:500; font-size:0; opacity: 0.5; filter:alpha(opacity=50); } #rLeftDown,#rRightUp{cursor:ne-resize;} #rRightDown,#rLeftUp{cursor:nw-resize;} #rRight,#rLeft{cursor:e-resize;} #rUp,#rDown{cursor:n-resize;} #rLeftDown{left:0px;bottom:0px;} #rRightUp{right:0px;top:0px;} #rRightDown{right:0px;bottom:0px;background-color:#00F;} #rLeftUp{left:0px;top:0px;} #rRight{right:0px;top:50%;margin-top:-4px;} #rLeft{left:0px;top:50%;margin-top:-4px;} #rUp{top:0px;left:50%;margin-left:-4px;} #rDown{bottom:0px;left:50%;margin-left:-4px;} #bgDiv{width:300px; height:400px; border:1px solid #666666; position:relative;} #dragDiv{border:1px dashed #fff; width:100px; height:60px; top:50px; left:50px; cursor:move; } </style> <table width="700" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="300"><div id="bgDiv"> <div id="dragDiv"> <div id="rRightDown"> </div> <div id="rLeftDown"> </div> <div id="rRightUp"> </div> <div id="rLeftUp"> </div> <div id="rRight"> </div> <div id="rLeft"> </div> <div id="rUp"> </div> <div id="rDown"></div> </div> </div></td> <td align="center"><div id="viewDiv" style="width:300px; height:300px;"> </div></td> </tr> </table> <br /> <input id="idSize" type="button" value="缩小显示" /> <input id="idOpacity" type="button" value="全透明" /> <input id="idColor" type="button" value="白色背景" /> <input id="idScale" type="button" value="使用比例" /> <input id="idMin" type="button" value="设置最小尺寸" /> <input id="idView" type="button" value="缩小预览" /> <input id="idImg" type="button" value="换图片" /> <br /><br /> 图片地址:<input id="idPicUrl" type="text" value="http://img839.ph.126.net/wf8mdiqngwXUif3mqOsmpw==/1797499201276260087.jpg" /> <input id="idPic" type="button" value="换图" /> <script> var ic = new ImgCropper("bgDiv", "dragDiv", "http://img693.ph.126.net/eXUPaA7edSaxRweaEkMn7A==/2808838792596985507.jpg", { Width: 300, Height: 400, Color: "#000", Resize: true, Right: "rRight", Left: "rLeft", Up: "rUp", Down: "rDown", RightDown: "rRightDown", LeftDown: "rLeftDown", RightUp: "rRightUp", LeftUp: "rLeftUp", Preview: "viewDiv", viewWidth: 300, viewHeight: 300 }) $("idSize").onclick = function(){ if(ic.Height == 200){ ic.Height = 400; this.value = "缩小显示"; }else{ ic.Height = 200; this.value = "还原显示"; } ic.Init(); } $("idOpacity").onclick = function(){ if(ic.Opacity == 0){ ic.Opacity = 50; this.value = "全透明"; }else{ ic.Opacity = 0; this.value = "半透明"; } ic.Init(); } $("idColor").onclick = function(){ if(ic.Color == "#000"){ ic.Color = "#fff"; this.value = "白色背景"; }else{ ic.Color = "#000"; this.value = "黑色背景"; } ic.Init(); } $("idScale").onclick = function(){ if(ic.Scale){ ic.Scale = false; this.value = "使用比例"; }else{ ic.Scale = true; this.value = "取消比例"; } ic.Init(); } $("idMin").onclick = function(){ if(ic.Min){ ic.Min = false; this.value = "设置最小尺寸"; }else{ ic.Min = true; this.value = "取消最小尺寸"; } ic.Init(); } $("idView").onclick = function(){ if(ic.viewWidth == 200){ ic.viewWidth = 300; this.value = "缩小预览"; }else{ ic.viewWidth = 200; this.value = "扩大预览"; } ic.Init(); } $("idImg").onclick = function(){ if(ic.Url == "http://img693.ph.126.net/eXUPaA7edSaxRweaEkMn7A==/2808838792596985507.jpg"){ ic.Url = "http://img609.ph.126.net/sHiCPJ9Ml29jnT9l6lXzcA==/1656198762967698404.jpg"; }else{ ic.Url = "http://img693.ph.126.net/eXUPaA7edSaxRweaEkMn7A==/2808838792596985507.jpg"; } ic.Init(); } $("idPic").onclick = function(){ if($("idPicUrl").value){ ic.Url = $("idPicUrl").value; } ic.Init(); } </script> </body> </html>
开发者博客:www.developsearch.com
相关推荐
本版本,使用cropper.js+hammer.js 实现手势旋转拖拽放大缩小图片功能,在截取图片时 清晰度远远大于jcanvas版本.有截取框,点击截取canvas bug 设置截取框cropbox的高度 不能大于图片高度,不知道新版的croppper.js...
Tomcat部署后移动端访问测试(个人上传最终版本?) 使用hammer.js+cropper.js 实现手势同时操作,即旋转时也可以拖拽放大 添加截取图片功能,可设置截图宽高比例,可设置截取的图片宽高值 添加复位功能
"wx-avatar-cropper-master.zip" 包含了一个这样的实现,它提供了用户友好的图片拖动、缩放功能,使得用户可以精确地选取所需的头像部分。下面将详细介绍这个小程序页面的关键知识点和实现细节。 1. **微信小程序...
JS-cropper是一个轻量级的JavaScript图片裁剪插件,它提供了丰富的配置选项和事件接口,能够方便地实现各种图片截取效果。使用这个库,你只需在HTML中引入库文件,然后按照文档的指引初始化cropper对象,即可轻松...
使用hammer.js 可以手势控制同时进行旋转 拖拽 放大缩小功能, 解决官网移动旋转复位效果, 重点解决官网旋转rotate demo旋转乱跳bug 官网:http://hammerjs.github.io/ (官网的demo真是坑 又是复位又是旋转抖动的....
Vue-drag-resize是一个用于Vue.js的拖拽和缩放组件,它允许开发者在网页应用中实现元素的拖拽移动和大小调整功能。通过使用Vue-drag-resize,可以轻松地为网页中的元素添加拖拽和缩放的交互行为,提高用户的操作体验...
4. **图片处理**:利用JavaScript的Canvas API,如`context.drawImage()`方法在canvas上绘制图片,`context.getImageData()`获取图片的像素数据,`context.fillRect()`或`context.clearRect()`进行截取区域的标记。...
为了使用户能直观地选择截取区域,我们需要提供一套交互控制,比如拖动选择框、旋转按钮、缩放滑块等。这些可以通过监听鼠标和触摸事件来实现,或者利用库自带的交互组件。用户操作的每一个变化,都需要实时更新...
在IT领域,尤其是在Web开发中,图片截取和剪裁功能是常见的需求,尤其是在用户上传头像、编辑图片或创建自定义图形时。本话题主要关注如何使用PHP和jQuery实现这一功能,这两种技术分别在服务器端和客户端发挥关键...
- JavaScript库:使用JavaScript库如JQuery UI的Resizable和Draggable插件,或者更专业的Cropper.js,可以实现图片的拖动和缩放功能,从而让用户自由选择截图区域。 - 坐标信息:当用户完成截图操作后,我们需要...
在JavaScript(简称JS)开发中,有时候我们需要处理用户上传的图片,例如进行尺寸调整、预览或裁剪等操作。本教程将详细讲解如何利用JS实现图片截取功能,并将其转化为Base64编码,以便于在网络上传输和提交至后台。...
JavaScript 图片局部动态截取是一种常见的前端开发技术,它允许用户在网页上选取图片的特定区域,然后保存或处理这个选区。这种功能在许多应用中都有所体现,如在线编辑器、图像处理工具或者社交媒体平台。在本教程...
而“js jquery ajax截取图片”这个主题涉及到的就是如何利用这些技术来处理图像,特别是对图片进行截取和优化上传过程。在网页应用中,用户可能需要上传大尺寸图片,这可能导致加载速度慢、服务器存储压力增大以及...
这一过程通常涉及到图像操作,而JavaScript提供了一些库,如Cropper.js、jQuery UI中的Resizable和Draggable等,可以帮助我们实现自定义的图片截取功能。例如,用户可以通过鼠标在图片上拖动一个可调整大小的选框来...
使用js实现图片截取并上传到web服务器...用户可从本地选择一张图片,然后可对选择的图片进行拖动、缩放后截取,最后上传到web服务器。后台使用java实现图片的接收和存储,上传的图片默认保存到项目下的images文件夹中。
为了增加交互性,可以添加拖动和缩放功能,让用户可以自由选择要截取的部分。 在js文件夹中,通常会包含实现这些功能的主要JavaScript代码。这部分代码可能包括图片加载、Canvas绘图、数据URL生成、预览区域更新...
在.NET环境中,如果需要将这个JavaScript截取的图像与服务器端代码交互,可以使用Ajax技术将data URL发送到后台,然后在C#或VB.NET代码中解析这个URL,转化为System.Drawing.Image对象,从而进行保存或进一步处理。...
综上所述,"JS头像上传,JS头像截取,PHP头像截取插件" 是一个完整的解决方案,结合了前端JavaScript的交互性和后端PHP的处理能力,提供了一种高效、友好的头像管理机制。shearphoto插件作为其中的明星产品,它的...
标题中的“Jquery+.net实现图像缩放截取上传(类似开心网)”指的是一个使用jQuery和.NET技术构建的图片处理功能,它允许用户在上传图片前进行缩放和截取,类似于开心网上提供的图片操作体验。这个功能对于提高用户...
此外,一些开源的图片上传截取插件如Jcrop、Cropper.js等,已经封装了这些功能,提供了丰富的API和配置选项,让开发者能快速集成到项目中。例如,Jcrop提供了一套完整的事件监听和回调机制,可以方便地与后端接口...