当前位置: 首页 > news >正文

高档网站建铭誉摄影网站

高档网站建,铭誉摄影网站,低价网站建设推广报价,可口可乐营销案例分析使用Canvas裁剪图片 概述 在Web开发中#xff0c;我们经常需要对图片进行裁剪#xff0c;以满足不同尺寸需求或者实现图片的局部展示。本篇博客将带您深入了解如何使用Canvas技术来实现图片的裁剪功能。我们将通过一个实例来演示如何利用Canvas绘制图片#xff0c;并通过蒙…使用Canvas裁剪图片 概述 在Web开发中我们经常需要对图片进行裁剪以满足不同尺寸需求或者实现图片的局部展示。本篇博客将带您深入了解如何使用Canvas技术来实现图片的裁剪功能。我们将通过一个实例来演示如何利用Canvas绘制图片并通过蒙层和鼠标交互来进行裁剪操作。让我们开始这个Canvas之旅吧 项目结构 首先让我们来看一下项目的结构。我们将使用HTML、CSS和JavaScript来实现Canvas裁剪图片功能代码如下所示 !DOCTYPE html html langen head!-- 省略部分代码 -- /head body!-- 省略部分代码 --divinput typefile idimageFile acceptimage/* //divdiv classcanvas-containercanvas idcan/canvas/divdiv classcanvas2-containercanvas idcan2/canvas/divscript// JavaScript代码/script/body /html我们将使用三个div容器分别用于显示原图、裁剪后的图和裁剪区域。其中input typefile idimageFile acceptimage/* / 用于上传图片。 初始化Canvas 在JavaScript部分我们先获取Canvas元素和其上下文如下所示 const oContainer document.querySelector(.canvas-container); const oContainer2 document.querySelector(.canvas2-container); const oImageFile document.querySelector(#imageFile); const oCan document.getElementById(can); const oCan2 document.getElementById(can2); const ctx oCan.getContext(2d); const ctx2 oCan2.getContext(2d);我们使用querySelector方法获取了.canvas-container和.canvas2-container元素作为图片容器#imageFile为图片上传按钮。接着我们获取了两个Canvas元素及其上下文。 图片加载与绘制 接下来我们需要监听图片上传按钮的事件并在选择图片后将其绘制在Canvas上 const init () {bindEvent(); }function bindEvent () {oImageFile.addEventListener(change, handleFileChange, false);// ... 其他事件监听 ... }function handleFileChange (e) {const file e.target.files[0];const reader new FileReader();reader.readAsDataURL(file);reader.onload function (e) {const data e.target.result;oImage.src data;oImage.onload function () {const { width, height } this;generateCanvas(oContainer, oCan, width, height);ctx.drawImage(oImage, 0, 0, width, height);drawImageMask(0, 0, width, height, MASK_OPACITY);}} }function generateCanvas (container, canvas, width, height) {container.style.width width px;container.style.height height px;canvas.width width;canvas.height height;container.style.display block; }在bindEvent函数中我们为图片上传按钮添加了change事件监听并在选择图片后通过FileReader读取图片文件并将其绘制在Canvas上。我们使用drawImage方法将图片绘制在Canvas上并调用generateCanvas函数使Canvas的大小与图片保持一致。同时我们调用drawImageMask函数绘制蒙层用于裁剪时的显示。 裁剪操作 接下来我们需要实现裁剪操作。当用户鼠标点击并拖动时我们可以获取鼠标位置然后绘制裁剪区域的矩形 function handleCanvasMouseDown (e) {initPos [ e.offsetX, e.offsetY ];oCan.addEventListener(mousemove, handleCanvasMouseMove, false);oCan.addEventListener(mouseup, handleCanvasMouseUp, false); }function handleCanvasMouseMove (e) {const endX e.offsetX;const endY e.offsetY;const [ startX, startY ] initPos;const rectWidth endX - startX;const rectHeight endY - startY;const { width, height } oCan;screenShotData [ startX, startY, rectWidth, rectHeight ];ctx.clearRect(0, 0, width, height);drawImageMask(0, 0, width, height, MASK_OPACITY);drawScreenShot(width, height, rectWidth, rectHeight); }function handleCanvasMouseUp () {oCan.removeEventListener(mousemove, handleCanvasMouseMove, false);oCan.removeEventListener(mouseup, handleCanvasMouseUp, false);drawScreenShotImage(screenShotData); }在handleCanvasMouseDown函数中我们记录鼠标点击时的位置。在handleCanvasMouseMove函数中根据鼠标移动的位置绘制裁剪区域的矩形并在蒙层上绘制黑色的半透明蒙层。在handleCanvasMouseUp函数中当鼠标松开后我们绘制裁剪后的图片。  图片裁剪 最后我们需要实现图片的裁剪功能。通过ctx.getImageData方法获取裁剪区域的数据并绘制在另一个Canvas上 function drawScreenShot (canWidth, canHeight, rectWidth, rectHeight) {ctx.globalCompositeOperation destination-out;ctx.fillStyle #000;ctx.fillRect(...initPos, rectWidth, rectHeight);ctx.globalCompositeOperation destination-over;ctx.drawImage(oImage, 0, 0, canWidth, canHeight, 0, 0, canWidth, canHeight); }function drawScreenShotImage (screenShotData) {const data ctx.getImageData(...screenShotData);generateCanvas(oContainer2, oCan2, screenShotData[2], screenShotData[3]);ctx2.clearRect(...screenShotData);ctx2.putImageData(data, 0, 0); }init();在drawScreenShot函数中我们使用globalCompositeOperation属性来控制绘制的方式先绘制裁剪区域并在蒙层上清除然后再绘制原图。在drawScreenShotImage函数中我们使用ctx.getImageData方法获取裁剪区域的数据然后绘制在第二个Canvas上。 总结 通过以上步骤我们已经成功实现了使用Canvas来裁剪图片的功能。通过监听鼠标事件我们可以在图片上绘制裁剪区域并最终实现图片的裁剪效果。Canvas技术是Web前端开发中不可或缺的一部分希望本篇博客能够帮助您更好地了解Canvas的应用场景和实践技巧。感谢您的阅读    学习自B站up——前端小野森森
http://www.w-s-a.com/news/60693/

相关文章:

  • 深圳个性化建网站公司简便网站建设
  • 网站安全狗十大免费ppt网站在线
  • 进网站后台显示空白图片模板 网站源码
  • dedecms 英文网站怎么在网站上做模式题库
  • 轻网站怎么建立国外做评论的网站
  • 拉米拉网站建设乐清网站网站建设
  • 获取网站全站代码申请免费域名的方法
  • 网站制作建设公司哪家好wordpress仪表盘打不开
  • 最佳网站制作模板用手机能创建网站吗
  • 只做黑白摄影的网站网站建设好后给领导作介绍
  • 移动手机网站建设如何做网站地图视频
  • 手工业网站怎么做成都酒吧设计公司
  • .net 网站生成安装文件目录重庆网站建设沛宣网络
  • 怎么做钓鱼网站吗百度免费域名注册网站
  • 如何给网站做外部优化今年国内重大新闻
  • 有没有做生物科技相关的网站弄一个app大概多少钱
  • 五金加工东莞网站建设怎么做网页跳转
  • 淄博网站优化价格wordpress没有小工具
  • 自己搭建服务器做视频网站wordpress发布文章 发布
  • php仿博客园网站阅读分享网站模板
  • 网站宣传的劣势域名注册长沙有限公司
  • 怎样联系自己建设网站企业怎样做好网站建设
  • 网站制作需求分析电商网站建设浩森宇特
  • 淄博网站建设招聘摄影网站建设的论文
  • 怎么把凡科网里做的网站保存成文件网站建设研究的意义
  • 服务器2003怎么做网站网站建设服务器的配置
  • 高校网站建设方案网站推广软件下载安装免费
  • 重庆没建网站的企业网站开发软件 连接SQL数据库
  • 百度申诉网站沉默是金
  • 如何自己建网站wordpress图片延时加载