@jjlmoya/utils-converters 1.25.0 → 1.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/src/category/i18n/de.ts +1 -1
- package/src/category/i18n/en.ts +1 -1
- package/src/category/i18n/fr.ts +1 -1
- package/src/category/i18n/id.ts +1 -1
- package/src/category/i18n/it.ts +1 -1
- package/src/category/i18n/nl.ts +1 -1
- package/src/category/i18n/pl.ts +1 -1
- package/src/category/i18n/pt.ts +1 -1
- package/src/category/i18n/sv.ts +1 -1
- package/src/tests/bibliography_wellformed_export.test.ts +46 -0
- package/src/tests/category_seo_quality.test.ts +74 -0
- package/src/tests/faq_count.test.ts +1 -1
- package/src/tests/no_h1_in_components.test.ts +1 -1
- package/src/tests/seo_parity.test.ts +2 -2
- package/src/tests/seo_wellformed_export.test.ts +65 -0
- package/src/tests/tool_validation.test.ts +15 -15
- package/src/tool/avifAJpg/i18n/en.ts +164 -164
- package/src/tool/avifAJpg/i18n/es.ts +164 -164
- package/src/tool/avifAJpg/i18n/fr.ts +164 -164
- package/src/tool/avifAJpg/i18n/ja.ts +166 -166
- package/src/tool/avifAJpg/i18n/ko.ts +166 -166
- package/src/tool/avifAJpg/i18n/zh.ts +166 -166
- package/src/tool/avifAJpg/seo.astro +15 -15
- package/src/tool/avifAPng/i18n/en.ts +164 -164
- package/src/tool/avifAPng/i18n/es.ts +164 -164
- package/src/tool/avifAPng/i18n/fr.ts +164 -164
- package/src/tool/avifAPng/i18n/ja.ts +166 -166
- package/src/tool/avifAPng/i18n/ko.ts +166 -166
- package/src/tool/avifAPng/i18n/zh.ts +166 -166
- package/src/tool/avifAPng/seo.astro +15 -15
- package/src/tool/avifAWebp/i18n/en.ts +164 -164
- package/src/tool/avifAWebp/i18n/es.ts +164 -164
- package/src/tool/avifAWebp/i18n/fr.ts +164 -164
- package/src/tool/avifAWebp/i18n/ja.ts +166 -166
- package/src/tool/avifAWebp/i18n/ko.ts +166 -166
- package/src/tool/avifAWebp/i18n/zh.ts +166 -166
- package/src/tool/avifAWebp/seo.astro +15 -15
- package/src/tool/bmpAJpg/i18n/en.ts +164 -164
- package/src/tool/bmpAJpg/i18n/es.ts +164 -164
- package/src/tool/bmpAJpg/i18n/fr.ts +164 -164
- package/src/tool/bmpAJpg/i18n/ja.ts +166 -166
- package/src/tool/bmpAJpg/i18n/ko.ts +166 -166
- package/src/tool/bmpAJpg/i18n/zh.ts +166 -166
- package/src/tool/bmpAJpg/seo.astro +15 -15
- package/src/tool/bmpAPng/i18n/en.ts +164 -164
- package/src/tool/bmpAPng/i18n/es.ts +164 -164
- package/src/tool/bmpAPng/i18n/fr.ts +164 -164
- package/src/tool/bmpAPng/i18n/ja.ts +165 -165
- package/src/tool/bmpAPng/i18n/ko.ts +165 -165
- package/src/tool/bmpAPng/i18n/zh.ts +165 -165
- package/src/tool/bmpAPng/seo.astro +15 -15
- package/src/tool/bmpAWebp/i18n/en.ts +164 -164
- package/src/tool/bmpAWebp/i18n/es.ts +164 -164
- package/src/tool/bmpAWebp/i18n/fr.ts +164 -164
- package/src/tool/bmpAWebp/i18n/ja.ts +166 -166
- package/src/tool/bmpAWebp/i18n/ko.ts +166 -166
- package/src/tool/bmpAWebp/i18n/zh.ts +166 -166
- package/src/tool/bmpAWebp/seo.astro +15 -15
- package/src/tool/gifAJpg/i18n/en.ts +164 -164
- package/src/tool/gifAJpg/i18n/es.ts +164 -164
- package/src/tool/gifAJpg/i18n/fr.ts +164 -164
- package/src/tool/gifAJpg/i18n/ja.ts +166 -166
- package/src/tool/gifAJpg/i18n/ko.ts +166 -166
- package/src/tool/gifAJpg/i18n/zh.ts +166 -166
- package/src/tool/gifAJpg/seo.astro +15 -15
- package/src/tool/gifAPng/i18n/en.ts +164 -164
- package/src/tool/gifAPng/i18n/es.ts +164 -164
- package/src/tool/gifAPng/i18n/fr.ts +164 -164
- package/src/tool/gifAPng/i18n/ja.ts +166 -166
- package/src/tool/gifAPng/i18n/ko.ts +166 -166
- package/src/tool/gifAPng/i18n/zh.ts +166 -166
- package/src/tool/gifAPng/seo.astro +15 -15
- package/src/tool/gifAWebp/i18n/en.ts +164 -164
- package/src/tool/gifAWebp/i18n/es.ts +164 -164
- package/src/tool/gifAWebp/i18n/fr.ts +164 -164
- package/src/tool/gifAWebp/i18n/ja.ts +166 -166
- package/src/tool/gifAWebp/i18n/ko.ts +166 -166
- package/src/tool/gifAWebp/i18n/zh.ts +166 -166
- package/src/tool/gifAWebp/seo.astro +15 -15
- package/src/tool/imagenBase64/i18n/en.ts +154 -154
- package/src/tool/imagenBase64/i18n/es.ts +154 -154
- package/src/tool/imagenBase64/i18n/fr.ts +154 -154
- package/src/tool/imagenBase64/seo.astro +15 -15
- package/src/tool/jpgAIco/seo.astro +15 -15
- package/src/tool/jpgAPng/i18n/en.ts +164 -164
- package/src/tool/jpgAPng/i18n/es.ts +164 -164
- package/src/tool/jpgAPng/i18n/fr.ts +164 -164
- package/src/tool/jpgAPng/i18n/ja.ts +166 -166
- package/src/tool/jpgAPng/i18n/ko.ts +166 -166
- package/src/tool/jpgAPng/i18n/zh.ts +166 -166
- package/src/tool/jpgAPng/seo.astro +15 -15
- package/src/tool/jpgAWebp/i18n/en.ts +164 -164
- package/src/tool/jpgAWebp/i18n/es.ts +164 -164
- package/src/tool/jpgAWebp/i18n/fr.ts +164 -164
- package/src/tool/jpgAWebp/seo.astro +15 -15
- package/src/tool/pngAIco/seo.astro +15 -15
- package/src/tool/pngAJpg/i18n/de.ts +21 -21
- package/src/tool/pngAJpg/i18n/es.ts +177 -177
- package/src/tool/pngAJpg/i18n/fr.ts +137 -137
- package/src/tool/pngAJpg/i18n/id.ts +89 -89
- package/src/tool/pngAJpg/i18n/it.ts +89 -89
- package/src/tool/pngAJpg/i18n/ko.ts +177 -177
- package/src/tool/pngAJpg/i18n/nl.ts +20 -20
- package/src/tool/pngAJpg/i18n/pl.ts +89 -89
- package/src/tool/pngAJpg/i18n/pt.ts +89 -89
- package/src/tool/pngAJpg/i18n/ru.ts +177 -177
- package/src/tool/pngAJpg/i18n/sv.ts +89 -89
- package/src/tool/pngAJpg/i18n/tr.ts +89 -89
- package/src/tool/pngAJpg/seo.astro +15 -15
- package/src/tool/pngAWebp/i18n/en.ts +164 -164
- package/src/tool/pngAWebp/i18n/es.ts +164 -164
- package/src/tool/pngAWebp/i18n/fr.ts +164 -164
- package/src/tool/pngAWebp/seo.astro +15 -15
- package/src/tool/svgAJpg/i18n/fr.ts +164 -164
- package/src/tool/svgAJpg/seo.astro +15 -15
- package/src/tool/svgAPng/i18n/fr.ts +164 -164
- package/src/tool/svgAPng/seo.astro +15 -15
- package/src/tool/webpAIco/seo.astro +15 -15
- package/src/tool/webpAJpg/seo.astro +15 -15
- package/src/tool/webpAPng/bibliography.ts +13 -13
- package/src/tool/webpAPng/i18n/de.ts +166 -166
- package/src/tool/webpAPng/i18n/es.ts +171 -171
- package/src/tool/webpAPng/i18n/fr.ts +166 -166
- package/src/tool/webpAPng/i18n/id.ts +166 -166
- package/src/tool/webpAPng/i18n/it.ts +166 -166
- package/src/tool/webpAPng/i18n/nl.ts +166 -166
- package/src/tool/webpAPng/i18n/pl.ts +166 -166
- package/src/tool/webpAPng/i18n/pt.ts +166 -166
- package/src/tool/webpAPng/i18n/ru.ts +166 -166
- package/src/tool/webpAPng/i18n/sv.ts +166 -166
- package/src/tool/webpAPng/i18n/tr.ts +167 -167
- package/src/tool/webpAPng/seo.astro +15 -15
|
@@ -1,168 +1,168 @@
|
|
|
1
1
|
import { bibliography } from '../bibliography';
|
|
2
|
-
import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
|
|
3
|
-
import { generateSchemas } from '../../../shared/logic/schemas';
|
|
4
|
-
import type { GifAWebpLocaleContent } from '../index';
|
|
5
|
-
|
|
6
|
-
const slug = 'gif-to-webp-converter';
|
|
7
|
-
const title = '在线将 GIF 转换为静态 WebP';
|
|
8
|
-
const description =
|
|
9
|
-
'将动态 GIF 转换为静态 WebP。保留透明度。无需服务器。在浏览器中本地处理。免费。';
|
|
10
|
-
|
|
11
|
-
const ui: ImageConverterUI = {
|
|
12
|
-
dragText: '拖入 GIF 文件...',
|
|
13
|
-
convertText: '立即将其转换为 WebP',
|
|
14
|
-
selectFiles: '选择文件',
|
|
15
|
-
processedFiles: '已处理文件',
|
|
16
|
-
downloadAll: '下载全部 (.zip)',
|
|
2
|
+
import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
|
|
3
|
+
import { generateSchemas } from '../../../shared/logic/schemas';
|
|
4
|
+
import type { GifAWebpLocaleContent } from '../index';
|
|
5
|
+
|
|
6
|
+
const slug = 'gif-to-webp-converter';
|
|
7
|
+
const title = '在线将 GIF 转换为静态 WebP';
|
|
8
|
+
const description =
|
|
9
|
+
'将动态 GIF 转换为静态 WebP。保留透明度。无需服务器。在浏览器中本地处理。免费。';
|
|
10
|
+
|
|
11
|
+
const ui: ImageConverterUI = {
|
|
12
|
+
dragText: '拖入 GIF 文件...',
|
|
13
|
+
convertText: '立即将其转换为 WebP',
|
|
14
|
+
selectFiles: '选择文件',
|
|
15
|
+
processedFiles: '已处理文件',
|
|
16
|
+
downloadAll: '下载全部 (.zip)',
|
|
17
17
|
pending: '等待中',
|
|
18
|
-
bibliographyTitle: '参考文献',
|
|
19
|
-
faqTitle: '常见问题',
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
const faq: GifAWebpLocaleContent['faq'] = [
|
|
23
|
-
{
|
|
24
|
-
question: '为什么要将动态文件切换为现代静态 WebP 格式?',
|
|
25
|
-
answer:
|
|
26
|
-
'WebP 是 Google 的压缩标准;它非常轻量且能干净地保留透明度。从 GIF 切换到 WebP 可以消除沉重的动画,并获得巨大的网页速度提升。',
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
question: '原始头像会保持透明吗?',
|
|
30
|
-
answer:
|
|
31
|
-
'是的,与 JPEG 不同,WebP 容器遵循复杂的 Alpha 通道。所有的轮廓都将像原生一样保持完美。',
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
question: '文件会上传到哪里?',
|
|
35
|
-
answer:
|
|
36
|
-
'没有上传。处理完全由您 PC 上的浏览器 Javascript 执行,零远程发送。',
|
|
37
|
-
},
|
|
38
|
-
];
|
|
39
|
-
|
|
40
|
-
const howTo: GifAWebpLocaleContent['howTo'] = [
|
|
41
|
-
{
|
|
42
|
-
name: '启动动态文件处理',
|
|
43
|
-
text: '在没有远程连接的情况下,将数十个表情包移动并放入划定区域。',
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
name: '见证伟大的隐形变化',
|
|
47
|
-
text: '当本地 Canvas 解码器生成输出时,观察每毫秒变化的进度指示器。',
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
name: '保存您干净的结果集',
|
|
51
|
-
text: '单独获取提取的文件,或按\"下载 Zip\"打包所有内容。',
|
|
52
|
-
},
|
|
53
|
-
];
|
|
54
|
-
|
|
55
|
-
const seo: GifAWebpLocaleContent['seo'] = [
|
|
56
|
-
{
|
|
57
|
-
type: 'title',
|
|
58
|
-
text: 'GIF 转 WebP 转换器:沉重动画的现代替代方案',
|
|
59
|
-
level: 2,
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
type: 'paragraph',
|
|
63
|
-
html: '动态 GIF 是现代网络内容的恐龙:它们消耗不成比例的带宽,降低任何页面的 PageSpeed,并且在成千上万个网站的总重量中占有相当大的比例。一个典型的 5 MB 动态 GIF 在保持相同视觉质量的情况下可以变成 1 MB 以下的 WebP 动画。WebP 是 Google 专门为在网络上取代 GIF 而设计的现代继任者。',
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
type: 'title',
|
|
67
|
-
text: 'GIF vs WebP:网络过去与现状之间的鸿沟',
|
|
68
|
-
level: 3,
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
type: 'paragraph',
|
|
72
|
-
html: 'GIF 是一种 1987 年的格式,最初并非为动画设计-该功能是后来作为一种\"黑客\"手段加入的。它的 256 色调色板、低效率的压缩以及无法处理音频,使其成为一种过时的格式。WebP 由 Google 在 2010 年开发,提供卓越的有损和无损压缩、原生动画支持以及完整的 Alpha 通道。',
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
type: 'paragraph',
|
|
76
|
-
html: '对于 Web 开发人员来说,在页面上用 WebP 取代 GIF 可能意味着 Google PageSpeed 分数提高 10 到 30 分。更轻的页面重量意味着更好的 Core Web Vitals、更好的 SEO 排名以及更低的服务器带宽成本。这不仅仅是美学上的提升-它是一项技术架构决策。',
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
type: 'title',
|
|
80
|
-
text: '架构比较:本地 vs 云端',
|
|
81
|
-
level: 3,
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
type: 'comparative',
|
|
85
|
-
items: [
|
|
86
|
-
{
|
|
87
|
-
title: '云端转换器',
|
|
88
|
-
description: '在远程服务器上处理您的 GIF 的平台。',
|
|
89
|
-
icon: 'mdi:cloud-upload',
|
|
90
|
-
pointIcon: 'mdi:close-circle-outline',
|
|
91
|
-
points: [
|
|
92
|
-
'您的动画通过互联网传输到第三方服务器',
|
|
93
|
-
'由于上传和下载时的网络延迟造成的等待时间',
|
|
94
|
-
'大小限制(大的 GIF 经常被拒绝)',
|
|
95
|
-
'文件保留和分析的风险',
|
|
96
|
-
],
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
title: '我们的本地架构',
|
|
100
|
-
description: '使用 Vanilla JS 技术直接在您的硬件上进行处理。',
|
|
101
|
-
icon: 'mdi:laptop-mac',
|
|
102
|
-
highlight: true,
|
|
103
|
-
points: [
|
|
104
|
-
'GIF 永远不会离开您的设备',
|
|
105
|
-
'即时转换,无需网络等待',
|
|
106
|
-
'无大小限制:处理任何重量的 GIF',
|
|
107
|
-
'绝对隐私:0 字节向外发送',
|
|
108
|
-
],
|
|
109
|
-
},
|
|
110
|
-
],
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
type: 'title',
|
|
114
|
-
text: '本地 GIF 转 WebP 转换的工作原理',
|
|
115
|
-
level: 3,
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
type: 'paragraph',
|
|
119
|
-
html: '本地转换使用 HTML5 Canvas API。GIF 被加载为原生的浏览器 Image 元素。通过将其绘制到画布上,图形引擎会捕捉包含所有透明度信息的第一帧动画。<code>toDataURL(\'image/webp\')</code> 方法直接在 RAM 中将该帧导出为 WebP。',
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
type: 'paragraph',
|
|
123
|
-
html: 'WebP 支持完整的 Alpha 通道,因此 GIF 的透明度保留在生成的 WebP 中,无需添加背景。WebP 压缩算法的效率明显高于 GIF 或 PNG,这解释了最终输出文件大小的大幅降低。',
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
type: 'tip',
|
|
127
|
-
title: '保证网页速度提升',
|
|
128
|
-
html: '一个 5 MB 的动态 GIF 可以变成 1 MB 以下的 WebP。如果您的网站页面上有 GIF,用 WebP 替换它们可以立即改善您的 Largest Contentful Paint (LCP) 和 Total Blocking Time (TBT),直接影响 SEO 排名。',
|
|
129
|
-
},
|
|
130
|
-
{
|
|
131
|
-
type: 'title',
|
|
132
|
-
text: '生成的 WebP 的使用案例和兼容性',
|
|
133
|
-
level: 3,
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
type: 'list',
|
|
137
|
-
icon: 'mdi:check-circle',
|
|
138
|
-
items: [
|
|
139
|
-
'替换网页上的 GIF 以提高 PageSpeed 分数。',
|
|
140
|
-
'为 Discord、Slack 和现代平台优化的头像和贴纸。',
|
|
141
|
-
'用于数字营销活动的横幅和视觉效果。',
|
|
142
|
-
'渐进式 Web 应用程序 (PWA) 中的动画。',
|
|
143
|
-
'兼容 Chrome、Edge、Firefox、Safari 14+ 以及所有现代浏览器。',
|
|
144
|
-
],
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
type: 'title',
|
|
148
|
-
text: '结论:将您的 GIF 迁移到 21 世纪',
|
|
149
|
-
level: 3,
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
type: 'paragraph',
|
|
153
|
-
html: '您网站上的每一个 GIF 都是一次错失的优化机会。我们的工具直接在您的浏览器中即时、私密且无限制地将 GIF 转换为 WebP。结果:文件缩小高达 5 倍、完美的透明度,并与所有现代浏览器兼容。',
|
|
154
|
-
},
|
|
155
|
-
];
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
export const content: GifAWebpLocaleContent = {
|
|
159
|
-
slug,
|
|
160
|
-
title,
|
|
161
|
-
description,
|
|
162
|
-
ui,
|
|
163
|
-
seo,
|
|
164
|
-
faq,
|
|
165
|
-
bibliography,
|
|
166
|
-
howTo,
|
|
167
|
-
schemas: generateSchemas({ title, description, inLanguage: 'zh', faq, howTo }),
|
|
168
|
-
};
|
|
18
|
+
bibliographyTitle: '参考文献',
|
|
19
|
+
faqTitle: '常见问题',
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const faq: GifAWebpLocaleContent['faq'] = [
|
|
23
|
+
{
|
|
24
|
+
question: '为什么要将动态文件切换为现代静态 WebP 格式?',
|
|
25
|
+
answer:
|
|
26
|
+
'WebP 是 Google 的压缩标准;它非常轻量且能干净地保留透明度。从 GIF 切换到 WebP 可以消除沉重的动画,并获得巨大的网页速度提升。',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
question: '原始头像会保持透明吗?',
|
|
30
|
+
answer:
|
|
31
|
+
'是的,与 JPEG 不同,WebP 容器遵循复杂的 Alpha 通道。所有的轮廓都将像原生一样保持完美。',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
question: '文件会上传到哪里?',
|
|
35
|
+
answer:
|
|
36
|
+
'没有上传。处理完全由您 PC 上的浏览器 Javascript 执行,零远程发送。',
|
|
37
|
+
},
|
|
38
|
+
];
|
|
39
|
+
|
|
40
|
+
const howTo: GifAWebpLocaleContent['howTo'] = [
|
|
41
|
+
{
|
|
42
|
+
name: '启动动态文件处理',
|
|
43
|
+
text: '在没有远程连接的情况下,将数十个表情包移动并放入划定区域。',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: '见证伟大的隐形变化',
|
|
47
|
+
text: '当本地 Canvas 解码器生成输出时,观察每毫秒变化的进度指示器。',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: '保存您干净的结果集',
|
|
51
|
+
text: '单独获取提取的文件,或按\"下载 Zip\"打包所有内容。',
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
|
|
55
|
+
const seo: GifAWebpLocaleContent['seo'] = [
|
|
56
|
+
{
|
|
57
|
+
type: 'title',
|
|
58
|
+
text: 'GIF 转 WebP 转换器:沉重动画的现代替代方案',
|
|
59
|
+
level: 2,
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
type: 'paragraph',
|
|
63
|
+
html: '动态 GIF 是现代网络内容的恐龙:它们消耗不成比例的带宽,降低任何页面的 PageSpeed,并且在成千上万个网站的总重量中占有相当大的比例。一个典型的 5 MB 动态 GIF 在保持相同视觉质量的情况下可以变成 1 MB 以下的 WebP 动画。WebP 是 Google 专门为在网络上取代 GIF 而设计的现代继任者。',
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
type: 'title',
|
|
67
|
+
text: 'GIF vs WebP:网络过去与现状之间的鸿沟',
|
|
68
|
+
level: 3,
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
type: 'paragraph',
|
|
72
|
+
html: 'GIF 是一种 1987 年的格式,最初并非为动画设计-该功能是后来作为一种\"黑客\"手段加入的。它的 256 色调色板、低效率的压缩以及无法处理音频,使其成为一种过时的格式。WebP 由 Google 在 2010 年开发,提供卓越的有损和无损压缩、原生动画支持以及完整的 Alpha 通道。',
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
type: 'paragraph',
|
|
76
|
+
html: '对于 Web 开发人员来说,在页面上用 WebP 取代 GIF 可能意味着 Google PageSpeed 分数提高 10 到 30 分。更轻的页面重量意味着更好的 Core Web Vitals、更好的 SEO 排名以及更低的服务器带宽成本。这不仅仅是美学上的提升-它是一项技术架构决策。',
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
type: 'title',
|
|
80
|
+
text: '架构比较:本地 vs 云端',
|
|
81
|
+
level: 3,
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
type: 'comparative',
|
|
85
|
+
items: [
|
|
86
|
+
{
|
|
87
|
+
title: '云端转换器',
|
|
88
|
+
description: '在远程服务器上处理您的 GIF 的平台。',
|
|
89
|
+
icon: 'mdi:cloud-upload',
|
|
90
|
+
pointIcon: 'mdi:close-circle-outline',
|
|
91
|
+
points: [
|
|
92
|
+
'您的动画通过互联网传输到第三方服务器',
|
|
93
|
+
'由于上传和下载时的网络延迟造成的等待时间',
|
|
94
|
+
'大小限制(大的 GIF 经常被拒绝)',
|
|
95
|
+
'文件保留和分析的风险',
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
title: '我们的本地架构',
|
|
100
|
+
description: '使用 Vanilla JS 技术直接在您的硬件上进行处理。',
|
|
101
|
+
icon: 'mdi:laptop-mac',
|
|
102
|
+
highlight: true,
|
|
103
|
+
points: [
|
|
104
|
+
'GIF 永远不会离开您的设备',
|
|
105
|
+
'即时转换,无需网络等待',
|
|
106
|
+
'无大小限制:处理任何重量的 GIF',
|
|
107
|
+
'绝对隐私:0 字节向外发送',
|
|
108
|
+
],
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
type: 'title',
|
|
114
|
+
text: '本地 GIF 转 WebP 转换的工作原理',
|
|
115
|
+
level: 3,
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
type: 'paragraph',
|
|
119
|
+
html: '本地转换使用 HTML5 Canvas API。GIF 被加载为原生的浏览器 Image 元素。通过将其绘制到画布上,图形引擎会捕捉包含所有透明度信息的第一帧动画。<code>toDataURL(\'image/webp\')</code> 方法直接在 RAM 中将该帧导出为 WebP。',
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
type: 'paragraph',
|
|
123
|
+
html: 'WebP 支持完整的 Alpha 通道,因此 GIF 的透明度保留在生成的 WebP 中,无需添加背景。WebP 压缩算法的效率明显高于 GIF 或 PNG,这解释了最终输出文件大小的大幅降低。',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
type: 'tip',
|
|
127
|
+
title: '保证网页速度提升',
|
|
128
|
+
html: '一个 5 MB 的动态 GIF 可以变成 1 MB 以下的 WebP。如果您的网站页面上有 GIF,用 WebP 替换它们可以立即改善您的 Largest Contentful Paint (LCP) 和 Total Blocking Time (TBT),直接影响 SEO 排名。',
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
type: 'title',
|
|
132
|
+
text: '生成的 WebP 的使用案例和兼容性',
|
|
133
|
+
level: 3,
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'list',
|
|
137
|
+
icon: 'mdi:check-circle',
|
|
138
|
+
items: [
|
|
139
|
+
'替换网页上的 GIF 以提高 PageSpeed 分数。',
|
|
140
|
+
'为 Discord、Slack 和现代平台优化的头像和贴纸。',
|
|
141
|
+
'用于数字营销活动的横幅和视觉效果。',
|
|
142
|
+
'渐进式 Web 应用程序 (PWA) 中的动画。',
|
|
143
|
+
'兼容 Chrome、Edge、Firefox、Safari 14+ 以及所有现代浏览器。',
|
|
144
|
+
],
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
type: 'title',
|
|
148
|
+
text: '结论:将您的 GIF 迁移到 21 世纪',
|
|
149
|
+
level: 3,
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'paragraph',
|
|
153
|
+
html: '您网站上的每一个 GIF 都是一次错失的优化机会。我们的工具直接在您的浏览器中即时、私密且无限制地将 GIF 转换为 WebP。结果:文件缩小高达 5 倍、完美的透明度,并与所有现代浏览器兼容。',
|
|
154
|
+
},
|
|
155
|
+
];
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
export const content: GifAWebpLocaleContent = {
|
|
159
|
+
slug,
|
|
160
|
+
title,
|
|
161
|
+
description,
|
|
162
|
+
ui,
|
|
163
|
+
seo,
|
|
164
|
+
faq,
|
|
165
|
+
bibliography,
|
|
166
|
+
howTo,
|
|
167
|
+
schemas: generateSchemas({ title, description, inLanguage: 'zh', faq, howTo }),
|
|
168
|
+
};
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
---
|
|
2
|
-
import { SEORenderer } from '@jjlmoya/utils-shared';
|
|
3
|
-
import { gifAWebp } from './index';
|
|
4
|
-
import type { KnownLocale } from '../../types';
|
|
5
|
-
|
|
6
|
-
interface Props {
|
|
7
|
-
locale?: KnownLocale;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
const { locale = 'es' } = Astro.props;
|
|
11
|
-
const content = await gifAWebp.i18n[locale]?.();
|
|
12
|
-
if (!content) return null;
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
1
|
+
---
|
|
2
|
+
import { SEORenderer } from '@jjlmoya/utils-shared';
|
|
3
|
+
import { gifAWebp } from './index';
|
|
4
|
+
import type { KnownLocale } from '../../types';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
locale?: KnownLocale;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const { locale = 'es' } = Astro.props;
|
|
11
|
+
const content = await gifAWebp.i18n[locale]?.();
|
|
12
|
+
if (!content) return null;
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|