1var drawPayCode = function(qrcode, canvas, margin, logo, consumer = false) { 2 var ctx = canvas.getContext('2d'); 3 var width = ctx.canvas.width; 4 var cellCount = qrcode.getModuleCount(); 5 var cellRadius = ((width - (margin * 2)) / cellCount) / 2; 6 var offset = cellRadius + margin 7 8 var iconPercent = 32/260; 9 var iconClipPercent = 35/260; 10 11 var logoPercent = 67/260; 12 var logoClipPercent = 72/260; 13 14 // white background 15 ctx.fillStyle = '#ffffff'; 16 ctx.fillRect(0, 0, width, width); 17 18 if (consumer) { 19 // PayMe red 20 ctx.fillStyle = '#db0011'; 21 } 22 else { 23 // PM4B red 24 ctx.fillStyle = '#c92a23'; 25 } 26 27 // top left eye 28 drawEye(ctx, width, margin, cellRadius, 0, 0, offset); 29 // top right eye 30 drawEye(ctx, width, margin, cellRadius, 2*(cellCount - 7)*cellRadius, 0, offset); 31 // bottom left eye 32 drawEye(ctx, width, margin, cellRadius, 0, 2*(cellCount - 7)*cellRadius, offset); 33 34 var iconWidth = ((width - 2*margin) * iconPercent) 35 var logoWidth = ((width - 2*margin) * logoPercent); 36 37 var iconClip = width - cellRadius - margin - ((width - 2*margin) * iconClipPercent) 38 var logoLeftClip = (width / 2) - (((width - 2*margin) * logoClipPercent) / 2); 39 var logoRightClip = (width / 2) + (((width - 2*margin) * logoClipPercent) / 2); 40 41 // PayMe icon in bottom right 42 drawIcon(ctx, iconWidth, width, margin, consumer); 43 44 // business logo in the middle 45 drawLogo(ctx, logo, logoWidth, width, margin, consumer); 46 47 for (var r = 0; r < cellCount; r += 1) { 48 for (var c = 0; c < cellCount; c += 1) { 49 var x = c*cellRadius*2 + offset; 50 var y = r*cellRadius*2 + offset; 51 52 if (r < 7 && (c < 7 || c > cellCount - 8) || r > cellCount - 8 && c < 7) { 53 // don't draw cells over the "eyes" 54 continue; 55 } 56 else if (x >= iconClip && y >= iconClip) { 57 // don't draw cells over the PM4B icon 58 continue; 59 } 60 else if (x >= logoLeftClip && x < logoRightClip && 61 y >= logoLeftClip && y < logoRightClip ) { 62 // don't draw cells over the logo 63 continue; 64 } 65 66 if (qrcode.isDark(r, c)) { 67 ctx.beginPath(); 68 ctx.arc(x, y, cellRadius, 0, 2*Math.PI); 69 ctx.fill(); 70 } 71 } 72 } 73} 74 75var drawEye = function(ctx, width, margin, cellRadius, xOffset, yOffset, offset) { 76 // outer edge 77 ctx.beginPath(); 78 ctx.moveTo(xOffset + 11*cellRadius + margin, yOffset + 0*cellRadius + margin); 79 ctx.arcTo( 80 xOffset + 14*cellRadius + margin, yOffset + 0*cellRadius + margin, 81 xOffset + 14*cellRadius + margin, yOffset + 3*cellRadius + margin, 82 3*cellRadius); 83 84 ctx.arcTo( 85 xOffset + 14*cellRadius + margin, yOffset + 14*cellRadius + margin, 86 xOffset + 12*cellRadius + margin, yOffset + 14*cellRadius + margin, 87 3*cellRadius); 88 89 ctx.arcTo( 90 xOffset + 0*cellRadius + margin, yOffset + 14*cellRadius + margin, 91 xOffset + 0*cellRadius + margin, yOffset + 11*cellRadius + margin, 92 3*cellRadius); 93 94 ctx.arcTo( 95 xOffset + 0*cellRadius + margin, yOffset + 0*cellRadius + margin, 96 xOffset + 3*cellRadius + margin, yOffset + 0*cellRadius + margin, 97 3*cellRadius); 98 ctx.lineTo(xOffset + 11*cellRadius + margin, yOffset + 0*cellRadius + margin); 99 100 // inner edge 101 ctx.moveTo(xOffset + 4*cellRadius + margin, yOffset + 2*cellRadius + margin); 102 ctx.arcTo( 103 xOffset + 2*cellRadius + margin, yOffset + 2*cellRadius + margin, 104 xOffset + 2*cellRadius + margin, yOffset + 4*cellRadius + margin, 105 2*cellRadius); 106 107 ctx.arcTo( 108 xOffset + 2*cellRadius + margin, yOffset + 12*cellRadius + margin, 109 xOffset + 4*cellRadius + margin, yOffset + 12*cellRadius + margin, 110 2*cellRadius); 111 112 ctx.arcTo( 113 xOffset + 12*cellRadius + margin, yOffset + 12*cellRadius + margin, 114 xOffset + 12*cellRadius + margin, yOffset + 10*cellRadius + margin, 115 2*cellRadius); 116 117 ctx.arcTo( 118 xOffset + 12*cellRadius + margin, yOffset + 2*cellRadius + margin, 119 xOffset + 10*cellRadius + margin, yOffset + 2*cellRadius + margin, 120 2*cellRadius); 121 ctx.lineTo(xOffset + 4*cellRadius + margin, yOffset + 2*cellRadius + margin); 122 123 ctx.closePath(); 124 ctx.fill(); 125 126 // central rect 127 ctx.beginPath(); 128 ctx.moveTo(xOffset + 8*cellRadius + margin, yOffset + 4*cellRadius + margin); 129 ctx.arcTo( 130 xOffset + 10*cellRadius + margin, yOffset + 4*cellRadius + margin, 131 xOffset + 10*cellRadius + margin, yOffset + 6*cellRadius + margin, 132 cellRadius); 133 134 ctx.arcTo( 135 xOffset + 10*cellRadius + margin, yOffset + 10*cellRadius + margin, 136 xOffset + 8*cellRadius + margin, yOffset + 10*cellRadius + margin, 137 cellRadius); 138 139 ctx.arcTo( 140 xOffset + 4*cellRadius + margin, yOffset + 10*cellRadius + margin, 141 xOffset + 4*cellRadius + margin, yOffset + 8*cellRadius + margin, 142 cellRadius); 143 144 ctx.arcTo( 145 xOffset + 4*cellRadius + margin, yOffset + 4*cellRadius + margin, 146 xOffset + 6*cellRadius + margin, yOffset + 4*cellRadius + margin, 147 cellRadius); 148 ctx.lineTo(xOffset + 8*cellRadius + margin, yOffset + 4*cellRadius + margin); 149 ctx.closePath(); 150 ctx.fill(); 151} 152 153var drawIcon = function(ctx, iconWidth, width, margin, consumer) { 154 var icon = new Image(); 155 156 var xOffset = width - margin - iconWidth; 157 var yOffset = width - margin - iconWidth; 158 159 // Apple design guidelines state that corner radius is 80px for a 512px icon 160 var cornerRadius = iconWidth * 80/512; 161 var edgeLength = iconWidth - cornerRadius; 162 163 icon.onload = function(){ 164 ctx.save(); 165 ctx.beginPath(); 166 167 ctx.moveTo(xOffset + edgeLength, yOffset); 168 ctx.arcTo( 169 xOffset + edgeLength + cornerRadius, yOffset, 170 xOffset + edgeLength + cornerRadius, yOffset + cornerRadius, 171 cornerRadius); 172 173 ctx.arcTo( 174 xOffset + edgeLength + cornerRadius, yOffset + edgeLength + cornerRadius, 175 xOffset + edgeLength, yOffset + edgeLength + cornerRadius, 176 cornerRadius); 177 178 ctx.arcTo( 179 xOffset, yOffset + edgeLength + cornerRadius, 180 xOffset, yOffset + edgeLength, 181 cornerRadius); 182 183 ctx.arcTo( 184 xOffset, yOffset, 185 xOffset + cornerRadius, yOffset, 186 cornerRadius); 187 ctx.lineTo(xOffset + edgeLength, yOffset); 188 ctx.closePath(); 189 ctx.clip(); 190 ctx.drawImage(icon, xOffset, yOffset, iconWidth, iconWidth); 191 if (!consumer) { 192 ctx.strokeStyle = "#767676"; 193 ctx.lineWidth = 0.5; 194 ctx.stroke(); 195 } 196
197 ctx.restore(); 198 }; 199 if (consumer) { 200 icon.src = "data:image/png;base64,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" 201 } 202 else {//å³ä¸è§iocn徿 203 icon.src = 'data:image/png;base64,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'; 204 } 205} 206 207var drawLogo = function(ctx, img, logoWidth, width, margin, consumer) { 208 console.log(img,'img') 209 ctx.save(); 210 ctx.beginPath();//线æ¡å 211 ctx.arc(width / 2, width / 2, logoWidth / 2, 0, 2*Math.PI); 212 ctx.closePath(); 213 ctx.clip(); 214 //ä¸é´å¾ç 215 ctx.drawImage(img, (width - logoWidth) / 2, (width - logoWidth) / 2, logoWidth, logoWidth); 216 217 if (!consumer) { 218 // match PM4B app 219 ctx.strokeStyle = "#e9e9e9"; 220 ctx.lineWidth = width * 0.015; 221 ctx.stroke(); 222 } 223 224 ctx.restore(); 225}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.