@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';
|
|
2
|
+
import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
|
|
3
3
|
import { generateSchemas } from '../../../shared/logic/schemas';
|
|
4
|
-
import type { GifAJpgLocaleContent } from '../index';
|
|
5
|
-
|
|
6
|
-
const slug = 'gif-to-jpg-converter';
|
|
7
|
-
const title = 'Convert GIF to JPG Online';
|
|
8
|
-
const description =
|
|
9
|
-
'Extract the first frame of your GIFs and convert to JPG. No server. Processed locally in your browser. Free and unlimited.';
|
|
10
|
-
|
|
11
|
-
const ui: ImageConverterUI = {
|
|
12
|
-
dragText: 'Drag GIF files...',
|
|
13
|
-
convertText: 'To convert them to JPG instantly',
|
|
14
|
-
selectFiles: 'Select files',
|
|
15
|
-
processedFiles: 'Processed files',
|
|
16
|
-
downloadAll: 'Download All (.zip)',
|
|
4
|
+
import type { GifAJpgLocaleContent } from '../index';
|
|
5
|
+
|
|
6
|
+
const slug = 'gif-to-jpg-converter';
|
|
7
|
+
const title = 'Convert GIF to JPG Online';
|
|
8
|
+
const description =
|
|
9
|
+
'Extract the first frame of your GIFs and convert to JPG. No server. Processed locally in your browser. Free and unlimited.';
|
|
10
|
+
|
|
11
|
+
const ui: ImageConverterUI = {
|
|
12
|
+
dragText: 'Drag GIF files...',
|
|
13
|
+
convertText: 'To convert them to JPG instantly',
|
|
14
|
+
selectFiles: 'Select files',
|
|
15
|
+
processedFiles: 'Processed files',
|
|
16
|
+
downloadAll: 'Download All (.zip)',
|
|
17
17
|
pending: 'Pending',
|
|
18
|
-
bibliographyTitle: 'Bibliographic References',
|
|
19
|
-
faqTitle: 'Frequently Asked Questions',
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
const faq: GifAJpgLocaleContent['faq'] = [
|
|
23
|
-
{
|
|
24
|
-
question: 'What happens to animations when converting to JPG?',
|
|
25
|
-
answer:
|
|
26
|
-
'JPG is strictly static and does not support multiple frames. Our converter extracts only the first image or frame appearing in the GIF sequence.',
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
question: 'Will I lose any special effects or transparent backgrounds?',
|
|
30
|
-
answer:
|
|
31
|
-
'Yes, this is the natural behavior of the JPG standard. If you upload a GIF with a transparent background, we automatically insert a solid white underlying layer to avoid corrupted colors.',
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
question: 'Can I extract JPG photos from a GIF without the website saving my content?',
|
|
35
|
-
answer:
|
|
36
|
-
'Absolutely yes. The tool is a Web App based on the HTML5 Canvas. All decoding is executed by the processor of your own physical device.',
|
|
37
|
-
},
|
|
38
|
-
];
|
|
39
|
-
|
|
40
|
-
const howTo: GifAJpgLocaleContent['howTo'] = [
|
|
41
|
-
{
|
|
42
|
-
name: 'Drag your animated GIF files',
|
|
43
|
-
text: 'Place or drag from your folder that GIF into our processing box.',
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
name: 'Clean first-frame extraction',
|
|
47
|
-
text: 'In fractions of time the animation is extracted creating the solid white JPG without contacting servers.',
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
name: 'Download them in bulk ZIP',
|
|
51
|
-
text: 'Download via the buttons or using Zip if you processed a large number of files.',
|
|
52
|
-
},
|
|
53
|
-
];
|
|
54
|
-
|
|
55
|
-
const seo: GifAJpgLocaleContent['seo'] = [
|
|
56
|
-
{
|
|
57
|
-
type: 'title',
|
|
58
|
-
text: 'GIF to JPG Converter: Extract Frames as High',
|
|
59
|
-
level: 2,
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
type: 'paragraph',
|
|
63
|
-
html: 'Animated GIFs have dominated short-form animation on the web for decades. But their animated nature makes them completely useless as thumbnails, social media previews, or document images. When you need to extract a specific frame from a GIF and turn it into a high-quality static image, converting to JPG is the most practical and universally compatible solution.',
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
type: 'title',
|
|
67
|
-
text: 'GIF vs JPG: Two formats with opposite purposes',
|
|
68
|
-
level: 3,
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
type: 'paragraph',
|
|
72
|
-
html: 'GIF (Graphics Interchange Format) was designed in 1987 with a severe limitation that persists today: it can only represent 256 colors per frame. This technical constraint did not matter for simple animations with limited palettes, but it makes it a visually poor format for real photography. JPG, on the other hand, can render millions of colors using advanced perceptual compression algorithms.',
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
type: 'paragraph',
|
|
76
|
-
html: 'Extracting a frame from a GIF and saving it as JPG has many practical uses: generating thumbnails for video players, creating previews for content management systems, obtaining static images for presentations, or simply archiving a visual moment from a complex animation. The resulting JPG will be much lighter than the original GIF and universally compatible.',
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
type: 'title',
|
|
80
|
-
text: 'Architecture Comparison: Local vs Cloud',
|
|
81
|
-
level: 3,
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
type: 'comparative',
|
|
85
|
-
items: [
|
|
86
|
-
{
|
|
87
|
-
title: 'Cloud Converters',
|
|
88
|
-
description: 'Tools that upload your files to a remote server for processing.',
|
|
89
|
-
icon: 'mdi:cloud-upload',
|
|
90
|
-
pointIcon: 'mdi:close-circle-outline',
|
|
91
|
-
points: [
|
|
92
|
-
'Your GIFs travel over the internet to third-party servers',
|
|
93
|
-
'Network latency on upload and download',
|
|
94
|
-
'Size limits and file quotas per session',
|
|
95
|
-
'Risk of data retention on external servers',
|
|
96
|
-
],
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
title: 'Our Local Architecture',
|
|
100
|
-
description: 'Direct processing on your hardware using Vanilla JS technology.',
|
|
101
|
-
icon: 'mdi:laptop-mac',
|
|
102
|
-
highlight: true,
|
|
103
|
-
points: [
|
|
104
|
-
'The GIF never leaves your device',
|
|
105
|
-
'Instant speed with no network wait',
|
|
106
|
-
'No size limits or file quotas',
|
|
107
|
-
'Total privacy: 0 bytes sent externally',
|
|
108
|
-
],
|
|
109
|
-
},
|
|
110
|
-
],
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
type: 'title',
|
|
114
|
-
text: 'How the frame extraction works technically',
|
|
115
|
-
level: 3,
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
type: 'paragraph',
|
|
119
|
-
html: 'The local conversion relies on the HTML5 Canvas API. When you load a GIF, the browser decodes it in memory as a native Image element. By rendering it onto an invisible canvas, the browser\'s graphics engine automatically captures the first frame of the animation sequence.',
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
type: 'paragraph',
|
|
123
|
-
html: 'Since JPG does not support transparency, our algorithm applies a solid white background before exporting. The canvas <code>toDataURL(\'image/jpeg\')</code> method generates the JPG byte stream directly in your computer\'s RAM, with no network connection. The resulting file is immediately downloaded to your device.',
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
type: 'tip',
|
|
127
|
-
title: 'GIF\'s limited color palette',
|
|
128
|
-
html: 'GIF can only contain 256 colors per frame. The extracted JPG will inherit that reduced palette from the original: if the GIF contained gradients or photography, it may appear with some posterization. For best results, use GIFs with simple colors or illustrations.',
|
|
129
|
-
},
|
|
130
|
-
{
|
|
131
|
-
type: 'title',
|
|
132
|
-
text: 'Use cases and compatibility of the resulting JPG',
|
|
133
|
-
level: 3,
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
type: 'list',
|
|
137
|
-
icon: 'mdi:check-circle',
|
|
138
|
-
items: [
|
|
139
|
-
'Thumbnails and previews for video platforms and CMS.',
|
|
140
|
-
'Cover images for social media posts.',
|
|
141
|
-
'Insertion into Word, PowerPoint or PDF documents.',
|
|
142
|
-
'Presentation files and marketing materials.',
|
|
143
|
-
'Universal compatibility with viewers on Windows, macOS and mobile.',
|
|
144
|
-
],
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
type: 'title',
|
|
148
|
-
text: 'Conclusion: the frame worth more than the animation',
|
|
149
|
-
level: 3,
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
type: 'paragraph',
|
|
153
|
-
html: 'A 2 MB animated GIF can produce a JPG of the first frame of just 50-200 KB, depending on resolution. Our tool performs this conversion instantly, privately, and without limits, directly in your browser. No servers, no accounts, no waiting.',
|
|
154
|
-
},
|
|
155
|
-
];
|
|
156
|
-
|
|
18
|
+
bibliographyTitle: 'Bibliographic References',
|
|
19
|
+
faqTitle: 'Frequently Asked Questions',
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const faq: GifAJpgLocaleContent['faq'] = [
|
|
23
|
+
{
|
|
24
|
+
question: 'What happens to animations when converting to JPG?',
|
|
25
|
+
answer:
|
|
26
|
+
'JPG is strictly static and does not support multiple frames. Our converter extracts only the first image or frame appearing in the GIF sequence.',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
question: 'Will I lose any special effects or transparent backgrounds?',
|
|
30
|
+
answer:
|
|
31
|
+
'Yes, this is the natural behavior of the JPG standard. If you upload a GIF with a transparent background, we automatically insert a solid white underlying layer to avoid corrupted colors.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
question: 'Can I extract JPG photos from a GIF without the website saving my content?',
|
|
35
|
+
answer:
|
|
36
|
+
'Absolutely yes. The tool is a Web App based on the HTML5 Canvas. All decoding is executed by the processor of your own physical device.',
|
|
37
|
+
},
|
|
38
|
+
];
|
|
39
|
+
|
|
40
|
+
const howTo: GifAJpgLocaleContent['howTo'] = [
|
|
41
|
+
{
|
|
42
|
+
name: 'Drag your animated GIF files',
|
|
43
|
+
text: 'Place or drag from your folder that GIF into our processing box.',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'Clean first-frame extraction',
|
|
47
|
+
text: 'In fractions of time the animation is extracted creating the solid white JPG without contacting servers.',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'Download them in bulk ZIP',
|
|
51
|
+
text: 'Download via the buttons or using Zip if you processed a large number of files.',
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
|
|
55
|
+
const seo: GifAJpgLocaleContent['seo'] = [
|
|
56
|
+
{
|
|
57
|
+
type: 'title',
|
|
58
|
+
text: 'GIF to JPG Converter: Extract Frames as High',
|
|
59
|
+
level: 2,
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
type: 'paragraph',
|
|
63
|
+
html: 'Animated GIFs have dominated short-form animation on the web for decades. But their animated nature makes them completely useless as thumbnails, social media previews, or document images. When you need to extract a specific frame from a GIF and turn it into a high-quality static image, converting to JPG is the most practical and universally compatible solution.',
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
type: 'title',
|
|
67
|
+
text: 'GIF vs JPG: Two formats with opposite purposes',
|
|
68
|
+
level: 3,
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
type: 'paragraph',
|
|
72
|
+
html: 'GIF (Graphics Interchange Format) was designed in 1987 with a severe limitation that persists today: it can only represent 256 colors per frame. This technical constraint did not matter for simple animations with limited palettes, but it makes it a visually poor format for real photography. JPG, on the other hand, can render millions of colors using advanced perceptual compression algorithms.',
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
type: 'paragraph',
|
|
76
|
+
html: 'Extracting a frame from a GIF and saving it as JPG has many practical uses: generating thumbnails for video players, creating previews for content management systems, obtaining static images for presentations, or simply archiving a visual moment from a complex animation. The resulting JPG will be much lighter than the original GIF and universally compatible.',
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
type: 'title',
|
|
80
|
+
text: 'Architecture Comparison: Local vs Cloud',
|
|
81
|
+
level: 3,
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
type: 'comparative',
|
|
85
|
+
items: [
|
|
86
|
+
{
|
|
87
|
+
title: 'Cloud Converters',
|
|
88
|
+
description: 'Tools that upload your files to a remote server for processing.',
|
|
89
|
+
icon: 'mdi:cloud-upload',
|
|
90
|
+
pointIcon: 'mdi:close-circle-outline',
|
|
91
|
+
points: [
|
|
92
|
+
'Your GIFs travel over the internet to third-party servers',
|
|
93
|
+
'Network latency on upload and download',
|
|
94
|
+
'Size limits and file quotas per session',
|
|
95
|
+
'Risk of data retention on external servers',
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
title: 'Our Local Architecture',
|
|
100
|
+
description: 'Direct processing on your hardware using Vanilla JS technology.',
|
|
101
|
+
icon: 'mdi:laptop-mac',
|
|
102
|
+
highlight: true,
|
|
103
|
+
points: [
|
|
104
|
+
'The GIF never leaves your device',
|
|
105
|
+
'Instant speed with no network wait',
|
|
106
|
+
'No size limits or file quotas',
|
|
107
|
+
'Total privacy: 0 bytes sent externally',
|
|
108
|
+
],
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
type: 'title',
|
|
114
|
+
text: 'How the frame extraction works technically',
|
|
115
|
+
level: 3,
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
type: 'paragraph',
|
|
119
|
+
html: 'The local conversion relies on the HTML5 Canvas API. When you load a GIF, the browser decodes it in memory as a native Image element. By rendering it onto an invisible canvas, the browser\'s graphics engine automatically captures the first frame of the animation sequence.',
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
type: 'paragraph',
|
|
123
|
+
html: 'Since JPG does not support transparency, our algorithm applies a solid white background before exporting. The canvas <code>toDataURL(\'image/jpeg\')</code> method generates the JPG byte stream directly in your computer\'s RAM, with no network connection. The resulting file is immediately downloaded to your device.',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
type: 'tip',
|
|
127
|
+
title: 'GIF\'s limited color palette',
|
|
128
|
+
html: 'GIF can only contain 256 colors per frame. The extracted JPG will inherit that reduced palette from the original: if the GIF contained gradients or photography, it may appear with some posterization. For best results, use GIFs with simple colors or illustrations.',
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
type: 'title',
|
|
132
|
+
text: 'Use cases and compatibility of the resulting JPG',
|
|
133
|
+
level: 3,
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'list',
|
|
137
|
+
icon: 'mdi:check-circle',
|
|
138
|
+
items: [
|
|
139
|
+
'Thumbnails and previews for video platforms and CMS.',
|
|
140
|
+
'Cover images for social media posts.',
|
|
141
|
+
'Insertion into Word, PowerPoint or PDF documents.',
|
|
142
|
+
'Presentation files and marketing materials.',
|
|
143
|
+
'Universal compatibility with viewers on Windows, macOS and mobile.',
|
|
144
|
+
],
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
type: 'title',
|
|
148
|
+
text: 'Conclusion: the frame worth more than the animation',
|
|
149
|
+
level: 3,
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'paragraph',
|
|
153
|
+
html: 'A 2 MB animated GIF can produce a JPG of the first frame of just 50-200 KB, depending on resolution. Our tool performs this conversion instantly, privately, and without limits, directly in your browser. No servers, no accounts, no waiting.',
|
|
154
|
+
},
|
|
155
|
+
];
|
|
157
156
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
}
|
|
157
|
+
|
|
158
|
+
export const content: GifAJpgLocaleContent = {
|
|
159
|
+
slug,
|
|
160
|
+
title,
|
|
161
|
+
description,
|
|
162
|
+
ui,
|
|
163
|
+
seo,
|
|
164
|
+
faq,
|
|
165
|
+
bibliography,
|
|
166
|
+
howTo,
|
|
167
|
+
schemas: generateSchemas({ title, description, inLanguage: 'en', faq, howTo }),
|
|
168
|
+
};
|