@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.
Files changed (133) hide show
  1. package/package.json +2 -2
  2. package/src/category/i18n/de.ts +1 -1
  3. package/src/category/i18n/en.ts +1 -1
  4. package/src/category/i18n/fr.ts +1 -1
  5. package/src/category/i18n/id.ts +1 -1
  6. package/src/category/i18n/it.ts +1 -1
  7. package/src/category/i18n/nl.ts +1 -1
  8. package/src/category/i18n/pl.ts +1 -1
  9. package/src/category/i18n/pt.ts +1 -1
  10. package/src/category/i18n/sv.ts +1 -1
  11. package/src/tests/bibliography_wellformed_export.test.ts +46 -0
  12. package/src/tests/category_seo_quality.test.ts +74 -0
  13. package/src/tests/faq_count.test.ts +1 -1
  14. package/src/tests/no_h1_in_components.test.ts +1 -1
  15. package/src/tests/seo_parity.test.ts +2 -2
  16. package/src/tests/seo_wellformed_export.test.ts +65 -0
  17. package/src/tests/tool_validation.test.ts +15 -15
  18. package/src/tool/avifAJpg/i18n/en.ts +164 -164
  19. package/src/tool/avifAJpg/i18n/es.ts +164 -164
  20. package/src/tool/avifAJpg/i18n/fr.ts +164 -164
  21. package/src/tool/avifAJpg/i18n/ja.ts +166 -166
  22. package/src/tool/avifAJpg/i18n/ko.ts +166 -166
  23. package/src/tool/avifAJpg/i18n/zh.ts +166 -166
  24. package/src/tool/avifAJpg/seo.astro +15 -15
  25. package/src/tool/avifAPng/i18n/en.ts +164 -164
  26. package/src/tool/avifAPng/i18n/es.ts +164 -164
  27. package/src/tool/avifAPng/i18n/fr.ts +164 -164
  28. package/src/tool/avifAPng/i18n/ja.ts +166 -166
  29. package/src/tool/avifAPng/i18n/ko.ts +166 -166
  30. package/src/tool/avifAPng/i18n/zh.ts +166 -166
  31. package/src/tool/avifAPng/seo.astro +15 -15
  32. package/src/tool/avifAWebp/i18n/en.ts +164 -164
  33. package/src/tool/avifAWebp/i18n/es.ts +164 -164
  34. package/src/tool/avifAWebp/i18n/fr.ts +164 -164
  35. package/src/tool/avifAWebp/i18n/ja.ts +166 -166
  36. package/src/tool/avifAWebp/i18n/ko.ts +166 -166
  37. package/src/tool/avifAWebp/i18n/zh.ts +166 -166
  38. package/src/tool/avifAWebp/seo.astro +15 -15
  39. package/src/tool/bmpAJpg/i18n/en.ts +164 -164
  40. package/src/tool/bmpAJpg/i18n/es.ts +164 -164
  41. package/src/tool/bmpAJpg/i18n/fr.ts +164 -164
  42. package/src/tool/bmpAJpg/i18n/ja.ts +166 -166
  43. package/src/tool/bmpAJpg/i18n/ko.ts +166 -166
  44. package/src/tool/bmpAJpg/i18n/zh.ts +166 -166
  45. package/src/tool/bmpAJpg/seo.astro +15 -15
  46. package/src/tool/bmpAPng/i18n/en.ts +164 -164
  47. package/src/tool/bmpAPng/i18n/es.ts +164 -164
  48. package/src/tool/bmpAPng/i18n/fr.ts +164 -164
  49. package/src/tool/bmpAPng/i18n/ja.ts +165 -165
  50. package/src/tool/bmpAPng/i18n/ko.ts +165 -165
  51. package/src/tool/bmpAPng/i18n/zh.ts +165 -165
  52. package/src/tool/bmpAPng/seo.astro +15 -15
  53. package/src/tool/bmpAWebp/i18n/en.ts +164 -164
  54. package/src/tool/bmpAWebp/i18n/es.ts +164 -164
  55. package/src/tool/bmpAWebp/i18n/fr.ts +164 -164
  56. package/src/tool/bmpAWebp/i18n/ja.ts +166 -166
  57. package/src/tool/bmpAWebp/i18n/ko.ts +166 -166
  58. package/src/tool/bmpAWebp/i18n/zh.ts +166 -166
  59. package/src/tool/bmpAWebp/seo.astro +15 -15
  60. package/src/tool/gifAJpg/i18n/en.ts +164 -164
  61. package/src/tool/gifAJpg/i18n/es.ts +164 -164
  62. package/src/tool/gifAJpg/i18n/fr.ts +164 -164
  63. package/src/tool/gifAJpg/i18n/ja.ts +166 -166
  64. package/src/tool/gifAJpg/i18n/ko.ts +166 -166
  65. package/src/tool/gifAJpg/i18n/zh.ts +166 -166
  66. package/src/tool/gifAJpg/seo.astro +15 -15
  67. package/src/tool/gifAPng/i18n/en.ts +164 -164
  68. package/src/tool/gifAPng/i18n/es.ts +164 -164
  69. package/src/tool/gifAPng/i18n/fr.ts +164 -164
  70. package/src/tool/gifAPng/i18n/ja.ts +166 -166
  71. package/src/tool/gifAPng/i18n/ko.ts +166 -166
  72. package/src/tool/gifAPng/i18n/zh.ts +166 -166
  73. package/src/tool/gifAPng/seo.astro +15 -15
  74. package/src/tool/gifAWebp/i18n/en.ts +164 -164
  75. package/src/tool/gifAWebp/i18n/es.ts +164 -164
  76. package/src/tool/gifAWebp/i18n/fr.ts +164 -164
  77. package/src/tool/gifAWebp/i18n/ja.ts +166 -166
  78. package/src/tool/gifAWebp/i18n/ko.ts +166 -166
  79. package/src/tool/gifAWebp/i18n/zh.ts +166 -166
  80. package/src/tool/gifAWebp/seo.astro +15 -15
  81. package/src/tool/imagenBase64/i18n/en.ts +154 -154
  82. package/src/tool/imagenBase64/i18n/es.ts +154 -154
  83. package/src/tool/imagenBase64/i18n/fr.ts +154 -154
  84. package/src/tool/imagenBase64/seo.astro +15 -15
  85. package/src/tool/jpgAIco/seo.astro +15 -15
  86. package/src/tool/jpgAPng/i18n/en.ts +164 -164
  87. package/src/tool/jpgAPng/i18n/es.ts +164 -164
  88. package/src/tool/jpgAPng/i18n/fr.ts +164 -164
  89. package/src/tool/jpgAPng/i18n/ja.ts +166 -166
  90. package/src/tool/jpgAPng/i18n/ko.ts +166 -166
  91. package/src/tool/jpgAPng/i18n/zh.ts +166 -166
  92. package/src/tool/jpgAPng/seo.astro +15 -15
  93. package/src/tool/jpgAWebp/i18n/en.ts +164 -164
  94. package/src/tool/jpgAWebp/i18n/es.ts +164 -164
  95. package/src/tool/jpgAWebp/i18n/fr.ts +164 -164
  96. package/src/tool/jpgAWebp/seo.astro +15 -15
  97. package/src/tool/pngAIco/seo.astro +15 -15
  98. package/src/tool/pngAJpg/i18n/de.ts +21 -21
  99. package/src/tool/pngAJpg/i18n/es.ts +177 -177
  100. package/src/tool/pngAJpg/i18n/fr.ts +137 -137
  101. package/src/tool/pngAJpg/i18n/id.ts +89 -89
  102. package/src/tool/pngAJpg/i18n/it.ts +89 -89
  103. package/src/tool/pngAJpg/i18n/ko.ts +177 -177
  104. package/src/tool/pngAJpg/i18n/nl.ts +20 -20
  105. package/src/tool/pngAJpg/i18n/pl.ts +89 -89
  106. package/src/tool/pngAJpg/i18n/pt.ts +89 -89
  107. package/src/tool/pngAJpg/i18n/ru.ts +177 -177
  108. package/src/tool/pngAJpg/i18n/sv.ts +89 -89
  109. package/src/tool/pngAJpg/i18n/tr.ts +89 -89
  110. package/src/tool/pngAJpg/seo.astro +15 -15
  111. package/src/tool/pngAWebp/i18n/en.ts +164 -164
  112. package/src/tool/pngAWebp/i18n/es.ts +164 -164
  113. package/src/tool/pngAWebp/i18n/fr.ts +164 -164
  114. package/src/tool/pngAWebp/seo.astro +15 -15
  115. package/src/tool/svgAJpg/i18n/fr.ts +164 -164
  116. package/src/tool/svgAJpg/seo.astro +15 -15
  117. package/src/tool/svgAPng/i18n/fr.ts +164 -164
  118. package/src/tool/svgAPng/seo.astro +15 -15
  119. package/src/tool/webpAIco/seo.astro +15 -15
  120. package/src/tool/webpAJpg/seo.astro +15 -15
  121. package/src/tool/webpAPng/bibliography.ts +13 -13
  122. package/src/tool/webpAPng/i18n/de.ts +166 -166
  123. package/src/tool/webpAPng/i18n/es.ts +171 -171
  124. package/src/tool/webpAPng/i18n/fr.ts +166 -166
  125. package/src/tool/webpAPng/i18n/id.ts +166 -166
  126. package/src/tool/webpAPng/i18n/it.ts +166 -166
  127. package/src/tool/webpAPng/i18n/nl.ts +166 -166
  128. package/src/tool/webpAPng/i18n/pl.ts +166 -166
  129. package/src/tool/webpAPng/i18n/pt.ts +166 -166
  130. package/src/tool/webpAPng/i18n/ru.ts +166 -166
  131. package/src/tool/webpAPng/i18n/sv.ts +166 -166
  132. package/src/tool/webpAPng/i18n/tr.ts +167 -167
  133. package/src/tool/webpAPng/seo.astro +15 -15
@@ -19,27 +19,27 @@ const ui: ImageConverterUI = {
19
19
  faqTitle: 'Sıkça Sorulan Sorular',
20
20
  };
21
21
 
22
- const faq: PngAJpgLocaleContent['faq'] = [
23
- {
22
+ const faq: PngAJpgLocaleContent['faq'] = [
23
+ {
24
24
  question: "Yerel PNG'den JPG'ye dönüştürücümüzü neden seçmelisiniz?",
25
- answer:
25
+ answer:
26
26
  'Geleneksel hizmetlerin aksine bu araç dosyaları tamamen tarayıcıda işler. Görselleriniz uzak bir diske gönderilmez; verileriniz üzerindeki kontrol ve gizlilik korunur.',
27
- },
28
- {
27
+ },
28
+ {
29
29
  question: 'JPG mi PNG mi: hangisi ne zaman kullanılmalı?',
30
- answer:
30
+ answer:
31
31
  'PNG logolar ve saydam öğeler için uygundur. JPG ise fotoğraflarda ve web bannerlarında daha küçük dosyalar oluşturarak sayfa yükleme hızını artırır.',
32
- },
33
- {
32
+ },
33
+ {
34
34
  question: 'Dosya yüklemeden teknik dönüşüm nasıl çalışır?',
35
- answer:
35
+ answer:
36
36
  'HTML5 Canvas kullanılır. Tarayıcı görüntüyü görünmez bir sanal alanda yeniden oluşturur, saydam bölgeleri beyazla doldurur ve indirilecek JPEG verisini doğrudan üretir.',
37
- },
38
- {
37
+ },
38
+ {
39
39
  question: 'Gizli belgeler için güvenli mi?',
40
- answer:
40
+ answer:
41
41
  "Evet. Bankacılık, sağlık ve hukuk dosyalarını üçüncü taraflara göndermemek daha güvenlidir; işlem cihazın RAM'inde kalır ve sekme kapatılınca sona erer.",
42
- },
42
+ },
43
43
  ];
44
44
 
45
45
  const howTo: PngAJpgLocaleContent['howTo'] = [
@@ -57,114 +57,114 @@ const howTo: PngAJpgLocaleContent['howTo'] = [
57
57
  },
58
58
  ];
59
59
 
60
- const seo: PngAJpgLocaleContent['seo'] = [
61
- {
62
- type: 'title',
60
+ const seo: PngAJpgLocaleContent['seo'] = [
61
+ {
62
+ type: 'title',
63
63
  text: "PNG'den JPG'ye Dönüştürme: Görsel Optimizasyonu Rehberi",
64
- level: 2,
65
- },
66
- {
67
- type: 'paragraph',
64
+ level: 2,
65
+ },
66
+ {
67
+ type: 'paragraph',
68
68
  html: 'Dijital tasarım ve web geliştirmede hız önemlidir. PNG saydamlığı ve kayıpsız kaliteyi korur, ancak dosyalar ağır olabilir. Hızlı sayfalar ve küçük ekler için JPG pratik bir seçenektir.',
69
- },
70
- {
71
- type: 'title',
69
+ },
70
+ {
71
+ type: 'title',
72
72
  text: 'JPG mi PNG mi: hangisi seçilmeli?',
73
- level: 3,
74
- },
75
- {
76
- type: 'paragraph',
73
+ level: 3,
74
+ },
75
+ {
76
+ type: 'paragraph',
77
77
  html: 'Her durumda üstün tek bir format yoktur. PNG arayüzler, logolar ve saydam arka planlar için uygundur; kayıpsız sıkıştırma ise daha büyük dosyalar oluşturabilir.',
78
- },
79
- {
80
- type: 'paragraph',
78
+ },
79
+ {
80
+ type: 'paragraph',
81
81
  html: 'JPG gözün zor fark ettiği ayrıntıları azaltarak hafif görseller üretir. Fotoğraf, banner ve sosyal medya için küçük bir kalite ödününü daha hızlı yükleme karşılığında sunar.',
82
- },
83
- {
84
- type: 'title',
82
+ },
83
+ {
84
+ type: 'title',
85
85
  text: 'Teknik karşılaştırma: yerel işlem ve bulut',
86
- level: 3,
87
- },
88
- {
89
- type: 'comparative',
90
- items: [
91
- {
86
+ level: 3,
87
+ },
88
+ {
89
+ type: 'comparative',
90
+ items: [
91
+ {
92
92
  title: 'Bulut dönüştürücüler',
93
93
  description: 'Fotoğrafları uzak bir sunucuya yükleyen geleneksel hizmetler.',
94
- icon: 'mdi:cloud-upload',
95
- pointIcon: 'mdi:close-circle-outline',
96
- points: [
94
+ icon: 'mdi:cloud-upload',
95
+ pointIcon: 'mdi:close-circle-outline',
96
+ points: [
97
97
  'Ağ gecikmesi (yükleme/indirme)',
98
98
  'Özel verilerin sızma riski',
99
99
  'Dosya boyutu sınırları',
100
100
  'Reklamlar ve izleyiciler',
101
- ],
102
- },
103
- {
101
+ ],
102
+ },
103
+ {
104
104
  title: 'Yerel mimarimiz',
105
105
  description: 'Vanilla JS ile cihazınızda doğrudan işleme.',
106
- icon: 'mdi:laptop-mac',
107
- highlight: true,
108
- points: [
106
+ icon: 'mdi:laptop-mac',
107
+ highlight: true,
108
+ points: [
109
109
  'Ağ olmadan anında hız',
110
110
  'Gizlilik garantisi (sıfır bayt gönderilir)',
111
111
  'Dosya başına MB sınırı yok',
112
112
  'Temiz ve profesyonel arayüz',
113
- ],
114
- },
115
- ],
116
- },
117
- {
118
- type: 'title',
113
+ ],
114
+ },
115
+ ],
116
+ },
117
+ {
118
+ type: 'title',
119
119
  text: 'Teknik dönüşüm nasıl çalışır?',
120
- level: 3,
121
- },
122
- {
123
- type: 'paragraph',
120
+ level: 3,
121
+ },
122
+ {
123
+ type: 'paragraph',
124
124
  html: "Sunucu olmadan dönüşüm, modern tarayıcı API'leriyle yapılır. Dosya seçildiğinde RAM içinde geçici bir Blob oluşturulur ve görünmez bir HTML5 Canvas üzerine çizilir.",
125
- },
126
- {
127
- type: 'paragraph',
125
+ },
126
+ {
127
+ type: 'paragraph',
128
128
  html: 'JPG saydamlığı desteklemediği için saydam alanlar oluşturma öncesinde beyazla doldurulur. Canvas daha sonra cihazın doğrudan kaydedebileceği JPEG verisini üretir.',
129
- },
130
- {
131
- type: 'tip',
129
+ },
130
+ {
131
+ type: 'tip',
132
132
  title: 'SEO ipucu: ideal dosya boyutu',
133
133
  html: "Daha küçük bir görsel LCP ve PageSpeed ölçümlerini iyileştirebilir. Büyük PNG dosyalarını JPG'ye çevirmek özellikle başlık görsellerinde ve yoğun sayfalarda faydalıdır.",
134
- },
135
- {
136
- type: 'title',
134
+ },
135
+ {
136
+ type: 'title',
137
137
  text: 'Şirketler ve profesyoneller için güvenlik',
138
- level: 3,
139
- },
140
- {
141
- type: 'paragraph',
138
+ level: 3,
139
+ },
140
+ {
141
+ type: 'paragraph',
142
142
  html: "Bankacılık, sağlık ve hukukta dosyaları dış hizmetlere göndermek risk yaratabilir. Buradaki işlem tarayıcının RAM'inde kalır ve buluta yükleme gerektirmez.",
143
- },
144
- {
145
- type: 'title',
143
+ },
144
+ {
145
+ type: 'title',
146
146
  text: 'Sonuç uyumluluğu',
147
- level: 3,
148
- },
149
- {
150
- type: 'list',
151
- icon: 'mdi:check-circle',
152
- items: [
147
+ level: 3,
148
+ },
149
+ {
150
+ type: 'list',
151
+ icon: 'mdi:check-circle',
152
+ items: [
153
153
  'Windows, macOS ve mobil cihaz görüntüleyicileri.',
154
154
  'Sosyal ağlar (Instagram, LinkedIn ve diğerleri).',
155
155
  'Ofis araçları (Word, PowerPoint).',
156
156
  'İçerik yönetim sistemleri (WordPress, Shopify).',
157
- ],
158
- },
159
- {
160
- type: 'title',
157
+ ],
158
+ },
159
+ {
160
+ type: 'title',
161
161
  text: 'Sonuç: bilinçli biçimde optimize edin',
162
- level: 3,
163
- },
164
- {
165
- type: 'paragraph',
162
+ level: 3,
163
+ },
164
+ {
165
+ type: 'paragraph',
166
166
  html: 'Bu dönüştürücü hız ve gizliliği birleştirir. Geliştirici veya ev kullanıcısı olun, dosyalarınızı üçüncü taraflara vermeden görselleri küçültebilirsiniz.',
167
- },
167
+ },
168
168
  ];
169
169
 
170
170
 
@@ -1,15 +1,15 @@
1
- ---
2
- import { SEORenderer } from '@jjlmoya/utils-shared';
3
- import { pngAJpg } 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 pngAJpg.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 { pngAJpg } 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 pngAJpg.i18n[locale]?.();
12
+ if (!content) return null;
13
+ ---
14
+
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -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 { PngAWebpLocaleContent } from '../index';
5
-
6
- const slug = 'png-to-webp-converter';
7
- const title = 'Convert PNG to WebP Online and Free';
8
- const description =
9
- 'Convert PNG images to WebP in your browser. Up to 40% less file size. Preserves transparency. No file uploads. Free and private.';
10
-
11
- const ui: ImageConverterUI = {
12
- dragText: 'Drag PNG files...',
13
- convertText: 'To convert them to WebP instantly',
14
- selectFiles: 'Select files',
15
- processedFiles: 'Processed files',
16
- downloadAll: 'Download All (.zip)',
4
+ import type { PngAWebpLocaleContent } from '../index';
5
+
6
+ const slug = 'png-to-webp-converter';
7
+ const title = 'Convert PNG to WebP Online and Free';
8
+ const description =
9
+ 'Convert PNG images to WebP in your browser. Up to 40% less file size. Preserves transparency. No file uploads. Free and private.';
10
+
11
+ const ui: ImageConverterUI = {
12
+ dragText: 'Drag PNG files...',
13
+ convertText: 'To convert them to WebP 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: PngAWebpLocaleContent['faq'] = [
23
- {
24
- question: 'Why convert PNG to WebP?',
25
- answer:
26
- 'WebP offers up to 40% better compression than PNG at the same quality, while also supporting Alpha transparency. It is the format recommended by Google PageSpeed Insights.',
27
- },
28
- {
29
- question: 'Is transparency lost in the process?',
30
- answer:
31
- 'No. The technical implementation of WebP supports the alpha channel. The transparencies of the original PNG will be preserved in the new WebP file.',
32
- },
33
- {
34
- question: 'Do my images go to any server?',
35
- answer:
36
- 'No. The code runs exclusively in your browser (Client-Side). We never see, record or save the images you convert.',
37
- },
38
- ];
39
-
40
- const howTo: PngAWebpLocaleContent['howTo'] = [
41
- {
42
- name: 'Insert your PNGs',
43
- text: 'Drop your large PNG files into the upload area or use the traditional interactive selector.',
44
- },
45
- {
46
- name: 'Channel detection',
47
- text: 'The local rendering engine will detect and export the pixel composition to the optimized WebP format.',
48
- },
49
- {
50
- name: 'Direct Download',
51
- text: 'Download your highly compressed WebP files individually or bundle them together using the ZIP package converter.',
52
- },
53
- ];
54
-
55
- const seo: PngAWebpLocaleContent['seo'] = [
56
- {
57
- type: 'title',
58
- text: 'PNG to WebP Converter: Transparency and Modern Compression for the Web',
59
- level: 2,
60
- },
61
- {
62
- type: 'paragraph',
63
- html: '<strong>PNG</strong> has been the reference format for web images with transparency for decades - logos, icons, UI elements, product images on cut-out backgrounds. Its problem is file size: the lossless compression that guarantees quality also generates noticeably large files. Google\'s <strong>WebP</strong> solves this contradiction: it supports the alpha channel (transparency) <em>and</em> compresses far better than PNG, making the switch from PNG to WebP on your website a perfect optimization that sacrifices nothing.',
64
- },
65
- {
66
- type: 'title',
67
- text: 'PNG or WebP? When to use each format',
68
- level: 3,
69
- },
70
- {
71
- type: 'paragraph',
72
- html: '<strong>PNG</strong> remains the right format when compatibility is critical: design tools like Photoshop or Figma, print workflows, legacy desktop applications, or any context where WebP support is not guaranteed. It is also the ideal format for saving working layers in editing pipelines, since its lossless compression preserves every pixel. The cost: files that can weigh 3-8 times more than their WebP equivalent.',
73
- },
74
- {
75
- type: 'paragraph',
76
- html: '<strong>WebP</strong> is the natural replacement for PNG for all modern web content. Chrome, Firefox, Safari, and Edge all support it natively. A lossless WebP image is 26% smaller than the equivalent PNG; in lossy mode it can be up to 40% smaller with virtually indistinguishable visual quality. And crucially for web design: <strong>WebP preserves alpha transparency</strong> exactly like PNG, with no visual compromise.',
77
- },
78
- {
79
- type: 'title',
80
- text: 'Comparison: Local vs Cloud Conversion',
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.',
89
- icon: 'mdi:cloud-upload',
90
- pointIcon: 'mdi:close-circle-outline',
91
- points: [
92
- 'Network latency on upload and download',
93
- 'Your logos and images stored on third-party servers',
94
- 'File size limits and daily conversion caps',
95
- 'Intrusive ads and third-party trackers',
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
- 'Instant speed - zero network latency',
105
- 'Complete privacy - 0 bytes sent externally',
106
- 'No MB limits or file count restrictions',
107
- 'Clean interface, no ads or tracking',
108
- ],
109
- },
110
- ],
111
- },
112
- {
113
- type: 'title',
114
- text: 'How it works technically',
115
- level: 3,
116
- },
117
- {
118
- type: 'paragraph',
119
- html: 'The PNG is loaded locally and decoded into an in-memory <strong>HTML5 Canvas</strong>. The Canvas API preserves the alpha channel from the original PNG - all transparent and semi-transparent pixels are maintained intact in the RGBA pixel buffer. The canvas is then exported by calling <code>toDataURL(\'image/webp\')</code>, which applies the browser\'s WebP codec (based on Google\'s libwebp) to generate a more compact file without altering the transparency data.',
120
- },
121
- {
122
- type: 'paragraph',
123
- html: 'WebP uses two compression modes: lossless mode for images where every pixel must be exactly faithful to the original, and lossy mode for photos and elements where small differences are imperceptible. Lossless mode produces files 26% smaller than PNG; lossy mode can achieve reductions of up to 40% compared to PNG while maintaining excellent visual quality.',
124
- },
125
- {
126
- type: 'tip',
127
- title: 'Tip: WebP beats both PNG and JPG on the web',
128
- html: 'WebP in lossless mode is smaller than PNG. WebP in lossy mode is smaller than JPG. This makes WebP the <strong>only format that replaces both</strong> in the web context. Convert your transparent PNGs to WebP before uploading: Google PageSpeed Insights detects it and scores it positively in "Serve images in modern formats" audits.',
129
- },
130
- {
131
- type: 'title',
132
- text: 'Use cases and compatibility',
133
- level: 3,
134
- },
135
- {
136
- type: 'list',
137
- icon: 'mdi:check-circle',
138
- items: [
139
- 'Logos and icons with transparent backgrounds for websites and apps.',
140
- 'Product images with cut-out backgrounds in e-commerce stores.',
141
- 'CSS sprites and UI elements with alpha transparency.',
142
- 'Rasterized illustrations and vector graphics for landing pages.',
143
- 'Article thumbnails with transparent backgrounds in blogs and news portals.',
144
- ],
145
- },
146
- {
147
- type: 'title',
148
- text: 'Conclusion',
149
- level: 3,
150
- },
151
- {
152
- type: 'paragraph',
153
- html: 'The move from PNG to WebP is the most complete web image optimization available: you get lighter files, preserve transparency, and improve Core Web Vitals metrics without changing anything about your visual design. This tool does it instantly, for free, and completely privately - your images are processed in your browser and never travel to any external server.',
154
- },
155
- ];
156
-
18
+ bibliographyTitle: 'Bibliographic References',
19
+ faqTitle: 'Frequently Asked Questions',
20
+ };
21
+
22
+ const faq: PngAWebpLocaleContent['faq'] = [
23
+ {
24
+ question: 'Why convert PNG to WebP?',
25
+ answer:
26
+ 'WebP offers up to 40% better compression than PNG at the same quality, while also supporting Alpha transparency. It is the format recommended by Google PageSpeed Insights.',
27
+ },
28
+ {
29
+ question: 'Is transparency lost in the process?',
30
+ answer:
31
+ 'No. The technical implementation of WebP supports the alpha channel. The transparencies of the original PNG will be preserved in the new WebP file.',
32
+ },
33
+ {
34
+ question: 'Do my images go to any server?',
35
+ answer:
36
+ 'No. The code runs exclusively in your browser (Client-Side). We never see, record or save the images you convert.',
37
+ },
38
+ ];
39
+
40
+ const howTo: PngAWebpLocaleContent['howTo'] = [
41
+ {
42
+ name: 'Insert your PNGs',
43
+ text: 'Drop your large PNG files into the upload area or use the traditional interactive selector.',
44
+ },
45
+ {
46
+ name: 'Channel detection',
47
+ text: 'The local rendering engine will detect and export the pixel composition to the optimized WebP format.',
48
+ },
49
+ {
50
+ name: 'Direct Download',
51
+ text: 'Download your highly compressed WebP files individually or bundle them together using the ZIP package converter.',
52
+ },
53
+ ];
54
+
55
+ const seo: PngAWebpLocaleContent['seo'] = [
56
+ {
57
+ type: 'title',
58
+ text: 'PNG to WebP Converter: Transparency and Modern Compression for the Web',
59
+ level: 2,
60
+ },
61
+ {
62
+ type: 'paragraph',
63
+ html: '<strong>PNG</strong> has been the reference format for web images with transparency for decades - logos, icons, UI elements, product images on cut-out backgrounds. Its problem is file size: the lossless compression that guarantees quality also generates noticeably large files. Google\'s <strong>WebP</strong> solves this contradiction: it supports the alpha channel (transparency) <em>and</em> compresses far better than PNG, making the switch from PNG to WebP on your website a perfect optimization that sacrifices nothing.',
64
+ },
65
+ {
66
+ type: 'title',
67
+ text: 'PNG or WebP? When to use each format',
68
+ level: 3,
69
+ },
70
+ {
71
+ type: 'paragraph',
72
+ html: '<strong>PNG</strong> remains the right format when compatibility is critical: design tools like Photoshop or Figma, print workflows, legacy desktop applications, or any context where WebP support is not guaranteed. It is also the ideal format for saving working layers in editing pipelines, since its lossless compression preserves every pixel. The cost: files that can weigh 3-8 times more than their WebP equivalent.',
73
+ },
74
+ {
75
+ type: 'paragraph',
76
+ html: '<strong>WebP</strong> is the natural replacement for PNG for all modern web content. Chrome, Firefox, Safari, and Edge all support it natively. A lossless WebP image is 26% smaller than the equivalent PNG; in lossy mode it can be up to 40% smaller with virtually indistinguishable visual quality. And crucially for web design: <strong>WebP preserves alpha transparency</strong> exactly like PNG, with no visual compromise.',
77
+ },
78
+ {
79
+ type: 'title',
80
+ text: 'Comparison: Local vs Cloud Conversion',
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.',
89
+ icon: 'mdi:cloud-upload',
90
+ pointIcon: 'mdi:close-circle-outline',
91
+ points: [
92
+ 'Network latency on upload and download',
93
+ 'Your logos and images stored on third-party servers',
94
+ 'File size limits and daily conversion caps',
95
+ 'Intrusive ads and third-party trackers',
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
+ 'Instant speed - zero network latency',
105
+ 'Complete privacy - 0 bytes sent externally',
106
+ 'No MB limits or file count restrictions',
107
+ 'Clean interface, no ads or tracking',
108
+ ],
109
+ },
110
+ ],
111
+ },
112
+ {
113
+ type: 'title',
114
+ text: 'How it works technically',
115
+ level: 3,
116
+ },
117
+ {
118
+ type: 'paragraph',
119
+ html: 'The PNG is loaded locally and decoded into an in-memory <strong>HTML5 Canvas</strong>. The Canvas API preserves the alpha channel from the original PNG - all transparent and semi-transparent pixels are maintained intact in the RGBA pixel buffer. The canvas is then exported by calling <code>toDataURL(\'image/webp\')</code>, which applies the browser\'s WebP codec (based on Google\'s libwebp) to generate a more compact file without altering the transparency data.',
120
+ },
121
+ {
122
+ type: 'paragraph',
123
+ html: 'WebP uses two compression modes: lossless mode for images where every pixel must be exactly faithful to the original, and lossy mode for photos and elements where small differences are imperceptible. Lossless mode produces files 26% smaller than PNG; lossy mode can achieve reductions of up to 40% compared to PNG while maintaining excellent visual quality.',
124
+ },
125
+ {
126
+ type: 'tip',
127
+ title: 'Tip: WebP beats both PNG and JPG on the web',
128
+ html: 'WebP in lossless mode is smaller than PNG. WebP in lossy mode is smaller than JPG. This makes WebP the <strong>only format that replaces both</strong> in the web context. Convert your transparent PNGs to WebP before uploading: Google PageSpeed Insights detects it and scores it positively in "Serve images in modern formats" audits.',
129
+ },
130
+ {
131
+ type: 'title',
132
+ text: 'Use cases and compatibility',
133
+ level: 3,
134
+ },
135
+ {
136
+ type: 'list',
137
+ icon: 'mdi:check-circle',
138
+ items: [
139
+ 'Logos and icons with transparent backgrounds for websites and apps.',
140
+ 'Product images with cut-out backgrounds in e-commerce stores.',
141
+ 'CSS sprites and UI elements with alpha transparency.',
142
+ 'Rasterized illustrations and vector graphics for landing pages.',
143
+ 'Article thumbnails with transparent backgrounds in blogs and news portals.',
144
+ ],
145
+ },
146
+ {
147
+ type: 'title',
148
+ text: 'Conclusion',
149
+ level: 3,
150
+ },
151
+ {
152
+ type: 'paragraph',
153
+ html: 'The move from PNG to WebP is the most complete web image optimization available: you get lighter files, preserve transparency, and improve Core Web Vitals metrics without changing anything about your visual design. This tool does it instantly, for free, and completely privately - your images are processed in your browser and never travel to any external server.',
154
+ },
155
+ ];
157
156
 
158
- export const content: PngAWebpLocaleContent = {
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
- };
157
+
158
+ export const content: PngAWebpLocaleContent = {
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
+ };