识别网页上的二维码

悬浮在图片上时,右键菜单里给出识别二维码的选项。

当前为 2025-03-25 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name 识别网页上的二维码
  3. // @name:en Recognizing QR codes on web pages
  4. // @name:zh-TW 辨識網頁上的二維碼
  5. // @name:ja ウェブページ上のQRコードを認識
  6. // @name:ko 웹 페이지의 QR 코드 인식
  7. // @name:fr Reconnaissance des codes QR sur les pages web
  8. // @name:de QR-Codes auf Webseiten erkennen
  9. // @name:es Reconocimiento de códigos QR en páginas web
  10. // @name:ru Распознавание QR-кодов на веб-страницах
  11. // @name:ar التعرف على رموز QR على صفحات الويب
  12. // @name:pt Reconhecimento de códigos QR em páginas da web
  13. // @name:it Riconoscimento dei codici QR nelle pagine web
  14. // @description 悬浮在图片上时,右键菜单里给出识别二维码的选项。
  15. // @description:en When hovering over an image, add a QR code recognition option to the right-click menu.
  16. // @description:zh-TW 懸浮在圖片上時,右鍵選單中提供辨識二維碼的選項。
  17. // @description:ja 画像上にマウスホバーしたとき、右クリックメニューにQRコード認識のオプションを追加。
  18. // @description:ko 이미지 위에 마우스를 올렸을 때, 오른쪽 클릭 메뉴에 QR 코드 인식 옵션 추가.
  19. // @description:fr Lors du survol d'une image, ajouter une option de reconnaissance de code QR au menu contextuel.
  20. // @description:de Beim Hovern über ein Bild eine QR-Code-Erkennungsoption zum Kontextmenü hinzufügen.
  21. // @description:es Al pasar el cursor sobre una imagen, agregar una opción de reconocimiento de código QR al menú contextual.
  22. // @description:ru При наведении на изображение добавить в контекстное меню опцию распознавания QR-кода.
  23. // @description:ar عند تمرير المؤشر فوق صورة، أضف خيار التعرف على رمز QR إلى القائمة السياقية.
  24. // @description:pt Ao passar o mouse sobre uma imagem, adicionar uma opção de reconhecimento de código QR ao menu de contexto.
  25. // @description:it Durante il passaggio del mouse su un'immagine, aggiungere un'opzione di riconoscimento del codice QR al menu contestuale.
  26. // @description 悬浮在图片上时,右键菜单里给出识别二维码的选项。
  27. // @description:en When hovering over an image, the right-click menu gives the option to recognize the QR code.
  28. // @namespace http://tampermonkey.net/
  29. // @version 0.2.3
  30. // @author aspen138
  31. // @match *://*/*
  32. // @grant GM_registerMenuCommand
  33. // @grant GM_unregisterMenuCommand
  34. // @grant GM_notification
  35. // @require https://unpkg.com/jsqr/dist/jsQR.js
  36. // @license MIT
  37. // ==/UserScript==
  38.  
  39. (function() {
  40. 'use strict';
  41.  
  42. let selectedImage = null;
  43.  
  44. // 添加右键菜单选项
  45. document.addEventListener('contextmenu', function(event) {
  46. // 确定是否是图片元素
  47. if (event.target.tagName === 'IMG') {
  48. selectedImage = event.target; // 保存当前选中的图片
  49. } else {
  50. selectedImage = null;
  51. }
  52. }, false);
  53.  
  54. // 注册菜单命令
  55. GM_registerMenuCommand("识别二维码", function() {
  56. console.log("selectedImage=", selectedImage);
  57. if (selectedImage) {
  58. decodeQRCode(selectedImage);
  59. }
  60. }, 'r');
  61.  
  62. function decodeQRCode(image) {
  63. // 创建Canvas来读取图片内容
  64. const canvas = document.createElement('canvas');
  65. const context = canvas.getContext('2d');
  66. canvas.width = image.naturalWidth; // 使用图片的原始尺寸
  67. canvas.height = image.naturalHeight;
  68. context.drawImage(image, 0, 0, canvas.width, canvas.height);
  69. const imageData = context.getImageData(0, 0, canvas.width, canvas.height);
  70.  
  71. // 使用jsQR库识别二维码
  72. const code = jsQR(imageData.data, imageData.width, imageData.height);
  73.  
  74. // 如果识别出二维码,发送通知显示结果
  75. if (code) {
  76. alert(`二维码内容:${code.data}`+ ' 二维码识别结果'); //别用GM_notification了吧
  77. } else {
  78. alert('未识别到二维码,请确保图片中包含一个可识别的二维码。' + ' 二维码识别错误'); //别用GM_notification了吧
  79. }
  80. }
  81. })();