生成海报图片是当前许多产品在移动端引流时常用的一种方式,特别是在微信等社交平台中。下面将介绍如何基于 canvas 实现海报图片生成,以及可能遇到的问题与解决方案。使用 canvas 生成图片的过程主要涉及将 canvas 对象转为图片格式。canvas 支持将内容转换为 base64 编码的图片,通过调用 `toDataURL` 方法实现。然而,对于跨域图片的处理较为复杂,浏览器通常会阻止直接获取外域图片的 toDataURL。为解决跨域问题,可以设置图片的 `crossOrigin` 属性为 `anonymous`。此设置会向服务器请求头中添加 `Origin` 信息,以请求服务器响应时包含 `Access-Control-Allow-Methods` 和 `Access-Control-Allow-Origin` 字段,从而允许浏览器访问跨域资源。若仍遇到问题,考虑在图片链接后附加时间戳,可促使 CDN 从服务器重新获取数据,避免缓存的影响。在移动端处理图片保存时,浏览器不支持使用 `download` 属性来自动保存图片,特别是微信等应用中。此时,用户可以通过长按图片来触发保存操作,尽管这种方式没有直接的 API 调用支持,但可提示用户执行此操作。然而,此方法的局限性在于用户的保存行为无法被精确控制。综上所述,当前实践的流程包括使用 canvas 绘制海报图片、转换为 base64 格式图片、在页面中渲染图片,并通过文案引导用户长按保存图片。这种方式在大多数情况下能够满足需求,但对用户行为的控制存在一定的限制。示例代码如下,展示如何将 canvas 绘制的图片转换为 base64 格式,并渲染到页面中,同时提供保存图片的提示信息。