@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 { BmpAWebpLocaleContent } from '../index';
|
|
5
|
-
|
|
6
|
-
const slug = 'bmp-to-webp-converter';
|
|
7
|
-
const title = '免费将 BMP 转换为 WebP';
|
|
8
|
-
const description =
|
|
9
|
-
'离线将 BMP 图像转换为 WebP。将巨大文件缩减至千字节。无需上传文件。免费、离线且完全私密。';
|
|
10
|
-
|
|
11
|
-
const ui: ImageConverterUI = {
|
|
12
|
-
dragText: '拖拽 BMP 文件...',
|
|
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 { BmpAWebpLocaleContent } from '../index';
|
|
5
|
+
|
|
6
|
+
const slug = 'bmp-to-webp-converter';
|
|
7
|
+
const title = '免费将 BMP 转换为 WebP';
|
|
8
|
+
const description =
|
|
9
|
+
'离线将 BMP 图像转换为 WebP。将巨大文件缩减至千字节。无需上传文件。免费、离线且完全私密。';
|
|
10
|
+
|
|
11
|
+
const ui: ImageConverterUI = {
|
|
12
|
+
dragText: '拖拽 BMP 文件...',
|
|
13
|
+
convertText: '立即将其转换为 WebP',
|
|
14
|
+
selectFiles: '选择文件',
|
|
15
|
+
processedFiles: '已处理文件',
|
|
16
|
+
downloadAll: '下载全部 (.zip)',
|
|
17
17
|
pending: '等待中',
|
|
18
|
-
bibliographyTitle: '参考文献',
|
|
19
|
-
faqTitle: '常见问题',
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
const faq: BmpAWebpLocaleContent['faq'] = [
|
|
23
|
-
{
|
|
24
|
-
question: '为什么我的 BMP 文件占用空间大 10 倍?转换为 WebP 有什么好处?',
|
|
25
|
-
answer:
|
|
26
|
-
'BMP 存储的是未经压缩的像素图。WebP 使用数学压缩技术,在保持图像极高辨识度的同时,将巨大的 BMP 缩减到不到 1MB。',
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
question: '我需要注册账户吗?',
|
|
30
|
-
answer:
|
|
31
|
-
'我们不要求提供电子邮件,您的资料将保持隔离状态,因为处理是由您电脑上安装的浏览器 JavaScript 完成的,无需远程传输。',
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
question: '我可以同时拖入多个文件吗?',
|
|
35
|
-
answer:
|
|
36
|
-
'是的,如果您的硬件能够承受,您可以同时拖入 50 或 100 个文件进行处理,而无需排队。',
|
|
37
|
-
},
|
|
38
|
-
];
|
|
39
|
-
|
|
40
|
-
const howTo: BmpAWebpLocaleContent['howTo'] = [
|
|
41
|
-
{
|
|
42
|
-
name: '识别原始文件',
|
|
43
|
-
text: '将您的位图集合放在准备好传输的窗口中。',
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
name: '原生批量激活',
|
|
47
|
-
text: '将所有文件投影或拖拽到我们的数字工作台上。',
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
name: '导出 WebP 批量文件',
|
|
51
|
-
text: '点击结果,您将分别获得极小体积的图像,或作为即时压缩包下载。',
|
|
52
|
-
},
|
|
53
|
-
];
|
|
54
|
-
|
|
55
|
-
const seo: BmpAWebpLocaleContent['seo'] = [
|
|
56
|
-
{
|
|
57
|
-
type: 'title',
|
|
58
|
-
text: 'BMP 转 WebP 转换器:最极限的文件瘦身方案',
|
|
59
|
-
level: 2,
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
type: 'paragraph',
|
|
63
|
-
html: '将 BMP 转换为 WebP 与无疑是您可以对图像进行的、最令人惊叹的转变。BMP(位图)格式是数字生态系统中最古老、最笨重的格式之一:它不经任何压缩地存储每个像素,导致文件的体积可能是其现代等效格式的 20、50 甚至 100 倍。由 Google 开发的 WebP 应用了最先进的压缩算法,在保持出色视觉质量的同时,将体积缩减到极致。',
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
type: 'title',
|
|
67
|
-
text: '为什么 BMP 如此笨重,而 WebP 如此高效?',
|
|
68
|
-
level: 3,
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
type: 'paragraph',
|
|
72
|
-
html: 'BMP 格式诞生于 80 年底的 Windows 系统,当时硬盘空间巨大且压缩并非首要任务。每个像素都原样保存,没有任何缩减算法:一张 1920x1080 像素的图像在 BMP 中正好占用 5.93 MB,与其内容无关。这使其成为内部截图或无损编辑的理想选择,但完全不适合网页或现代存储。',
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
type: 'paragraph',
|
|
76
|
-
html: 'WebP 使用基于块的预测压缩和 DCT 变换(与数字视频背后的技术相同),使得同样的 1920x1080 图像仅占用 80 KB 到 300 KB。这意味着比原始 BMP 减少了 95% 到 99%。此外,WebP 支持透明度 Alpha 通道以及有损和无损压缩,提供了全面的通用性。',
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
type: 'title',
|
|
80
|
-
text: '对比:云端转换器 vs 我们的本地架构',
|
|
81
|
-
level: 3,
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
type: 'comparative',
|
|
85
|
-
items: [
|
|
86
|
-
{
|
|
87
|
-
title: '云端转换器',
|
|
88
|
-
description: '将您的 BMP 文件上传到远程服务器进行处理的工具。',
|
|
89
|
-
icon: 'mdi:cloud-upload',
|
|
90
|
-
pointIcon: 'mdi:close-circle-outline',
|
|
91
|
-
points: [
|
|
92
|
-
'在慢速连接下上传 20 MB 的 BMP 需要几分钟',
|
|
93
|
-
'您的图像存储在他人的服务器上',
|
|
94
|
-
'体积限制排除了大型 BMP 文件',
|
|
95
|
-
'侵入性广告和数据追踪器',
|
|
96
|
-
],
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
title: '我们的本地架构',
|
|
100
|
-
description: '通过 Vanilla JS 技术和 Canvas API 在您的浏览器中直接处理。',
|
|
101
|
-
icon: 'mdi:laptop-mac',
|
|
102
|
-
highlight: true,
|
|
103
|
-
points: [
|
|
104
|
-
'无需网络传输,即时转换',
|
|
105
|
-
'绝对隐私-0 字节离开您的设备',
|
|
106
|
-
'不限单个文件的大小',
|
|
107
|
-
'无需互联网连接即可工作',
|
|
108
|
-
],
|
|
109
|
-
},
|
|
110
|
-
],
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
type: 'title',
|
|
114
|
-
text: '浏览器本地转换的技术原理',
|
|
115
|
-
level: 3,
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
type: 'paragraph',
|
|
119
|
-
html: '拖拽 BMP 文件时,浏览器将其作为二进制 Blob 读取到 RAM 内存中。该 Blob 被加载到 JavaScript 的 <code>Image</code> 元素中,使用原生图像引擎进行解码。接着,图像被绘制在不可见的 HTML5 <code>Canvas</code> 元素上。Canvas 充当虚拟画布,图像以像素对像素的形式存在于其中。',
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
type: 'paragraph',
|
|
123
|
-
html: '在 Canvas 上绘制完成后,我们运行 <code>toBlob()</code> 方法,并指定 MIME 类型为 <code>image/webp</code> 以及所需的质量等级。浏览器内部应用 WebP 压缩算法,生成包含结果文件的新 Blob。该 Blob 被转换为浏览器保存到硬盘的直接下载 URL。整个过程不建立任何网络连接。',
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
type: 'tip',
|
|
127
|
-
title: '最大的压缩跨度',
|
|
128
|
-
html: 'BMP 到 WebP 的转换可以实现 99% 的文件体积缩减。一张 20 MB 的 BMP 可以在视觉质量几乎完全相同的情况下,变成仅约 200 KB 的 WebP。这是标准图像格式之间最有效的转换。',
|
|
129
|
-
},
|
|
130
|
-
{
|
|
131
|
-
type: 'title',
|
|
132
|
-
text: 'WebP 的应用场景与兼容性',
|
|
133
|
-
level: 3,
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
type: 'list',
|
|
137
|
-
icon: 'mdi:check-circle',
|
|
138
|
-
items: [
|
|
139
|
-
'网页发布-Chrome、Firefox、Safari、Edge 及所有现代浏览器均支持。',
|
|
140
|
-
'社交网络-Instagram、Twitter、Facebook 原生接受 WebP。',
|
|
141
|
-
'网页应用与 PWA-极小体积实现即时加载。',
|
|
142
|
-
'高效归档-替换陈旧的 BMP 集合,节省数以 GB 计的空间。',
|
|
143
|
-
'邮件营销-轻量级图像,在任何现代邮件客户端中都能快速加载。',
|
|
144
|
-
],
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
type: 'title',
|
|
148
|
-
text: '结论:一键实现最具冲击力的转换',
|
|
149
|
-
level: 3,
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
type: 'paragraph',
|
|
153
|
-
html: '如果您有来自 Windows 的陈旧 BMP 文件、未经压缩的截图或来自旧工具的图像,将它们转换为 WebP 是优化存储和网页性能的最有效行动。使用我们的工具,转换是即时的、私密的且无限制的-正应如此。',
|
|
154
|
-
},
|
|
155
|
-
];
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
export const content: BmpAWebpLocaleContent = {
|
|
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: BmpAWebpLocaleContent['faq'] = [
|
|
23
|
+
{
|
|
24
|
+
question: '为什么我的 BMP 文件占用空间大 10 倍?转换为 WebP 有什么好处?',
|
|
25
|
+
answer:
|
|
26
|
+
'BMP 存储的是未经压缩的像素图。WebP 使用数学压缩技术,在保持图像极高辨识度的同时,将巨大的 BMP 缩减到不到 1MB。',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
question: '我需要注册账户吗?',
|
|
30
|
+
answer:
|
|
31
|
+
'我们不要求提供电子邮件,您的资料将保持隔离状态,因为处理是由您电脑上安装的浏览器 JavaScript 完成的,无需远程传输。',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
question: '我可以同时拖入多个文件吗?',
|
|
35
|
+
answer:
|
|
36
|
+
'是的,如果您的硬件能够承受,您可以同时拖入 50 或 100 个文件进行处理,而无需排队。',
|
|
37
|
+
},
|
|
38
|
+
];
|
|
39
|
+
|
|
40
|
+
const howTo: BmpAWebpLocaleContent['howTo'] = [
|
|
41
|
+
{
|
|
42
|
+
name: '识别原始文件',
|
|
43
|
+
text: '将您的位图集合放在准备好传输的窗口中。',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: '原生批量激活',
|
|
47
|
+
text: '将所有文件投影或拖拽到我们的数字工作台上。',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: '导出 WebP 批量文件',
|
|
51
|
+
text: '点击结果,您将分别获得极小体积的图像,或作为即时压缩包下载。',
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
|
|
55
|
+
const seo: BmpAWebpLocaleContent['seo'] = [
|
|
56
|
+
{
|
|
57
|
+
type: 'title',
|
|
58
|
+
text: 'BMP 转 WebP 转换器:最极限的文件瘦身方案',
|
|
59
|
+
level: 2,
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
type: 'paragraph',
|
|
63
|
+
html: '将 BMP 转换为 WebP 与无疑是您可以对图像进行的、最令人惊叹的转变。BMP(位图)格式是数字生态系统中最古老、最笨重的格式之一:它不经任何压缩地存储每个像素,导致文件的体积可能是其现代等效格式的 20、50 甚至 100 倍。由 Google 开发的 WebP 应用了最先进的压缩算法,在保持出色视觉质量的同时,将体积缩减到极致。',
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
type: 'title',
|
|
67
|
+
text: '为什么 BMP 如此笨重,而 WebP 如此高效?',
|
|
68
|
+
level: 3,
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
type: 'paragraph',
|
|
72
|
+
html: 'BMP 格式诞生于 80 年底的 Windows 系统,当时硬盘空间巨大且压缩并非首要任务。每个像素都原样保存,没有任何缩减算法:一张 1920x1080 像素的图像在 BMP 中正好占用 5.93 MB,与其内容无关。这使其成为内部截图或无损编辑的理想选择,但完全不适合网页或现代存储。',
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
type: 'paragraph',
|
|
76
|
+
html: 'WebP 使用基于块的预测压缩和 DCT 变换(与数字视频背后的技术相同),使得同样的 1920x1080 图像仅占用 80 KB 到 300 KB。这意味着比原始 BMP 减少了 95% 到 99%。此外,WebP 支持透明度 Alpha 通道以及有损和无损压缩,提供了全面的通用性。',
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
type: 'title',
|
|
80
|
+
text: '对比:云端转换器 vs 我们的本地架构',
|
|
81
|
+
level: 3,
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
type: 'comparative',
|
|
85
|
+
items: [
|
|
86
|
+
{
|
|
87
|
+
title: '云端转换器',
|
|
88
|
+
description: '将您的 BMP 文件上传到远程服务器进行处理的工具。',
|
|
89
|
+
icon: 'mdi:cloud-upload',
|
|
90
|
+
pointIcon: 'mdi:close-circle-outline',
|
|
91
|
+
points: [
|
|
92
|
+
'在慢速连接下上传 20 MB 的 BMP 需要几分钟',
|
|
93
|
+
'您的图像存储在他人的服务器上',
|
|
94
|
+
'体积限制排除了大型 BMP 文件',
|
|
95
|
+
'侵入性广告和数据追踪器',
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
title: '我们的本地架构',
|
|
100
|
+
description: '通过 Vanilla JS 技术和 Canvas API 在您的浏览器中直接处理。',
|
|
101
|
+
icon: 'mdi:laptop-mac',
|
|
102
|
+
highlight: true,
|
|
103
|
+
points: [
|
|
104
|
+
'无需网络传输,即时转换',
|
|
105
|
+
'绝对隐私-0 字节离开您的设备',
|
|
106
|
+
'不限单个文件的大小',
|
|
107
|
+
'无需互联网连接即可工作',
|
|
108
|
+
],
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
type: 'title',
|
|
114
|
+
text: '浏览器本地转换的技术原理',
|
|
115
|
+
level: 3,
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
type: 'paragraph',
|
|
119
|
+
html: '拖拽 BMP 文件时,浏览器将其作为二进制 Blob 读取到 RAM 内存中。该 Blob 被加载到 JavaScript 的 <code>Image</code> 元素中,使用原生图像引擎进行解码。接着,图像被绘制在不可见的 HTML5 <code>Canvas</code> 元素上。Canvas 充当虚拟画布,图像以像素对像素的形式存在于其中。',
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
type: 'paragraph',
|
|
123
|
+
html: '在 Canvas 上绘制完成后,我们运行 <code>toBlob()</code> 方法,并指定 MIME 类型为 <code>image/webp</code> 以及所需的质量等级。浏览器内部应用 WebP 压缩算法,生成包含结果文件的新 Blob。该 Blob 被转换为浏览器保存到硬盘的直接下载 URL。整个过程不建立任何网络连接。',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
type: 'tip',
|
|
127
|
+
title: '最大的压缩跨度',
|
|
128
|
+
html: 'BMP 到 WebP 的转换可以实现 99% 的文件体积缩减。一张 20 MB 的 BMP 可以在视觉质量几乎完全相同的情况下,变成仅约 200 KB 的 WebP。这是标准图像格式之间最有效的转换。',
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
type: 'title',
|
|
132
|
+
text: 'WebP 的应用场景与兼容性',
|
|
133
|
+
level: 3,
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'list',
|
|
137
|
+
icon: 'mdi:check-circle',
|
|
138
|
+
items: [
|
|
139
|
+
'网页发布-Chrome、Firefox、Safari、Edge 及所有现代浏览器均支持。',
|
|
140
|
+
'社交网络-Instagram、Twitter、Facebook 原生接受 WebP。',
|
|
141
|
+
'网页应用与 PWA-极小体积实现即时加载。',
|
|
142
|
+
'高效归档-替换陈旧的 BMP 集合,节省数以 GB 计的空间。',
|
|
143
|
+
'邮件营销-轻量级图像,在任何现代邮件客户端中都能快速加载。',
|
|
144
|
+
],
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
type: 'title',
|
|
148
|
+
text: '结论:一键实现最具冲击力的转换',
|
|
149
|
+
level: 3,
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'paragraph',
|
|
153
|
+
html: '如果您有来自 Windows 的陈旧 BMP 文件、未经压缩的截图或来自旧工具的图像,将它们转换为 WebP 是优化存储和网页性能的最有效行动。使用我们的工具,转换是即时的、私密的且无限制的-正应如此。',
|
|
154
|
+
},
|
|
155
|
+
];
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
export const content: BmpAWebpLocaleContent = {
|
|
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 { bmpAWebp } 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 bmpAWebp.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 { bmpAWebp } 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 bmpAWebp.i18n[locale]?.();
|
|
12
|
+
if (!content) return null;
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|