H5海报生成器大概流程:从本地相册调用一张图作为背景,然后放到canvas中,和其他元素一起导出一张海报图片。
FileReader API
H5用FileReader调用本地图片
1 2 3 4 5 6 7
   |  <input class="abso upimg" id="upimg" accept="image/gif, image/jpeg, image/jpg, image/png" type="file" />
 
  <input class="abso upimg" id="upimg" accept="image/*" type="file" />
 
 
 
  | 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
   |  JSeasy.initUpImg = function(btnEle,endCallback){ 	btnEle.addEventListener('change', function () {
  		var file = this.files[0];  		 		if(!/image\/\w+/.test(file.type)){  			alert("文件必须为图片!");  			return false;  		} 
  		var reader = new FileReader(); 
  		 		reader.onload = function(e){  			 			if(endCallback)endCallback(this)
  		}  		reader.readAsDataURL(file); 
  	});	 };
 
 
  JSeasy.initUpImg(document.querySelector('#upimg'),function(reader){ 	console.log(reader) 	$ele.attr('src',reader.result); })
 
 
 
  | 
 
上面的方法可以得到本地图片的数据。
当我们把图片绘制到canvas,再通过var picData = document.getElementById('canEle').toDataURL('image/png');来导出画布图像的时候,部分手机(ip6)会提示有跨域问题。
此时可以通过设置img.crossOrigin = 'Anonymous';来解决ip6的问题。
但是设置crossOrigin后,ip7原本可以正常生成海报的,现在却出现了相册内的图片无法绘制到canvas中的问题。随意ip7不能设置crossOrigin属性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
   |  var img = new Image();  img.onload = bjInit;  
  img.onerror = function() {   	var img = new Image(); 	img.onload = bjInit; 	img.src = self.bj; }  
  function bjInit(){ 	 }
  img.crossOrigin = 'Anonymous'; img.src = reader.result;
 
 
  |