feat(renderer): make logo optional
This commit is contained in:
@@ -7,7 +7,7 @@ export const LOGO_PADDING = 1;
|
||||
export const renderQRCodeToCanvas = async (
|
||||
canvas: HTMLCanvasElement | Canvas,
|
||||
content: string,
|
||||
logoUrl: string,
|
||||
logoUrl: string | undefined,
|
||||
) => {
|
||||
await QRCode.toCanvas(canvas, content, {
|
||||
errorCorrectionLevel: "H",
|
||||
@@ -15,31 +15,33 @@ export const renderQRCodeToCanvas = async (
|
||||
margin: 1,
|
||||
});
|
||||
|
||||
const qrCode = QRCode.create(content, { errorCorrectionLevel: "H" });
|
||||
const moduleCount = qrCode.modules.size + 2;
|
||||
if (logoUrl) {
|
||||
const qrCode = QRCode.create(content, { errorCorrectionLevel: "H" });
|
||||
const moduleCount = qrCode.modules.size + 2;
|
||||
|
||||
const logoImage = await loadImage(logoUrl);
|
||||
const logoImage = await loadImage(logoUrl);
|
||||
|
||||
const moduleSize = CANVAS_SIZE / moduleCount;
|
||||
const moduleSize = CANVAS_SIZE / moduleCount;
|
||||
|
||||
let logoModules = Math.floor(moduleCount * 0.3);
|
||||
if (logoModules % 2 !== moduleCount % 2) {
|
||||
logoModules += 1;
|
||||
let logoModules = Math.floor(moduleCount * 0.3);
|
||||
if (logoModules % 2 !== moduleCount % 2) {
|
||||
logoModules += 1;
|
||||
}
|
||||
|
||||
const backgroundSize = logoModules * moduleSize + 1;
|
||||
const backgroundPosition = (moduleSize * (moduleCount - logoModules)) / 2;
|
||||
|
||||
const logoSize = backgroundSize - LOGO_PADDING * 2;
|
||||
const logoPosition = backgroundPosition + LOGO_PADDING;
|
||||
|
||||
const ctx = canvas.getContext("2d") as CanvasRenderingContext2D;
|
||||
ctx.fillStyle = "white";
|
||||
ctx.fillRect(
|
||||
backgroundPosition,
|
||||
backgroundPosition,
|
||||
backgroundSize,
|
||||
backgroundSize,
|
||||
);
|
||||
ctx.drawImage(logoImage, logoPosition, logoPosition, logoSize, logoSize);
|
||||
}
|
||||
|
||||
const backgroundSize = logoModules * moduleSize + 1;
|
||||
const backgroundPosition = (moduleSize * (moduleCount - logoModules)) / 2;
|
||||
|
||||
const logoSize = backgroundSize - LOGO_PADDING * 2;
|
||||
const logoPosition = backgroundPosition + LOGO_PADDING;
|
||||
|
||||
const ctx = canvas.getContext("2d") as CanvasRenderingContext2D;
|
||||
ctx.fillStyle = "white";
|
||||
ctx.fillRect(
|
||||
backgroundPosition,
|
||||
backgroundPosition,
|
||||
backgroundSize,
|
||||
backgroundSize,
|
||||
);
|
||||
ctx.drawImage(logoImage, logoPosition, logoPosition, logoSize, logoSize);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user