| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- export default {
- name: 'painter',
- handle: (dp, option) => {
- dp.canvas.width = option.width;
- dp.canvas.height = option.height;
- dp.draw(async (ctx) => {
- for (let i = 0; i < option.contents.length; i++) {
- ctx.save();
- const drawInfo = option.contents[i];
- const { left = 0, top = 0 } = drawInfo;
- if (drawInfo.type === 'rect') {
- ctx.fillStyle = drawInfo.background || '#000000';
- ctx.fillRoundRect(left, top, drawInfo.width, drawInfo.height, drawInfo.radius || 0);
- }
- if (drawInfo.type === 'image') {
- await ctx.drawImageFit(drawInfo.src, {
- objectFit: drawInfo.objectFit || 'cover',
- intrinsicPosition: drawInfo.position || ['center', 'center'],
- specifiedPosition: [left, top],
- specifiedSize: {
- width: drawInfo.width,
- height: drawInfo.height
- },
- radius: drawInfo.radius
- });
- }
- if (drawInfo.type === 'text') {
- ctx.fillStyle = drawInfo.color || '#000000';
- ctx.font = `\
- ${drawInfo.fontStyle || 'normal'} \
- ${drawInfo.fontWeight || 'normal'} \
- ${drawInfo.fontSize || 30} \
- ${drawInfo.fontFamily || 'serial'}\
- `;
- ctx.fillText(drawInfo.content, left, top, drawInfo.width);
- }
- if (drawInfo.type === 'line-feed-text') {
- ctx.fillStyle = drawInfo.color || '#000000';
- ctx.font = `\
- ${drawInfo.fontStyle || 'normal'} \
- ${drawInfo.fontWeight || 'normal'} \
- ${drawInfo.fontSize || 30} \
- ${drawInfo.fontFamily || 'serial'}\
- `;
- ctx.fillWarpText({
- x: drawInfo.left,
- y: drawInfo.top,
- layer: drawInfo.lineClamp,
- lineHeight: drawInfo.lineHeight,
- maxWidth: drawInfo.width,
- text: drawInfo.content
- });
- }
- if (drawInfo.type === 'qr-code') {
- if (typeof ctx.drawQrCode !== 'function') {
- console.error('--- 当前未引入qr-code扩展, 将自动省略该二维码绘制 ---');
- return false;
- }
- ctx.drawQrCode({
- x: left,
- y: top,
- size: drawInfo.size,
- text: drawInfo.content,
- margin: drawInfo.margin || 5,
- backgroundColor: drawInfo.backgroundColor || '#ffffff',
- foregroundColor: drawInfo.foregroundColor || '#000000',
- });
- }
- ctx.restore();
- }
- });
- }
- };
|