مولد رموز QR باستخدام TypeScript: qrcode.js و qrcode-generator
\n\nأصبحت رموز QR جزءًا لا يتجزأ من الويب الحديث: من روابط المواقع وكلمات مرور Wi-Fi إلى بيانات الاتصال وتفاصيل الدفع. في نظام TypeScript البيئي، توجد عدة مكتبات ناضجة تسمح بتوليد رموز QR سواء على جانب العميل (المتصفح) أو على الخادم (Node.js). في هذه المقالة، سنشرح بالتفصيل المكتبتين الأكثر شيوعًا: qrcode (qrcode.js) و qrcode-generator، وسنوضح كيفية دمجهما في مشروع TypeScript.
\n\n1. qrcode (qrcode.js) — مكتبة متعددة الاستخدامات
\n\nمكتبة qrcode (حزمة npm: qrcode) هي المعيار الفعلي لتوليد رموز QR. وهي تدعم إخراج النتيجة على شكل canvas، SVG، سلسلة Data URI، أو نص عادي. بفضل كتابة TypeScript (الأنواع المضمنة أو @types/qrcode) يصبح التطوير آمنًا ومريحًا.
التثبيت
\nnpm install qrcode\nnpm install --save-dev @types/qrcode # لـ TypeScript\n\nمثال أساسي: توليد رمز QR في canvas (المتصفح)
\nimport QRCode from 'qrcode';\n\nconst canvas = document.getElementById('qr-canvas') as HTMLCanvasElement;\n\nQRCode.toCanvas(canvas, 'https://pythonlib.ru', { width: 300 }, (error) => {\n if (error) console.error('خطأ في التوليد:', error);\n else console.log('تم إنشاء رمز QR!');\n});\n\nالتوليد بصيغة SVG (للتقديم من الخادم)
\nimport QRCode from 'qrcode';\n\nconst svgString = await QRCode.toString('https://pythonlib.ru', {\n type: 'svg',\n color: { dark: '#1a1a2e', light: '#eaeaea' }\n});\nconsole.log(svgString); // كود SVG جاهز\n\nخيارات الإعداد
\n- \n
width— عرض رمز QR بالبكسل (الافتراضي 256). \n margin— الهامش من الحافة (بالوحدات، الافتراضي 4). \n color.dark/color.light— ألوان الوحدات والخلفية. \n errorCorrectionLevel— مستوى تصحيح الأخطاء:'L'(7%)،'M'(15%)،'Q'(25%)،'H'(30%). \n type— تنسيق الإخراج:'png'،'svg'،'utf8'. \n
2. qrcode-generator — بديل خفيف الوزن
\n\nمكتبة qrcode-generator (حزمة npm: qrcode-generator) تقدم واجهة برمجة تطبيقات بسيطة ولا تتطلب تبعيات. وهي مثالية إذا كنت بحاجة فقط إلى الحصول على مصفوفة رمز QR أو توليده بتنسيق مخصص.
التثبيت
\nnpm install qrcode-generator\n\nمثال: الإنشاء والرسم على canvas
\nimport QRCode from 'qrcode-generator';\n\nconst qr = QRCode(0, 'M'); // النوع (0 = تلقائي) ومستوى التصحيح\nqr.addData('https://pythonlib.ru');\nqr.make();\n\nconst canvas = document.getElementById('qr-canvas') as HTMLCanvasElement;\nconst ctx = canvas.getContext('2d')!;\nconst size = qr.getModuleCount();\nconst cellSize = 10;\ncanvas.width = size * cellSize;\ncanvas.height = size * cellSize;\n\nfor (let row = 0; row < size; row++) {\n for (let col = 0; col < size; col++) {\n ctx.fillStyle = qr.isDark(row, col) ? '#000' : '#fff';\n ctx.fillRect(col * cellSize, row * cellSize, cellSize, cellSize);\n }\n}\n\nالحصول على تمثيل نصي (لتصحيح الأخطاء)
\nconst qr = QRCode(0, 'M');\nqr.addData('Hello TypeScript!');\nqr.make();\nconsole.log(qr.createASCII()); // سيُظهر رمز QR في وحدة التحكم بأحرف\n\n3. مقارنة المكتبات
\n\n| الخاصية | \nqrcode (qrcode.js) | \nqrcode-generator | \n
|---|---|---|
| دعم TypeScript | \nنعم (عبر @types/qrcode) | \nلا يوجد دعم مدمج، ولكن يمكن استخدامه مع تعريف الأنواع |