이 기사에서는 캔버스 오프 스크린 기술이 무엇인지 설명합니다. 캔버스 돋보기 효과를 얻는 방법은 무엇입니까? , 특정 참조 가치가 있으므로 도움이 필요한 친구가 참조할 수 있으므로 도움이 되기를 바랍니다.
캔버스
를 사용하여 필터를 구현하는 것 외에도 오프스크린 기술 돋보기 기능을 사용할 수도 있습니다. canvas
除了可以实现滤镜,还可以利用离屏技术放大镜功能。为了方便讲解,本文分为 2 个应用部分:
实现水印和中心缩放
实现放大镜
canvas 学习和滤镜实现介绍过drawImage
接口。除了绘制图像,这个接口还可以:将一个canvas
对象绘制到另一个canvas
对象上。这就是离屏技术。
在代码中,有两个 canvas 标签。分别是可见与不可见。不可见的 canvas 对象上的 Context 对象,就是我们放置图像水印的地方。
更多详解,请看代码注释:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Learn Canvas</title> <style> canvas { display: block; margin: 0 auto; border: 1px solid #222; } input { display: block; margin: 20px auto; width: 800px } </style> </head> <body> <div id="app"> <canvas id="my-canvas"></canvas> <input type="range" value="1.0" min="0.5" max="3.0" step="0.1"> <canvas id="watermark-canvas" style="display: none;"></canvas> </div> <script type="text/javascript"> window.onload = function () { var canvas = document.querySelector("#my-canvas") var watermarkCanvas = document.querySelector("#watermark-canvas") var slider = document.querySelector("input") var scale = slider.value var ctx = canvas.getContext('2d') var watermarkCtx = watermarkCanvas.getContext("2d") /* 给第二个canvas获取的Context对象添加水印 */ watermarkCanvas.width = 300 watermarkCanvas.height = 100 watermarkCtx.font = "bold 20px Arial" watermarkCtx.lineWidth = "1" watermarkCtx.fillStyle = "rgba(255 , 255 , 255, 0.5)" watermarkCtx.fillText("=== yuanxin.me ===", 50, 50) /****************************************/ var img = new Image() img.src = "./img/photo.jpg" /* 加载图片后执行操作 */ img.onload = function () { canvas.width = img.width; canvas.height = img.height; drawImageByScale(canvas, ctx, img, scale, watermarkCanvas); // 监听input标签的mousemove事件 // 注意:mousemove实时监听值的变化,内存消耗较大 slider.onmousemove = function () { scale = slider.value drawImageByScale(canvas, ctx, img, scale, watermarkCanvas); } } /******************/ } /** * * @param {Object} canvas 画布对象 * @param {Object} ctx * @param {Object} img * @param {Number} scale 缩放比例 * @param {Object} watermark 水印对象 */ function drawImageByScale(canvas, ctx, img, scale, watermark) { // 图像按照比例进行缩放 var width = img.width * scale, height = img.height * scale // (dx, dy): 画布上绘制img的起始坐标 var dx = canvas.width / 2 - width / 2, dy = canvas.height / 2 - height / 2 ctx.clearRect(0, 0, canvas.width, canvas.height) // No1 清空画布 ctx.drawImage(img, dx, dy, width, height) // No2 重新绘制图像 if (watermark) { // No3 判断是否有水印: 有, 绘制水印 ctx.drawImage(watermark, canvas.width - watermark.width, canvas.height - watermark.height) } } </script> </body> </html>
实现效果如下图所示:
拖动滑竿,即可放大和缩小图像。然后右键保存图像。保存后的图像,就有已经有了水印,如下图所示:
在上述中心缩放的基础上,实现放大镜主需要注意以下 2 个部分:
细化处理canvas
설명의 편의를 위해 이 글은 2개의 응용 부분으로 나누어져 있습니다:
drawImage
인터페이스가 도입되었습니다. 이미지를 그리는 것 외에도 이 인터페이스는 캔버스
개체를 다른 캔버스
개체 위에 그립니다할 수 있습니다. 이것이 오프스크린 기술이다. 3. 구현 Magn 유리 h3>위 중앙 Zoom을 기준으로 돋보기 소유자는 다음 두 부분에 주의해야 합니다.
# 🎜🎜 #
캔버스
의 마우스 응답 이벤트 처리 개선: 슬라이드 인, 슬라이드 아웃, 클릭 및 해제
오프스크린 좌표 다시 계산( 세부사항 수식 계산 아이디어는 코드 주석을 참조하세요.)
위 내용은 캔버스 오프스크린 기술이란 무엇입니까? 캔버스 돋보기 효과를 얻는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!