日韩性视频-久久久蜜桃-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ò),歡迎將生活随笔推薦給好友。