แบบกรอบเหลี่ยม
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>QR Code with Logo and White Background</title>
</head>
<body>
<!-- Canvas to draw QR Code with Logo -->
<canvas id="qrCanvas"></canvas>
<!-- QRCode.js library -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js"></script>
<script>
// Function to generate QR code with logo and white background
function generateQRCodeWithLogo(text = 'https://example.com', logoUrl = 'https://your-logo-url.com/logo.png') {
const canvas = document.getElementById('qrCanvas');
const context = canvas.getContext('2d');
// Set the size of the canvas
const qrSize = 256; // Size of QR code
const logoSize = 64; // Size of the logo
const logoPadding = 3; // Padding around the logo for white background
const logoBackgroundSize = logoSize + logoPadding * 2; // Size of the logo background
canvas.width = qrSize;
canvas.height = qrSize;
// Create a QR code and draw it on the canvas
const qrCode = new QRCode(document.createElement('div'), {
text: text,
width: qrSize,
height: qrSize,
colorDark: "#000000",
colorLight: "#ffffff",
correctLevel: QRCode.CorrectLevel.H // Higher error correction level
});
// Draw QR code on the canvas
const qrImage = new Image();
qrImage.src = qrCode._el.querySelector('canvas').toDataURL('image/png');
qrImage.onload = function() {
context.drawImage(qrImage, 0, 0, qrSize, qrSize);
// Draw white background for logo
const logoX = (qrSize - logoBackgroundSize) / 2;
const logoY = (qrSize - logoBackgroundSize) / 2;
context.fillStyle = '#ffffff'; // Set fill color to white
context.fillRect(logoX, logoY, logoBackgroundSize, logoBackgroundSize);
// Draw logo in the center of the QR code
const logoImage = new Image();
logoImage.src = logoUrl; // URL of the logo image
logoImage.onload = function() {
const logoX = (qrSize - logoSize) / 2;
const logoY = (qrSize - logoSize) / 2;
context.drawImage(logoImage, logoX, logoY, logoSize, logoSize);
};
};
}
// Call the function to generate the QR code with logo and white background
generateQRCodeWithLogo(
'https://guruchian.blogspot.com/', // Text/URL to encode in QR code
'https://semicon.github.io/img/logo2small.png' // URL of the logo
);
</script>
</body>
</html>
แบบกรอบกลม
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>QR Code with Circular Logo Background</title>
</head>
<body>
<!-- Canvas to draw QR Code with Logo -->
<canvas id="qrCanvas"></canvas>
<!-- QRCode.js library -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js"></script>
<script>
// Function to generate QR code with logo and circular white background
function generateQRCodeWithLogo(text = 'https://example.com', logoUrl = 'https://your-logo-url.com/logo.png') {
const canvas = document.getElementById('qrCanvas');
const context = canvas.getContext('2d');
// Set the size of the canvas
const qrSize = 256; // Size of QR code
const logoSize = 64; // Size of the logo
const logoPadding = 5; // Padding around the logo for white circular background
const logoBackgroundRadius = (logoSize + logoPadding * 2) / 2; // Radius of the logo background
canvas.width = qrSize;
canvas.height = qrSize;
// Create a QR code and draw it on the canvas
const qrCode = new QRCode(document.createElement('div'), {
text: text,
width: qrSize,
height: qrSize,
colorDark: "#000000",
colorLight: "#ffffff",
correctLevel: QRCode.CorrectLevel.H // Higher error correction level
});
// Draw QR code on the canvas
const qrImage = new Image();
qrImage.src = qrCode._el.querySelector('canvas').toDataURL('image/png');
qrImage.onload = function() {
context.drawImage(qrImage, 0, 0, qrSize, qrSize);
// Draw white circular background for logo
const centerX = qrSize / 2; // X coordinate of center of the circle
const centerY = qrSize / 2; // Y coordinate of center of the circle
context.fillStyle = '#ffffff'; // Set fill color to white
context.beginPath();
context.arc(centerX, centerY, logoBackgroundRadius, 0, Math.PI * 2, true); // Draw circle
context.fill();
// Draw logo in the center of the QR code
const logoImage = new Image();
logoImage.src = logoUrl; // URL of the logo image
logoImage.onload = function() {
const logoX = (qrSize - logoSize) / 2;
const logoY = (qrSize - logoSize) / 2;
context.drawImage(logoImage, logoX, logoY, logoSize, logoSize);
};
};
}
// Call the function to generate the QR code with logo and circular white background
generateQRCodeWithLogo(
'https://guruchian.blogspot.com/', // Text/URL to encode in QR code
'https://semicon.github.io/img/logo2small.png' // URL of the logo
);
</script>
</body>
</html>
ขนาดของคิวอาร์โค้ดและโลโก้
- กำหนดขนาดของคิวอาร์โค้ดด้วยตัวแปร qrSize (เช่น 256x256 พิกเซล)
- กำหนดขนาดของโลโก้ด้วยตัวแปร logoSize (เช่น 64x64 พิกเซล).
การสร้างคิวอาร์โค้ด
ใช้ไลบรารี QRCode.js เพื่อสร้างคิวอาร์โค้ดบน <canvas>การเพิ่มโลโก้
ใช้ฟังก์ชัน drawImage() เพื่อวาดโลโก้ที่อยู่ตรงกลางของคิวอาร์โค้ด โดยคำนวณตำแหน่งโลโก้ให้อยู่ที่จุดกึ่งกลางการโหลดรูปโลโก้
โหลดภาพโลโก้จาก URL ที่กำหนด และเมื่อรูปภาพโหลดเสร็จ ให้ทำการวาดลงใน <canvas>การเพิ่มพื้นหลังสีขาวรอบโลโก้
- ใช้ context.fillRect() เพื่อวาดสี่เหลี่ยมสีขาว (พื้นหลัง) ที่มีขนาดใหญ่กว่าโลโก้ โดยเพิ่มค่าขอบ logoPadding รอบโลโก้
- ตัวแปร logoPadding เป็นตัวกำหนดขนาดของขอบพื้นหลังสีขาวที่ล้อมรอบโลโก้
การวาดวงกลม- ใช้
context.arc(centerX, centerY, logoBackgroundRadius, 0, Math.PI * 2)
เพื่อวาดวงกลม โดย centerX
และ centerY
คือตำแหน่งศูนย์กลางของวงกลม และ logoBackgroundRadius
คือรัศมีของวงกลม (กำหนดโดยขนาดของโลโก้และการ padding ที่เพิ่มรอบๆ โลโก้)
- ใช้
context.arc(centerX, centerY, logoBackgroundRadius, 0, Math.PI * 2)
เพื่อวาดวงกลม โดยcenterX
และcenterY
คือตำแหน่งศูนย์กลางของวงกลม และlogoBackgroundRadius
คือรัศมีของวงกลม (กำหนดโดยขนาดของโลโก้และการ padding ที่เพิ่มรอบๆ โลโก้)
ตำแหน่งของพื้นหลังและโลโก้
- การวาดพื้นหลังสีขาวจะใช้ขนาดที่ใหญ่กว่าโลโก้เล็กน้อย และจัดให้อยู่ตรงกลางของคิวอาร์โค้ด
- หลังจากวาดพื้นหลังสีขาวแล้ว เราจะวาดโลโก้ลงบนพื้นหลังนี้อีกทีหนึ่ง
ข้อควรทราบ
- โลโก้ที่อยู่ในคิวอาร์โค้ดอาจทำให้บางส่วนของคิวอาร์โค้ดถูกบังได้ ดังนั้นควรใช้ระดับการแก้ไขข้อผิดพลาด (error correction level) ของคิวอาร์โค้ดที่สูงขึ้น เช่น QRCode.CorrectLevel.H เพื่อให้คิวอาร์โค้ดสามารถสแกนได้ถึงแม้จะมีโลโก้อยู่ตรงกลาง
- คุณสามารถปรับขนาดคิวอาร์โค้ดและโลโก้ตามความเหมาะสม และใช้ URL ของโลโก้ที่คุณต้องการนำมาใช้