`
keepwork
  • 浏览: 334401 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JS--图片截取/缩放/拖动/透明

js 
阅读更多
<!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

分享到:
评论

相关推荐

    canvas 手势拖拽旋转放大 crop截取图片 头像上传高清版本 (Tomcat 测试)

    本版本,使用cropper.js+hammer.js 实现手势旋转拖拽放大缩小图片功能,在截取图片时 清晰度远远大于jcanvas版本.有截取框,点击截取canvas bug 设置截取框cropbox的高度 不能大于图片高度,不知道新版的croppper.js...

    js完美实现同时拖拽、旋转、放大缩小图片的手势操作 ver2 添加图片截取功能

    Tomcat部署后移动端访问测试(个人上传最终版本?) 使用hammer.js+cropper.js 实现手势同时操作,即旋转时也可以拖拽放大 添加截取图片功能,可设置截图宽高比例,可设置截取的图片宽高值 添加复位功能

    仿微信拖动、缩放图片截取头像的小程序页面wx-avatar-cropper-master.zip

    "wx-avatar-cropper-master.zip" 包含了一个这样的实现,它提供了用户友好的图片拖动、缩放功能,使得用户可以精确地选取所需的头像部分。下面将详细介绍这个小程序页面的关键知识点和实现细节。 1. **微信小程序...

    javascript 截取图片

    JS-cropper是一个轻量级的JavaScript图片裁剪插件,它提供了丰富的配置选项和事件接口,能够方便地实现各种图片截取效果。使用这个库,你只需在HTML中引入库文件,然后按照文档的指引初始化cropper对象,即可轻松...

    js完美实现同时拖拽、旋转、放大缩小图片的手势操作

    使用hammer.js 可以手势控制同时进行旋转 拖拽 放大缩小功能, 解决官网移动旋转复位效果, 重点解决官网旋转rotate demo旋转乱跳bug 官网:http://hammerjs.github.io/ (官网的demo真是坑 又是复位又是旋转抖动的....

    Vue-drag-resize 拖拽缩放插件的使用(简单示例)

    Vue-drag-resize是一个用于Vue.js的拖拽和缩放组件,它允许开发者在网页应用中实现元素的拖拽移动和大小调整功能。通过使用Vue-drag-resize,可以轻松地为网页中的元素添加拖拽和缩放的交互行为,提高用户的操作体验...

    基于jquery的图片截取工具

    4. **图片处理**:利用JavaScript的Canvas API,如`context.drawImage()`方法在canvas上绘制图片,`context.getImageData()`获取图片的像素数据,`context.fillRect()`或`context.clearRect()`进行截取区域的标记。...

    h5图片截取

    为了使用户能直观地选择截取区域,我们需要提供一套交互控制,比如拖动选择框、旋转按钮、缩放滑块等。这些可以通过监听鼠标和触摸事件来实现,或者利用库自带的交互组件。用户操作的每一个变化,都需要实时更新...

    php+jquery的图片截取

    在IT领域,尤其是在Web开发中,图片截取和剪裁功能是常见的需求,尤其是在用户上传头像、编辑图片或创建自定义图形时。本话题主要关注如何使用PHP和jQuery实现这一功能,这两种技术分别在服务器端和客户端发挥关键...

    .net上传图片并在线截取图片

    - JavaScript库:使用JavaScript库如JQuery UI的Resizable和Draggable插件,或者更专业的Cropper.js,可以实现图片的拖动和缩放功能,从而让用户自由选择截图区域。 - 坐标信息:当用户完成截图操作后,我们需要...

    js中截取图片的插件.zip

    在JavaScript(简称JS)开发中,有时候我们需要处理用户上传的图片,例如进行尺寸调整、预览或裁剪等操作。本教程将详细讲解如何利用JS实现图片截取功能,并将其转化为Base64编码,以便于在网络上传输和提交至后台。...

    JS写的图片局部动态截取

    JavaScript 图片局部动态截取是一种常见的前端开发技术,它允许用户在网页上选取图片的特定区域,然后保存或处理这个选区。这种功能在许多应用中都有所体现,如在线编辑器、图像处理工具或者社交媒体平台。在本教程...

    js jquery ajax截取图片

    而“js jquery ajax截取图片”这个主题涉及到的就是如何利用这些技术来处理图像,特别是对图片进行截取和优化上传过程。在网页应用中,用户可能需要上传大尺寸图片,这可能导致加载速度慢、服务器存储压力增大以及...

    net上传图片 自定义图片截取

    这一过程通常涉及到图像操作,而JavaScript提供了一些库,如Cropper.js、jQuery UI中的Resizable和Draggable等,可以帮助我们实现自定义的图片截取功能。例如,用户可以通过鼠标在图片上拖动一个可调整大小的选框来...

    js实现图片截取并上传到web服务器

    使用js实现图片截取并上传到web服务器...用户可从本地选择一张图片,然后可对选择的图片进行拖动、缩放后截取,最后上传到web服务器。后台使用java实现图片的接收和存储,上传的图片默认保存到项目下的images文件夹中。

    实现图片截取+预览功能的jquery插件

    为了增加交互性,可以添加拖动和缩放功能,让用户可以自由选择要截取的部分。 在js文件夹中,通常会包含实现这些功能的主要JavaScript代码。这部分代码可能包括图片加载、Canvas绘图、数据URL生成、预览区域更新...

    .net图片截取(自定义大小)

    在.NET环境中,如果需要将这个JavaScript截取的图像与服务器端代码交互,可以使用Ajax技术将data URL发送到后台,然后在C#或VB.NET代码中解析这个URL,转化为System.Drawing.Image对象,从而进行保存或进一步处理。...

    JS头像上传,JS头像截取,PHP头像截取插件

    综上所述,"JS头像上传,JS头像截取,PHP头像截取插件" 是一个完整的解决方案,结合了前端JavaScript的交互性和后端PHP的处理能力,提供了一种高效、友好的头像管理机制。shearphoto插件作为其中的明星产品,它的...

    Jquery+.net实现图像缩放截取上传(类似开心网).rar

    标题中的“Jquery+.net实现图像缩放截取上传(类似开心网)”指的是一个使用jQuery和.NET技术构建的图片处理功能,它允许用户在上传图片前进行缩放和截取,类似于开心网上提供的图片操作体验。这个功能对于提高用户...

    图片上传截取插件

    此外,一些开源的图片上传截取插件如Jcrop、Cropper.js等,已经封装了这些功能,提供了丰富的API和配置选项,让开发者能快速集成到项目中。例如,Jcrop提供了一套完整的事件监听和回调机制,可以方便地与后端接口...

Global site tag (gtag.js) - Google Analytics