Skip to content

Commit 0d33c05

Browse files
committed
chore(ci): blog sync
1 parent 4225987 commit 0d33c05

File tree

1 file changed

+76
-76
lines changed

1 file changed

+76
-76
lines changed

data/blog/post-39.mdx

Lines changed: 76 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -6,82 +6,82 @@ author: chaseFunny:https://github.com/chaseFunny
66
tags: ["bug","经验","png 导出"]
77
---
88

9-
大家好,我是 luckySnail。不知不觉,已经做过很多次海报功能了,但是在新开发海报页面的时候还是会踩已经踩过的坑,海报能力是日常前端开发中经常会遇到的。例如:年度总结,活动分享,优惠券分享,推广分享等等。如果你也开发过海报功能,不知道你们是否也遇到了这些头疼的问题:
10-
11-
自定义文字字体
12-
13-
兼容 ios 端展示和下载
14-
15-
文章展示没有问题,但下载后内容掉下来?
16-
17-
在线图片展示不了?
18-
19-
下载和展示不一致?
20-
21-
移动端如何下载?微信内怎么保存海报?
22-
23-
如果你遇到上面的一种,那你不用再找了,我要一口气讲清楚这些坑的解决方案,最终给你一个兼容性良好的海报生成示例代码。本文章更多分享海报开发过程中遇到的问题,如果你想要全面了解将海报下载的方案,请看:https://www.luckysnail.cn/posts/post-20 。下面我们进入正题:
24-
25-
## 海报功能简介
26-
27-
海报功能通常是指根据用户的需求,动态生成一张图片,这张图片可以包含:
28-
29-
- 文字
30-
- 图片(可以是本地图片,也可以是远程图片)
31-
- 二维码等多种元素。
32-
33-
生成的海报可以用于分享、推广等场景。前端开发真实业务开发中,使用最多的应该就是通过 html2canvas 或者 dom-to-image 来生成海报了。
34-
35-
## 海报页面开发 & 下载
36-
37-
如果你打算开发一个海报页面,最好不要直接开发。在你开发之前你需要确认好这几件事情:
38-
39-
1、海报展示的平台:网页端;移动端;需要打印?
40-
41-
2 、海报的分辨率:确定海报所需的分辨率,以保证在不同设备上的清晰度。
42-
43-
3 、海报的尺寸:需要了解常用的海报尺寸,确认要开发的海报尺寸是多少
44-
45-
4 、海报展示哪些内容:文字;图片;二维码;如果是动态内容是否会溢出;是否使用了自定义字体
46-
47-
当我们确认好上面的内容后,通常这时候我们会拿到海报设计稿、动态内容规则和需要的相关装饰图片,我们接下来就可以确认技术方案 + 开发周期了。在页面开发完成后,我们会使用 html2canvas 或者 dom-to-image 来生成图片,这时候我们可能会遇到一些问题
48-
49-
### 1 、远程图片无法展示
50-
51-
如果这里不是因为跨域导致的,通常是因为图片缓存的问题。我们可以在原图片 url 后添加 `'?timestamp=' + Date.now()` 以确保每次请求时不会使用缓存的头像
52-
53-
### 2、自定义文字
54-
55-
如果我们海报中包含自定义字体
56-
57-
### 3 、特殊样式兼容性问题
58-
59-
在 html2canvas 中,某些先进的 css 属性会出现不兼容的情况,例如设置字体的渐变背景,如果使用到需要兼容
60-
61-
### 4 、ios 和 androad 兼容
62-
63-
ios 由于其默认的 safari 游览器,导致使用 dom-to-image 的时候会出现兼容性很差的情况,这时候,我们就需要使用 html2canvas 来兼容
64-
65-
## 示例代码
66-
67-
仓库地址:https://github.com/chaseFunny/react-poster
68-
69-
示例效果:
70-
71-
<img src="https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/image-20250105125626429.png" alt="image-20250105125626429" style="zoom:50%;" />
72-
73-
代码的核心逻辑:
74-
75-
如果是 web 端,就会正常渲染元素,然后使用 dom-to-image 来下载图片,如果是 safari 游览器,需要使用 html2canvas 来兼容图片失效的问题
76-
77-
如果说 h5,就需要对安卓和 ios 进行场景化的兼容,整体逻辑是将 dom 转为图片,利用手机的长按保存图片能力来保存图片
78-
79-
其实在复杂开发中应该还会遇到一些问题,例如:海报高度很高怎么截到想要的部分,大家可以看参考文章
80-
81-
## 参考
82-
83-
1. https://juejin.cn/post/7339671825646338057
84-
2. https://juejin.cn/post/7417227816162721804
9+
大家好,我是 luckySnail。不知不觉,已经做过很多次海报功能了,但是在新开发海报页面的时候还是会踩已经踩过的坑,海报能力是日常前端开发中经常会遇到的。例如:年度总结,活动分享,优惠券分享,推广分享等等。如果你也开发过海报功能,不知道你们是否也遇到了这些头疼的问题:
10+
11+
自定义文字字体
12+
13+
兼容 ios 端展示和下载
14+
15+
文章展示没有问题,但下载后内容掉下来?
16+
17+
在线图片展示不了?
18+
19+
下载和展示不一致?
20+
21+
移动端如何下载?微信内怎么保存海报?
22+
23+
如果你遇到上面的一种,那你不用再找了,我要一口气讲清楚这些坑的解决方案,最终给你一个兼容性良好的海报生成示例代码。本文章更多分享海报开发过程中遇到的问题,如果你想要全面了解将海报下载的方案,请看:https://www.luckysnail.cn/posts/post-20 。下面我们进入正题:
24+
25+
## 海报功能简介
26+
27+
海报功能通常是指根据用户的需求,动态生成一张图片,这张图片可以包含:
28+
29+
- 文字
30+
- 图片(可以是本地图片,也可以是远程图片)
31+
- 二维码等多种元素。
32+
33+
生成的海报可以用于分享、推广等场景。前端开发真实业务开发中,使用最多的应该就是通过 html2canvas 或者 dom-to-image 来生成海报了。
34+
35+
## 海报页面开发 & 下载
36+
37+
如果你打算开发一个海报页面,最好不要直接开发。在你开发之前你需要确认好这几件事情:
38+
39+
1、海报展示的平台:网页端;移动端;需要打印?
40+
41+
2 、海报的分辨率:确定海报所需的分辨率,以保证在不同设备上的清晰度。
42+
43+
3 、海报的尺寸:需要了解常用的海报尺寸,确认要开发的海报尺寸是多少
44+
45+
4 、海报展示哪些内容:文字;图片;二维码;如果是动态内容是否会溢出;是否使用了自定义字体
46+
47+
当我们确认好上面的内容后,通常这时候我们会拿到海报设计稿、动态内容规则和需要的相关装饰图片,我们接下来就可以确认技术方案 + 开发周期了。在页面开发完成后,我们会使用 html2canvas 或者 dom-to-image 来生成图片,这时候我们可能会遇到一些问题
48+
49+
### 1 、远程图片无法展示
50+
51+
如果这里不是因为跨域导致的,通常是因为图片缓存的问题。我们可以在原图片 url 后添加 `'?timestamp=' + Date.now()` 以确保每次请求时不会使用缓存的头像
52+
53+
### 2、自定义文字
54+
55+
如果我们海报中包含自定义字体
56+
57+
### 3 、特殊样式兼容性问题
58+
59+
在 html2canvas 中,某些先进的 css 属性会出现不兼容的情况,例如设置字体的渐变背景,如果使用到需要兼容
60+
61+
### 4 、ios 和 androad 兼容
62+
63+
ios 由于其默认的 safari 游览器,导致使用 dom-to-image 的时候会出现兼容性很差的情况,这时候,我们就需要使用 html2canvas 来兼容
64+
65+
## 示例代码
66+
67+
仓库地址:https://github.com/chaseFunny/react-poster
68+
69+
示例效果:
70+
71+
<img src="https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/image-20250105125626429.png" alt="image-20250105125626429" />
72+
73+
代码的核心逻辑:
74+
75+
如果是 web 端,就会正常渲染元素,然后使用 dom-to-image 来下载图片,如果是 safari 游览器,需要使用 html2canvas 来兼容图片失效的问题
76+
77+
如果说 h5,就需要对安卓和 ios 进行场景化的兼容,整体逻辑是将 dom 转为图片,利用手机的长按保存图片能力来保存图片
78+
79+
其实在复杂开发中应该还会遇到一些问题,例如:海报高度很高怎么截到想要的部分,大家可以看参考文章
80+
81+
## 参考
82+
83+
1. https://juejin.cn/post/7339671825646338057
84+
2. https://juejin.cn/post/7417227816162721804
8585
3. https://juejin.cn/post/6844904165060116487
8686

8787
---

0 commit comments

Comments
 (0)