时间:2023-01-19 | 标签: | 作者:Q8 | 来源:网络
小提示:您能找到这篇{HTML5自助切图}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的HTML5自助切图内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您! |
||||||||||||||||||||||||||||||||||||||||||||||||||||
享受生活,热爱重构,大家好,我是Json。 在现在这个到处是HTML5话题的时代,好像不懂点HTML5都有点落伍。那我也跟上潮流一把吧,今天给大家分享的是基于HTML5的自助切图。 在组里经常会被某设计师叫切板仔,确实重构很大一部分工作都花在切图上,而如何提高切图效率或者让切图自助化也是我们重构师的追求。基于这个前提我自己抱着研究的心态,使用HTML5大致实现了一下。一开始觉得HTML5是个很神秘很高深的东西,其实当你去了解他,你会发现他是很空虚,且很容易上…………….手的。 这里使用到的HTML5技术包括:
拖拽:拖拽基本事件如下:
图1是页面上所使用到拖拽的地方。左图为拖拽上传图片,右图为拖拽参考线。 介绍完拖拽基本事件后,再来看下页面是如何通过拖拽将本地图片通过拖拽的方式拖到页面指定区域使用图片上传,这也是拖拽现在比较常用到的功能。 给document增加拖拽事件,当拖拽元素进入页面时改变目标元素样式提示用户目标元素位置,当拖拽元素离开页面后还原样式。代码如下: document.ondragleave = function(e){ e.preventDefault(); var el = document.getElementById('target_box'); el.className = el.className.replace(/over/g,''); } document.ondrop = function(e){ e.preventDefault(); } document.ondragenter = function(e){ e.preventDefault(); var el = document.getElementById('target_box'); el.className = el.className + ' over'; } document.ondragover = function(e){ e.preventDefault(); var el = document.getElementById('target_box'); el.className = el.className + ' over'; } 当图片被拖到上传区域后通过FileReader方法读取本地文件,然后将图片通过canvas来绘制,如果图片的宽度是大于画布1000px将水平居中处理,这里因为切图的时候需要将图片完整切出来,所以在设置canvas宽度时需要显示成图片的大小,所以这里使用了负marginLeft(这里将图片宽度减1000得出超出1000的区域,然后再除于2得出marginLeft的值)外面套一层1000px的方式来实现水平居中。代码如下: var box = document.getElementById('target_box'); box.ondrop = function(e){ e.preventDefault(); //获取文件列表 var fileList = e.dataTransfer.files; var reader = new FileReader(); reader.onload = function(e){ var img = new Image(); img.src = this.result; img.onload = function(){ if(this.width>1000){ canvas.style.marginLeft = ((this.width - 1000)/2) * -1 + 'px'; } canvas.width = this.width; canvas.height = this.height; ctx.drawImage(this,0,0); } } reader.readAsDataURL(fileList[0]); document.getElementById('target_box').style.display = 'none'; document.getElementById('doc').style.display = 'display'; }; 本地预览(FileReader)
这里因为标尺不需要做任何事情处理只需要拖拽效果,所以只需要增加draggable属性就可以,代码如下: //增加标尺目标事件 document.getElementById('cvs').ondrop = function(ev){ var div = document.createElement('div'); div.style.width = '100%' div.style.height = '1px'; div.style.background = '#4affff'; div.style.position = 'absolute' div.style.top = ev.offsetY + 18 + 'px'; document.getElementById('screen').appendChild(div); rulerTop.push(ev.offsetY); return false; } Canvas:这里先介绍下canvas的drawImage方法,切图的核心方法就是这个,我们先来看看官方给出的使用方法与解释:drawImage(image,sourceX,sourceY,sourceWidth,sourceHeight,destX,destY,destWidth,destHeight)
了解了drawImage方法后我们来看下,如何通过drawImage达到切图效果,其实这里的切图,只是通过drawImage加上高宽和偏移量来实现所谓的切图效果,代码如下: //绘制图片 function scaleCanvas (canvas, width, height, destX, destY) { var w = canvas.width, h = canvas.height; var cutCanvas = document.createElement('canvas'); var cutCtx = cutCanvas.getContext('2d'); cutCanvas.width = width; cutCanvas.height = height; cutCtx.drawImage(canvas, 0, 0, w, h, destX, destY, w, h); return cutCanvas; } //获取图片URL function getDataURL 互联网营销有限公司(canvas, width, height, destX, destY) { canvas = scaleCanvas(canvas, width, height, destX, destY); return canvas.toDataURL('image/jpeg'); } //将conver转成IMG格式 var convertToImage = function (canvas, width, height, destX, destY) { var strData = getDataURL(canvas, width, height, destX, destY); return encodeURIComponent(strData); } 这里先说下大致实现的原理,首先先创建一个新的canvas然后设置好宽高,而这个宽高就是参考线分隔的每一块宽高,然后过通drawImage将原图上某块局域复制一份出来,再通过toDataURL转成base64编码方便本地显示。 所在在这个Demo中image就是我们刚上传的那个图片,sourceX、sourceY和destWidth、destHeight取图片的原始高宽,而我们要复制的局域也是从新的canvas上的左上角开始,所以这里的sourceX、sourceY为0,0。这里最主要的就是destX、destY,就是他们来控制复制局域的起始坐标,因为新图片是需要从最左边开始复制,所以destX为0,而destY将根据参考线的纵坐标来定值。 这里要注意一下,因为域的问题,所以如果页面不是放到服务器上运行而是本地运行的话会出现权限报错情况 最后附上Demo一枚,。(Demo只支持chrome浏览器,其他浏览器会有不良反应,请见谅) 好了,整个HTML5自助化切图的主要代码就这些,这里第一次尝试用HTML5去做一些实实在在的东西,可能代码并不是最优,还能继续优化,大家如果对于文章有什么建议或不明白的地方欢迎讨论。 在旧版的切图工具里,我们的做法是将图片上传到服务器,然后通过服务器端把图片切好后把对应的地址返回,前端再把页面显示出来。这样的做法会导致在网络慢时出现长时间的等待,而如果页面放弃这里的操作,还需要将图片从服务器端删除掉。在拖拽参考线时也只能通过大量的代码去实现,还需要编写一些服务器端代码。 HTML5版相对有响应速度快(本地读取)、拖拽功能简单、前端切图不需要依赖服务器,减少开发成本。 反正HTML5是个上流、好玩、有趣、简单的好东西,值得你一生拥有。 写完文章已经凌晨两点半,根据官方和非官方统计,这个时间段被坑机率是平时的0.000001%,实践是检验真理的唯一标准。而为了检验这个标准我带着疲惫的身躯,打开客户端进入匹配模式。 来源:腾讯gdc |
上一篇:浅谈——韩国游戏网站设计
下一篇:设计容易让用户发现的手势操作
一、标题规则:标题关键词分开的店铺,关键词排名和权重会排在前面。所以店主...
作为一个淘宝卖家,关注自己的店铺权重,是十分重要的,因为这对自己的销量、...
一般的消费者在淘宝买东西的时候都会先输入一个他理解这个产品的词组,顾客的...
淘宝直通车收费方式还是挺好的,所以对于一些资金比较少的淘宝店家来说,推广...
第一步:登录到淘宝卖家中心,点击左侧菜单中的『物流管理-电子面单平台-我的...
推广当然都希望立竿见影,最好来一个点你广告的,就做一笔生意,所以要选择你...
现在开淘宝网店只要交一些保证金就可以完成了,可以说是投资最低的创业成本了...
宝贝滞销,也就是说宝贝长期没有销量,上架之后90天依然没有销量,那么淘宝方...
直通车坑位指的是大家在使用直通车做店铺推广的时候,官方平台给予宝贝的展示...
线下活动对很多网站来说不容易,对于一些静态网站来说更加无从着手。比如技术...
小提示:您应该对本页介绍的“HTML5自助切图”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通HTML5自助切图的相关事宜。
关键词:HTML5,