async drawMainImage(ctx: CanvasContext, canvas: Canvas, width: number): Promise {
const padding = POSTER_CONSTANTS.PADDING;
const imageWidth = width - padding * 2;
const imageHeight = imageWidth * POSTER_CONSTANTS.IMAGE_HEIGHT_RATIO;
return new Promise((resolve, reject) => {
const img = canvas.createImage();
img.onload = () => {
const drawX = padding;
const drawY = padding;
const drawWidth = imageWidth;
const drawHeight = imageHeight;
ctx.save();
const radius = this.data.mainImageRadius || POSTER_CONSTANTS.MAIN_IMAGE_RADIUS;
this.drawImageRoundedRect(ctx, drawX, drawY, drawWidth, drawHeight, radius);
ctx.clip();
ctx.drawImage(img, drawX, drawY, drawWidth, drawHeight);
ctx.restore();
const mainImageBottom = drawY + drawHeight;
resolve(mainImageBottom);
};
img.onerror = () => reject(new Error('图片加载失败'));
img.src = this.data.imageUrl;
});
}
将 Base64 保存为本地文件是可以绘制成功的,但是将 canvas 用 wx.canvasToTempFilePath API 导出图片,用 showShareImageMenu 无法正常展示。