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

营销网站开发渠道有哪些网站营销方案模板

营销网站开发渠道有哪些,网站营销方案模板,做网站公司佛山,网站的flash怎么做之前实现了tif文件的融合,现在实现图片的融合,效果如下 第一张是融合右边两张图的结果 我的思路是: 初始使用canvas加载原图,此时未显示标注点击显示标注后,将原图和mask图传给workerworker接受数据后,转…

之前实现了tif文件的融合,现在实现图片的融合,效果如下
在这里插入图片描述
第一张是融合右边两张图的结果
我的思路是:

  1. 初始使用canvas加载原图,此时未显示标注
  2. 点击显示标注后,将原图和mask图传给worker
  3. worker接受数据后,转为blob格式再经过createImageBitmap处理拿到宽高
  4. 接着使用OffscreenCanvas渲染原地形图
  5. 再创建一个OffscreenCanvas处理地形mask图
  6. 将该地形mask的imageData值拿到,循环并处理对应的颜色
  7. 把处理后的mask图重新绘制回去
  8. 将处理后的mask的OffscreenCanvas绘制在地形图OffscreenCanvas上
  9. 最后将最新的地形图OffscreenCanvas进行转换返回给主线程

这是index.html代码:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title></title><style type="text/css">* {margin: 0;padding: 0;}h1 {position: absolute;top: 0;z-index: 99;color: red;}</style>
</head><body><input id="checkSVGLabel" type="checkbox" name=""> 显隐标注<br><!-- <img id="defaultImg" src="" alt=""> --><canvas id="canvas"></canvas><script type="text/javascript">// const terrainImageUrl = 'http://192.168.10.159:5502/images/orz.png'; // 替换为你的地形图URLconst terrainImageUrl = 'http://192.168.10.159:5502/images/orz5.png'; // 替换为你的地形图URLconst maskImageUrl = 'http://192.168.10.159:5502/images/mask1.png'; // 替换为你的黑底白框图URL// const terrainImageUrl = 'http://192.168.10.159:5502/images/orz3.jpg'; // 替换为你的地形图URL// const maskImageUrl = 'http://192.168.10.159:5502/images/mask4.jpg'; // 替换为你的黑底白框图URLconst canvas = document.getElementById('canvas');const ctx = canvas.getContext('2d');const checkSVGLabel = document.getElementById('checkSVGLabel');// const defaultImg = document.getElementById('defaultImg');let changeImgUrl = terrainImageUrllet imageWorker = nullfunction handleMaskImg (e){if (e.target.checked && imageWorker) {mergeMaskImg(terrainImageUrl, maskImageUrl, 'mergeMask')} else {mergeMaskImg(terrainImageUrl, maskImageUrl)}}// 融合色块function mergeMaskImg (orz, mask, type){if (type === 'mergeMask') {imageWorker.postMessage({orz,mask,type: 'creatMaskImg'})} else {const image = new Image();image.src = orz;image.onload = function (){canvas.width = image.width;canvas.height = image.height;ctx.drawImage(image, 0, 0);}}}function clearWorker (){if (worker) {worker.terminate()}worker = null}window.onload = function (){mergeMaskImg(terrainImageUrl, maskImageUrl)imageWorker = new Worker("../js/imageWorker.js")imageWorker.onmessage = (e) =>{const { type } = e.data;if (type === 'putMaskImg') {// 读取影像// defaultImg.src = e.data.dataUrl// 使用画布console.log(e)const { imageBitmap, canvasWidth, canvasHeight } = e.data;canvas.width = canvasWidth;canvas.height = canvasHeight;ctx.drawImage(imageBitmap, 0, 0, canvasWidth, canvasHeight);}}}checkSVGLabel.addEventListener('change', handleMaskImg);</script>
</body></html>

这是worker代码

self.addEventListener('message', async ({ data }) => {if (data.type === 'creatMaskImg') {let { orz, mask } = data// 加载地形图和蒙版图像const [terrainImage, maskImage] = await Promise.all([loadImageBitmap(orz),loadImageBitmap(mask)])const canvasWidth = terrainImage.widthconst canvasHeight = terrainImage.heightconst offscreenCanvas = new OffscreenCanvas(canvasWidth, canvasHeight)const ctx = offscreenCanvas.getContext('2d')// 绘制地形图ctx.drawImage(terrainImage, 0, 0, canvasWidth, canvasHeight)// 创建一个临时canvas来处理蒙版const tempCanvas = new OffscreenCanvas(maskImage.width,maskImage.height)const tempCtx = tempCanvas.getContext('2d')// 将黑底白框图绘制到临时canvastempCtx.drawImage(maskImage, 0, 0)// 获取图像数据const maskImageData = tempCtx.getImageData(0,0,tempCanvas.width,tempCanvas.height)const imgData = maskImageData.datafor (let i = 0; i < imgData.length; i += 4) {// 获取当前像素的RGB值const red = imgData[i]const green = imgData[i + 1]const blue = imgData[i + 2]if (red === 0 && green === 0 && blue === 0) {imgData[i + 3] = 0 // 透明度设置为0} else {if (red === 255 && green === 255 && blue === 255) {// 黑色// imgData[i] = 0// imgData[i + 1] = 0// imgData[i + 2] = 0// 紫色imgData[i] = 254imgData[i + 1] = 0imgData[i + 2] = 255imgData[i + 3] = imgData[i + 3] * 0.5// 透明图// imgData[i] = null// imgData[i + 1] = null// imgData[i + 2] = null}}}// 将处理后的蒙版图像数据放回临时canvastempCtx.putImageData(maskImageData, 0, 0)// 将临时canvas上的蒙版绘制到地形图上ctx.drawImage(tempCanvas, 0, 0, canvasWidth, canvasHeight)// ----------------- 传blob图像数据// 将处理后的 offscreenCanvas 转换为 Blob// const blob = await offscreenCanvas.convertToBlob()// const dataUrl = await blobToDataURL(blob)// self.postMessage({// 	dataUrl,// 	canvasWidth,// 	canvasHeight,// 	type: 'putMaskImg'// })// ----------------- 传canvas数据// 将处理后的 offscreenCanvas 转换为 ImageBitmap 并返回到主线程const imageBitmap = offscreenCanvas.transferToImageBitmap()self.postMessage({ imageBitmap, canvasWidth, canvasHeight, type: 'putMaskImg' },[imageBitmap])}
})async function loadImageBitmap(url) {const response = await fetch(url)const blob = await response.blob()return createImageBitmap(blob)
}function blobToDataURL(blob) {return new Promise((resolve, reject) => {const reader = new FileReader()reader.onloadend = () => resolve(reader.result)reader.onerror = rejectreader.readAsDataURL(blob)})
}

在worker中其实还可以将mask图片的黑色区域进行转换,也可以设置透明值,非常方便,如果不需要复杂的颜色处理,在处理后还可以结合mask-image去实现蒙版效果。

http://www.dtcms.com/wzjs/433545.html

相关文章:

  • 诸暨网站制作微信怎么推广
  • 海宁网站建设朝阳seo
  • 新疆建设职业技术学院校园网站软文广告经典案例分析
  • 泉州网站建设工作室百度浏览器极速版
  • 网站建设开发服务费怎么做分录关键词歌词图片
  • 枣庄市建设项目环评备案网站宁波seo在线优化哪家好
  • 企业贷款河南企业站seo
  • 百度关键词优化专家郑州seo顾问外包公司
  • 域名注册网站推荐推广网
  • 专业做旗袍花的网站是什么网站百度指数的搜索指数代表什么
  • 使用帝国备份王搬迁织梦网站营销型制作网站公司
  • 这么做网站百度客服投诉中心
  • 做视频哪个网站素材好app开发公司推荐
  • 成都网站优化网怎么做公众号
  • 房地产市场营销谷歌seo是什么职业
  • 做化妆品注册和注册的网站吗今天宣布疫情最新消息
  • wordpress post pageseo软件定制
  • 提供经营性网站备案百度导航最新版本
  • 简易企业网站深圳seo网站推广方案
  • 常州网站建设报价湖南优化推广
  • 吴苏南网站建设百度收录提交申请网站
  • 贵阳品牌网站建设公司seo模拟点击有用吗
  • 个人网页制作与网站建设seo咨询师
  • WordPress下级优化关键词可以选择哪个工具
  • 推进门户网站建设工作网店推广实训系统
  • 东营建设信息网站网络项目免费的资源网
  • 北京做网站比较大的公司北京网站建设公司哪家好
  • jsp酒店预订网站开发东莞营销推广公司
  • 化工网站建设推广国内手机怎么上google浏览器
  • 教做黏土手工的网站西安网约车