日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

vs矩形框边框线显示被选中的区域;_条形码区域解码:Web小工具

發(fā)布時(shí)間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vs矩形框边框线显示被选中的区域;_条形码区域解码:Web小工具 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

條形碼解碼首先要做定位,找到條形碼在圖像中的區(qū)域。但是有時(shí)候受圖像質(zhì)量影響,算法找尋的區(qū)域可能產(chǎn)生偏差,最后導(dǎo)致解碼失敗。這個(gè)時(shí)候,可以嘗試手動(dòng)選擇區(qū)域,來(lái)輔助條形碼的識(shí)別。

Web Canvas框選識(shí)別條形碼

需求:

  • 在網(wǎng)頁(yè)中加載條形碼圖像。
  • 使用鼠標(biāo)框選出條形碼的區(qū)域。
  • 識(shí)別區(qū)域中的條形碼。
  • Web Canvas圖像顯示

    創(chuàng)建input選擇文件。獲取文件對(duì)象之后,使用FileReader讀取并繪制到canvas上。如果讀取的圖像太大,可以設(shè)定一個(gè)最大縮放值:

    <input type="file" id="barcode-file" onchange="loadfile()" accept=".jpg,.jpeg,.png,.bmp" />function loadfile() {let img = new Image();var reader = new FileReader();reader.onload = function (evt) {img.onload = function () { if (img.width > maxLength) {img.height = maxLength * img.height / img.widthimg.width = maxLength;}else if (img.height > maxLength) {img.width = maxLength * img.width / img.heightimg.height = maxLength;}canvas.width = img.width;canvas.height = img.height;overlay.width = canvas.width;overlay.height = canvas.height;context.drawImage(img, 0, 0, img.width, img.height);};img.src = evt.target.result;};reader.readAsDataURL(name.files[0]);}

    鼠標(biāo)框選矩形區(qū)域

    要在圖像上面繪制出一個(gè)矩形框,需要?jiǎng)?chuàng)建另外一個(gè)canvas,并把它放置到圖像的上面:

    <style>#container {position: relative;}#imageCanvas {position: relative;z-index: 1;}#overlay {position: absolute;top: 0;left: 0;z-index: 2}</style><div id="container"><canvas id="imageCanvas"> </canvas><canvas id="overlay"></canvas> </div>

    接下來(lái)監(jiān)聽鼠標(biāo)事件,在鼠標(biāo)移動(dòng)的時(shí)候繪制矩形:

    function clearOverlay() {overlayCtx.clearRect(0, 0, overlay.width, overlay.height);overlayCtx.strokeStyle = '#ff0000';overlayCtx.lineWidth = 5; }overlay.addEventListener('mousedown', e => {startX = e.offsetX;startY = e.offsetY;isDrawing = true;clearOverlay();overlay.style.cursor = "crosshair";});overlay.addEventListener('mousemove', e => {if (isDrawing) {clearOverlay();overlayCtx.beginPath();overlayCtx.rect(startX, startY, e.offsetX - startX, e.offsetY - startY); overlayCtx.stroke();} mousePosition.innerHTML = "Cursor: (" + e.offsetX + ", " + e.offsetY + ")";});overlay.addEventListener('mouseup', e => {if (isDrawing) {isDrawing = false;mousePosition.innerHTML = "Cursor: (" + e.offsetX + ", " + e.offsetY + ")";region.innerHTML = "Decode a region: (" + startX + ", " + startY + ", " + e.offsetX + ", " + e.offsetY + "). ";overlay.style.cursor = "default";}});

    條形碼識(shí)別

    在鼠標(biāo)左鍵抬起的時(shí)候,可以獲得矩形最終的區(qū)域。把這個(gè)區(qū)域設(shè)置到接口中:

    overlay.addEventListener('mouseup', e => {if (isDrawing) {isDrawing = false;mousePosition.innerHTML = "Cursor: (" + e.offsetX + ", " + e.offsetY + ")";region.innerHTML = "Decode a region: (" + startX + ", " + startY + ", " + e.offsetX + ", " + e.offsetY + "). ";overlay.style.cursor = "default";// Decode a region of the barcode image(async () => {let settings = await barcodereader.getRuntimeSettings();settings.region.regionLeft = startX * 100 / overlay.width;settings.region.regionTop = startY * 100 / overlay.height;settings.region.regionRight = e.offsetX * 100 / overlay.width;settings.region.regionBottom = e.offsetY * 100 / overlay.height;settings.region.regionMeasuredByPercentage = 1;barcodereader.updateRuntimeSettings(settings);try {let decodingStart = Date.now();await barcodereader.decode(name.files[0]).then((results) => {let decodingEnd = Date.now();let txts = [];try {for (let i = 0; i < results.length; ++i) {txts.push(results[i].BarcodeText);}let barcoderesults = txts.join(', ');catch (e) {}});} catch (error) {alert(error);}})();}});

    現(xiàn)在可以很方便的選中一塊條形碼的區(qū)域來(lái)查看解碼結(jié)果。

    源碼

    https://gist.github.com/yushulx/b21d0919a1e92e0a320929799a99a5de

    總結(jié)

    以上是生活随笔為你收集整理的vs矩形框边框线显示被选中的区域;_条形码区域解码:Web小工具的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 久久国产香蕉 | 韩国三级在线视频 | 手机av网 | 奇米影视色 | 长腿校花无力呻吟娇喘的视频 | 欧美孕交视频 | 亚洲欧美激情另类校园 | 精品国产一区二区三区久久久蜜月 | 日韩精品一区二区三区在线观看 | 欧美在线aa| 污污网站在线 | www.四虎.com | 天天插综合网 | 中文在线观看av | 色婷婷91| 日韩精品视频免费看 | 大牛影视剧免费播放在线 | 5d肉蒲团之性战奶水 | 中文字幕日韩人妻在线视频 | 中文字幕在线2021 | 久久九九国产精品 | 四虎影视免费永久大全 | 嫩草影院国产 | 国产亚洲欧美日韩精品一区二区三区 | 最新中文av | 欧美无砖砖区免费 | 日日干av | 免费成人深夜夜 | 久久精品—区二区三区舞蹈 | 免费不卡视频 | 97国产精品人人爽人人做 | av在线.com| 免费麻豆国产一区二区三区四区 | 日韩三级视频在线播放 | 欧美精品一区二区三区久久久竹菊 | 亚洲欧美一区二区在线观看 | 久久久国产精品黄毛片 | 高潮毛片7777777毛片 | 青草视频污| 国产sm调教视频 | 久久亚洲日本 | 欧美色偷偷 | 日韩精品免费在线观看 | 邻居少妇张开腿让我爽了在线观看 | 麻豆最新 | 九一毛片| 成人福利网址 | 午夜在线精品 | 国产在线视频二区 | 国产乱大交| 天天躁日日躁狠狠很躁 | 你懂的在线观看网址 | 国产夫妇交换聚会群4p | 久久国产主播 | 国产一区在线不卡 | 国产精品女人精品久久久天天 | av免费在线播放 | 国产女同视频 | 日本韩国在线播放 | 青青草成人免费视频 | 国产伦理自拍 | 日韩中文第一页 | 久久毛片视频 | 自拍偷拍色综合 | 日韩欧美在线观看一区二区三区 | 日韩精品在线视频观看 | 欧美视频精品在线 | 最新av网站在线观看 | 一个人看的毛片 | 精品理论片 | 大尺度做爰呻吟舌吻网站 | 亚洲好看站| 捆绑黑丝美女 | 欧美视频综合 | 中文字幕理论片 | 国产91在线免费 | 天天躁日日躁狠狠躁喷水 | 欧美综合在线观看 | 偷拍精品一区二区三区 | 中文字幕日本人妻久久久免费 | 国产福利资源在线 | 色网站免费在线观看 | 可以直接看的无码av | 日本免费精品 | 6996电视影片免费看 | 九九这里只有精品视频 | 亚洲无码国产精品 | 午夜福利一区二区三区 | 国产情侣酒店自拍 | 欧美中文字幕在线视频 | 亚洲搞av | 日本一区二区免费看 | 中文字幕免费视频观看 | 日本中文在线观看 | 亚洲精品v | 日韩少妇一区二区 | 人妻在线一区二区 | 福利一二三区 | 色播在线播放 |