• h5实现图片的裁剪(多页面)


    今天利用canvas 实现了图片的裁剪。具体代码看下面。

    html:

    <div class="img-add imgadd video-add">
      <img src="images/iconfont-tianjia.png" alt="" width="100%" height="auto" />
      <input id="upvideo" type="file" name='file'/>
    </div>

      

    首先我通过input file 获取图片file对象

    var upphoto = document.querySelectorAll('.upphoto');
    	for(var i = 0; i < upphoto.length; i++) {
    		upphoto[i].addEventListener('change', function() {
    			console.log('点击了上传图片')
    			var file = this.files[0];
    			if(!/image/w+/.test(file.type)) {
    				mui.toast("文件必须为图片");
    				return false;
    			}
    			var fr = new FileReader();
    			fr.onload = function() {
    				preview = this.result;
    				console.log(preview);
    				location.href = 'clip_img.html?imgurl=' + preview;
    			}
    			fr.readAsDataURL(this.files[0]);
    			console.log(this.files[0])
    		})
    	}    
    

      获取成功以后将图片的base64编码传到裁剪页面处理

    //  接受传过来的参数
        waitingShow();
    	var params = getRequest();
    	console.log(params.imgurl);
    //	图片Base64
    	var path = params.imgurl;
    //	设置canvas的宽高
    	var displayHeight = window.screen.height - 45 + 'px';
    	var displayWidth  = window.screen.width + 'px';
    	console.log(displayHeight);
    	console.log(displayWidth);
    	document.getElementById('canvas-box').setAttribute('width',displayWidth);
    	document.getElementById('canvas-box').setAttribute('height',displayHeight);
    //	图片在canvas中显示
    	waitingHide();
    	var canvasbox = document.getElementById('canvas-box');
    	var context = canvasbox.getContext('2d');
    	var img=new Image();
    	img.src=path;
    	var imgHeight;
    	var imgwidth;
    	img.onload=function(){
        	context.drawImage(img,0,0);
    		 imgHeight= img.height;
    		 imgWidth = img.width;
    		alert(imgHeight);
    		alert(imgWidth);
    		//	1.插件确定裁剪位置用方法一
    		clipP.setClip({
    			imgHeight: imgHeight + 45,
    			qiu: qiu,
    			clip: clip,
    			w: w,
    			h: h
    		});	
    	}
    	
    //	2.确定裁剪位置用方法二
    //	var borderLeft,borderTop;
    //	var qiu = document.getElementById('qiu');
    //  var clip = document.getElementById('clip');
    //  clip.addEventListener('touchstart', function(event) {
    //  	event.stopPropagation();
    //  	var touch = event.targetTouches[0];
    //    	borderLeft = touch.pageX - clip.offsetLeft;
    //    	borderTop = touch.pageY - clip.offsetTop;
    //  });
    //  clip.addEventListener('touchmove', function(event) {
    //  	event.stopPropagation();
    //		var touch = event.targetTouches[0];
    //		var left = touch.pageX - borderLeft;
    //    	var top = touch.pageY - borderTop;
    //    	var clipWidth = parseInt(clip.getAttribute('data-k'));
    //    	var clipLeft = parseInt(clip.style.left);
    //    	var clipTop = parseInt(clip.style.top);
    //    	
    //    	console.log('left'+ left);
    //    	console.log('clipwidth'+clipWidth);
    //    	console.log('displayWidth'+displayWidth);
    //    	var maxleft = parseInt(imgWidth) - clipWidth;
    //    	console.log('maxleft'+ maxleft);
    //    	if(left < 0) {
    //	      clip.style.left = '0px';
    //	      clip.setAttribute('data-l', 0);
    //	    } else if(left >= maxleft) {
    //	      clip.style.left = maxleft + 'px';
    //		  console.log(maxleft);
    //	      clip.setAttribute('data-l', maxleft + 'px');
    //	    } else {
    //	      clip.style.left = left + 'px';
    //	      clip.setAttribute('data-l', left);
    //	    }
    //	    
    //	    //top
    //	    if(top <= 45) {
    //	      clip.style.top = '45px';
    //	      clip.setAttribute('data-t', 45);
    //	    } else if(top > imgHeight - clipWidth + 45) {
    //	      clip.style.top = imgHeight - clipWidth + 45 + 'px';
    //	      clip.setAttribute('data-t', imgHeight - clipWidth + 45 + 'px');
    //	    } else {
    //	      clip.style.top = top + 'px';
    //	      clip.setAttribute('data-t', top);
    //	    }
    //  });
        
    //	保存截取图片
    	mui('#header').on('tap', '#save', function(){
    //		var x = clip.getAttribute('data-l');
    //		var y = clip.getAttribute('data-t');
    //		var width = clip.getAttribute('data-k');
    //		x = parseInt(x);
    //		y = parseInt(y);
    //		width = parseInt(width);
    //		插件用法
    		var imgInfo= clipP.getClip()
    		console.log(JSON.stringify(imgInfo));
    		var x = imgInfo.left;
    		var y = imgInfo.top;
    		var width = imgInfo.width;
    		var height = imgInfo.height
    //		获得裁剪的图片(创建一个canvas,将裁剪的图片复制上去)
    		var canvas2 = document.createElement("canvas");
       		var cxt2 = canvas2.getContext("2d");
       		canvas2.width = width;
            canvas2.height = height;
    //		var imgData = context.getImageData(x,y-45,width,height);
    //		canvas 裁剪图片(复制)
    		var imgData = context.getImageData(x,y,width,height);
    		cxt2.putImageData(imgData,0,0);
    		console.log(canvas2.toDataURL());
    //		转成base64
    		var newurl = canvas2.toDataURL("image/png");
    		// 将裁剪的图片返回到上一页面
    		window.location.href = 'red_packet_send.html?newurl='+ newurl;
    		
    	});
    

      

  • 相关阅读:
    [置顶] Android中定时器的3种实现方法
    [置顶] Android代码应用程序通过WakeLock保持后台唤醒状态
    [置顶] 当爱情遇上互联网
    [置顶] Android咨询阿米巴基金合伙人李治国:我为什么投资快的打车?
    [置顶] Android问题Getting Android Sensor Events While The Screen is Off
    静态SQL和动态SQL
    IBM Data Studio使用对象创建的双引号/大小写问题以及表/列重命名
    DB2数据库查询过程(Query Processing)统计信息与过滤因子(Statistics and Filter Factors)
    DB2数据库查询过程(Query Processing)概述
    DB2数据库查询过程(Query Processing)表扫描与I/O(Table Scan and I/O)
  • 原文地址:https://www.cnblogs.com/RAINHAN/p/7246707.html
Copyright © 2020-2023  润新知