@jjlmoya/utils-converters 1.7.0 → 1.9.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 (346) hide show
  1. package/package.json +60 -59
  2. package/src/shared/logic/schemas.ts +57 -0
  3. package/src/tests/faq_count.test.ts +13 -4
  4. package/src/tests/i18n_coverage.test.ts +36 -0
  5. package/src/tests/locale_completeness.test.ts +42 -0
  6. package/src/tests/no_h1_in_components.test.ts +48 -0
  7. package/src/tests/schemas_fulfillment.test.ts +23 -0
  8. package/src/tests/seo_length.test.ts +1 -1
  9. package/src/tests/slug_uniqueness.test.ts +81 -0
  10. package/src/tests/title_quality.test.ts +55 -0
  11. package/src/tool/avifAJpg/i18n/de.ts +178 -0
  12. package/src/tool/avifAJpg/i18n/en.ts +2 -12
  13. package/src/tool/avifAJpg/i18n/es.ts +2 -12
  14. package/src/tool/avifAJpg/i18n/fr.ts +2 -12
  15. package/src/tool/avifAJpg/i18n/id.ts +178 -0
  16. package/src/tool/avifAJpg/i18n/it.ts +178 -0
  17. package/src/tool/avifAJpg/i18n/ja.ts +178 -0
  18. package/src/tool/avifAJpg/i18n/ko.ts +178 -0
  19. package/src/tool/avifAJpg/i18n/nl.ts +178 -0
  20. package/src/tool/avifAJpg/i18n/pl.ts +178 -0
  21. package/src/tool/avifAJpg/i18n/pt.ts +178 -0
  22. package/src/tool/avifAJpg/i18n/ru.ts +178 -0
  23. package/src/tool/avifAJpg/i18n/sv.ts +178 -0
  24. package/src/tool/avifAJpg/i18n/tr.ts +178 -0
  25. package/src/tool/avifAJpg/i18n/zh.ts +178 -0
  26. package/src/tool/avifAJpg/index.ts +13 -1
  27. package/src/tool/avifAPng/i18n/de.ts +178 -0
  28. package/src/tool/avifAPng/i18n/en.ts +2 -12
  29. package/src/tool/avifAPng/i18n/es.ts +2 -12
  30. package/src/tool/avifAPng/i18n/fr.ts +2 -12
  31. package/src/tool/avifAPng/i18n/id.ts +178 -0
  32. package/src/tool/avifAPng/i18n/it.ts +178 -0
  33. package/src/tool/avifAPng/i18n/ja.ts +178 -0
  34. package/src/tool/avifAPng/i18n/ko.ts +178 -0
  35. package/src/tool/avifAPng/i18n/nl.ts +178 -0
  36. package/src/tool/avifAPng/i18n/pl.ts +178 -0
  37. package/src/tool/avifAPng/i18n/pt.ts +178 -0
  38. package/src/tool/avifAPng/i18n/ru.ts +178 -0
  39. package/src/tool/avifAPng/i18n/sv.ts +178 -0
  40. package/src/tool/avifAPng/i18n/tr.ts +178 -0
  41. package/src/tool/avifAPng/i18n/zh.ts +178 -0
  42. package/src/tool/avifAPng/index.ts +13 -1
  43. package/src/tool/avifAWebp/i18n/de.ts +178 -0
  44. package/src/tool/avifAWebp/i18n/en.ts +2 -12
  45. package/src/tool/avifAWebp/i18n/es.ts +2 -12
  46. package/src/tool/avifAWebp/i18n/fr.ts +2 -12
  47. package/src/tool/avifAWebp/i18n/id.ts +178 -0
  48. package/src/tool/avifAWebp/i18n/it.ts +178 -0
  49. package/src/tool/avifAWebp/i18n/ja.ts +178 -0
  50. package/src/tool/avifAWebp/i18n/ko.ts +178 -0
  51. package/src/tool/avifAWebp/i18n/nl.ts +178 -0
  52. package/src/tool/avifAWebp/i18n/pl.ts +178 -0
  53. package/src/tool/avifAWebp/i18n/pt.ts +178 -0
  54. package/src/tool/avifAWebp/i18n/ru.ts +178 -0
  55. package/src/tool/avifAWebp/i18n/sv.ts +178 -0
  56. package/src/tool/avifAWebp/i18n/tr.ts +178 -0
  57. package/src/tool/avifAWebp/i18n/zh.ts +178 -0
  58. package/src/tool/avifAWebp/index.ts +13 -1
  59. package/src/tool/bmpAJpg/i18n/de.ts +178 -0
  60. package/src/tool/bmpAJpg/i18n/en.ts +2 -12
  61. package/src/tool/bmpAJpg/i18n/es.ts +2 -12
  62. package/src/tool/bmpAJpg/i18n/fr.ts +2 -12
  63. package/src/tool/bmpAJpg/i18n/id.ts +178 -0
  64. package/src/tool/bmpAJpg/i18n/it.ts +178 -0
  65. package/src/tool/bmpAJpg/i18n/ja.ts +178 -0
  66. package/src/tool/bmpAJpg/i18n/ko.ts +178 -0
  67. package/src/tool/bmpAJpg/i18n/nl.ts +178 -0
  68. package/src/tool/bmpAJpg/i18n/pl.ts +178 -0
  69. package/src/tool/bmpAJpg/i18n/pt.ts +178 -0
  70. package/src/tool/bmpAJpg/i18n/ru.ts +178 -0
  71. package/src/tool/bmpAJpg/i18n/sv.ts +178 -0
  72. package/src/tool/bmpAJpg/i18n/tr.ts +178 -0
  73. package/src/tool/bmpAJpg/i18n/zh.ts +178 -0
  74. package/src/tool/bmpAJpg/index.ts +13 -1
  75. package/src/tool/bmpAPng/i18n/de.ts +177 -0
  76. package/src/tool/bmpAPng/i18n/en.ts +2 -12
  77. package/src/tool/bmpAPng/i18n/es.ts +2 -12
  78. package/src/tool/bmpAPng/i18n/fr.ts +2 -12
  79. package/src/tool/bmpAPng/i18n/id.ts +177 -0
  80. package/src/tool/bmpAPng/i18n/it.ts +177 -0
  81. package/src/tool/bmpAPng/i18n/ja.ts +177 -0
  82. package/src/tool/bmpAPng/i18n/ko.ts +177 -0
  83. package/src/tool/bmpAPng/i18n/nl.ts +177 -0
  84. package/src/tool/bmpAPng/i18n/pl.ts +177 -0
  85. package/src/tool/bmpAPng/i18n/pt.ts +177 -0
  86. package/src/tool/bmpAPng/i18n/ru.ts +177 -0
  87. package/src/tool/bmpAPng/i18n/sv.ts +177 -0
  88. package/src/tool/bmpAPng/i18n/tr.ts +177 -0
  89. package/src/tool/bmpAPng/i18n/zh.ts +177 -0
  90. package/src/tool/bmpAPng/index.ts +13 -1
  91. package/src/tool/bmpAWebp/i18n/de.ts +178 -0
  92. package/src/tool/bmpAWebp/i18n/en.ts +2 -12
  93. package/src/tool/bmpAWebp/i18n/es.ts +2 -12
  94. package/src/tool/bmpAWebp/i18n/fr.ts +2 -12
  95. package/src/tool/bmpAWebp/i18n/id.ts +178 -0
  96. package/src/tool/bmpAWebp/i18n/it.ts +178 -0
  97. package/src/tool/bmpAWebp/i18n/ja.ts +178 -0
  98. package/src/tool/bmpAWebp/i18n/ko.ts +178 -0
  99. package/src/tool/bmpAWebp/i18n/nl.ts +178 -0
  100. package/src/tool/bmpAWebp/i18n/pl.ts +178 -0
  101. package/src/tool/bmpAWebp/i18n/pt.ts +178 -0
  102. package/src/tool/bmpAWebp/i18n/ru.ts +178 -0
  103. package/src/tool/bmpAWebp/i18n/sv.ts +178 -0
  104. package/src/tool/bmpAWebp/i18n/tr.ts +178 -0
  105. package/src/tool/bmpAWebp/i18n/zh.ts +178 -0
  106. package/src/tool/bmpAWebp/index.ts +13 -1
  107. package/src/tool/gifAJpg/i18n/de.ts +178 -0
  108. package/src/tool/gifAJpg/i18n/en.ts +2 -12
  109. package/src/tool/gifAJpg/i18n/es.ts +2 -12
  110. package/src/tool/gifAJpg/i18n/fr.ts +2 -12
  111. package/src/tool/gifAJpg/i18n/id.ts +178 -0
  112. package/src/tool/gifAJpg/i18n/it.ts +178 -0
  113. package/src/tool/gifAJpg/i18n/ja.ts +178 -0
  114. package/src/tool/gifAJpg/i18n/ko.ts +178 -0
  115. package/src/tool/gifAJpg/i18n/nl.ts +178 -0
  116. package/src/tool/gifAJpg/i18n/pl.ts +178 -0
  117. package/src/tool/gifAJpg/i18n/pt.ts +178 -0
  118. package/src/tool/gifAJpg/i18n/ru.ts +178 -0
  119. package/src/tool/gifAJpg/i18n/sv.ts +178 -0
  120. package/src/tool/gifAJpg/i18n/tr.ts +178 -0
  121. package/src/tool/gifAJpg/i18n/zh.ts +178 -0
  122. package/src/tool/gifAJpg/index.ts +13 -1
  123. package/src/tool/gifAPng/i18n/de.ts +178 -0
  124. package/src/tool/gifAPng/i18n/en.ts +2 -12
  125. package/src/tool/gifAPng/i18n/es.ts +2 -12
  126. package/src/tool/gifAPng/i18n/fr.ts +2 -12
  127. package/src/tool/gifAPng/i18n/id.ts +178 -0
  128. package/src/tool/gifAPng/i18n/it.ts +178 -0
  129. package/src/tool/gifAPng/i18n/ja.ts +178 -0
  130. package/src/tool/gifAPng/i18n/ko.ts +178 -0
  131. package/src/tool/gifAPng/i18n/nl.ts +178 -0
  132. package/src/tool/gifAPng/i18n/pl.ts +178 -0
  133. package/src/tool/gifAPng/i18n/pt.ts +178 -0
  134. package/src/tool/gifAPng/i18n/ru.ts +178 -0
  135. package/src/tool/gifAPng/i18n/sv.ts +178 -0
  136. package/src/tool/gifAPng/i18n/tr.ts +178 -0
  137. package/src/tool/gifAPng/i18n/zh.ts +178 -0
  138. package/src/tool/gifAPng/index.ts +12 -0
  139. package/src/tool/gifAWebp/i18n/de.ts +178 -0
  140. package/src/tool/gifAWebp/i18n/en.ts +2 -12
  141. package/src/tool/gifAWebp/i18n/es.ts +2 -12
  142. package/src/tool/gifAWebp/i18n/fr.ts +2 -12
  143. package/src/tool/gifAWebp/i18n/id.ts +178 -0
  144. package/src/tool/gifAWebp/i18n/it.ts +178 -0
  145. package/src/tool/gifAWebp/i18n/ja.ts +178 -0
  146. package/src/tool/gifAWebp/i18n/ko.ts +178 -0
  147. package/src/tool/gifAWebp/i18n/nl.ts +178 -0
  148. package/src/tool/gifAWebp/i18n/pl.ts +178 -0
  149. package/src/tool/gifAWebp/i18n/pt.ts +178 -0
  150. package/src/tool/gifAWebp/i18n/ru.ts +178 -0
  151. package/src/tool/gifAWebp/i18n/sv.ts +178 -0
  152. package/src/tool/gifAWebp/i18n/tr.ts +178 -0
  153. package/src/tool/gifAWebp/i18n/zh.ts +178 -0
  154. package/src/tool/gifAWebp/index.ts +12 -0
  155. package/src/tool/imagenBase64/i18n/de.ts +168 -0
  156. package/src/tool/imagenBase64/i18n/en.ts +2 -12
  157. package/src/tool/imagenBase64/i18n/es.ts +2 -12
  158. package/src/tool/imagenBase64/i18n/fr.ts +2 -12
  159. package/src/tool/imagenBase64/i18n/id.ts +168 -0
  160. package/src/tool/imagenBase64/i18n/it.ts +168 -0
  161. package/src/tool/imagenBase64/i18n/ja.ts +168 -0
  162. package/src/tool/imagenBase64/i18n/ko.ts +168 -0
  163. package/src/tool/imagenBase64/i18n/nl.ts +168 -0
  164. package/src/tool/imagenBase64/i18n/pl.ts +168 -0
  165. package/src/tool/imagenBase64/i18n/pt.ts +173 -0
  166. package/src/tool/imagenBase64/i18n/ru.ts +168 -0
  167. package/src/tool/imagenBase64/i18n/sv.ts +168 -0
  168. package/src/tool/imagenBase64/i18n/tr.ts +168 -0
  169. package/src/tool/imagenBase64/i18n/zh.ts +168 -0
  170. package/src/tool/imagenBase64/index.ts +12 -0
  171. package/src/tool/jpgAIco/i18n/de.ts +183 -0
  172. package/src/tool/jpgAIco/i18n/en.ts +8 -13
  173. package/src/tool/jpgAIco/i18n/es.ts +13 -18
  174. package/src/tool/jpgAIco/i18n/fr.ts +9 -14
  175. package/src/tool/jpgAIco/i18n/id.ts +183 -0
  176. package/src/tool/jpgAIco/i18n/it.ts +183 -0
  177. package/src/tool/jpgAIco/i18n/ja.ts +183 -0
  178. package/src/tool/jpgAIco/i18n/ko.ts +183 -0
  179. package/src/tool/jpgAIco/i18n/nl.ts +183 -0
  180. package/src/tool/jpgAIco/i18n/pl.ts +183 -0
  181. package/src/tool/jpgAIco/i18n/pt.ts +183 -0
  182. package/src/tool/jpgAIco/i18n/ru.ts +183 -0
  183. package/src/tool/jpgAIco/i18n/sv.ts +183 -0
  184. package/src/tool/jpgAIco/i18n/tr.ts +183 -0
  185. package/src/tool/jpgAIco/i18n/zh.ts +183 -0
  186. package/src/tool/jpgAIco/index.ts +12 -0
  187. package/src/tool/jpgAPng/i18n/de.ts +178 -0
  188. package/src/tool/jpgAPng/i18n/en.ts +2 -12
  189. package/src/tool/jpgAPng/i18n/es.ts +2 -12
  190. package/src/tool/jpgAPng/i18n/fr.ts +2 -12
  191. package/src/tool/jpgAPng/i18n/id.ts +178 -0
  192. package/src/tool/jpgAPng/i18n/it.ts +178 -0
  193. package/src/tool/jpgAPng/i18n/ja.ts +178 -0
  194. package/src/tool/jpgAPng/i18n/ko.ts +178 -0
  195. package/src/tool/jpgAPng/i18n/nl.ts +178 -0
  196. package/src/tool/jpgAPng/i18n/pl.ts +178 -0
  197. package/src/tool/jpgAPng/i18n/pt.ts +178 -0
  198. package/src/tool/jpgAPng/i18n/ru.ts +178 -0
  199. package/src/tool/jpgAPng/i18n/sv.ts +178 -0
  200. package/src/tool/jpgAPng/i18n/tr.ts +178 -0
  201. package/src/tool/jpgAPng/i18n/zh.ts +178 -0
  202. package/src/tool/jpgAPng/index.ts +13 -1
  203. package/src/tool/jpgAWebp/i18n/de.ts +178 -0
  204. package/src/tool/jpgAWebp/i18n/en.ts +2 -12
  205. package/src/tool/jpgAWebp/i18n/es.ts +2 -12
  206. package/src/tool/jpgAWebp/i18n/fr.ts +2 -12
  207. package/src/tool/jpgAWebp/i18n/id.ts +178 -0
  208. package/src/tool/jpgAWebp/i18n/it.ts +178 -0
  209. package/src/tool/jpgAWebp/i18n/ja.ts +178 -0
  210. package/src/tool/jpgAWebp/i18n/ko.ts +178 -0
  211. package/src/tool/jpgAWebp/i18n/nl.ts +178 -0
  212. package/src/tool/jpgAWebp/i18n/pl.ts +178 -0
  213. package/src/tool/jpgAWebp/i18n/pt.ts +178 -0
  214. package/src/tool/jpgAWebp/i18n/ru.ts +178 -0
  215. package/src/tool/jpgAWebp/i18n/sv.ts +178 -0
  216. package/src/tool/jpgAWebp/i18n/tr.ts +178 -0
  217. package/src/tool/jpgAWebp/i18n/zh.ts +178 -0
  218. package/src/tool/jpgAWebp/index.ts +12 -0
  219. package/src/tool/pngAIco/i18n/de.ts +183 -0
  220. package/src/tool/pngAIco/i18n/en.ts +8 -13
  221. package/src/tool/pngAIco/i18n/es.ts +19 -24
  222. package/src/tool/pngAIco/i18n/fr.ts +20 -25
  223. package/src/tool/pngAIco/i18n/id.ts +183 -0
  224. package/src/tool/pngAIco/i18n/it.ts +183 -0
  225. package/src/tool/pngAIco/i18n/ja.ts +183 -0
  226. package/src/tool/pngAIco/i18n/ko.ts +183 -0
  227. package/src/tool/pngAIco/i18n/nl.ts +183 -0
  228. package/src/tool/pngAIco/i18n/pl.ts +183 -0
  229. package/src/tool/pngAIco/i18n/pt.ts +183 -0
  230. package/src/tool/pngAIco/i18n/ru.ts +183 -0
  231. package/src/tool/pngAIco/i18n/sv.ts +183 -0
  232. package/src/tool/pngAIco/i18n/tr.ts +183 -0
  233. package/src/tool/pngAIco/i18n/zh.ts +183 -0
  234. package/src/tool/pngAIco/index.ts +12 -0
  235. package/src/tool/pngAJpg/i18n/de.ts +191 -0
  236. package/src/tool/pngAJpg/i18n/en.ts +2 -12
  237. package/src/tool/pngAJpg/i18n/es.ts +2 -12
  238. package/src/tool/pngAJpg/i18n/fr.ts +2 -12
  239. package/src/tool/pngAJpg/i18n/id.ts +191 -0
  240. package/src/tool/pngAJpg/i18n/it.ts +191 -0
  241. package/src/tool/pngAJpg/i18n/ja.ts +191 -0
  242. package/src/tool/pngAJpg/i18n/ko.ts +191 -0
  243. package/src/tool/pngAJpg/i18n/nl.ts +191 -0
  244. package/src/tool/pngAJpg/i18n/pl.ts +191 -0
  245. package/src/tool/pngAJpg/i18n/pt.ts +191 -0
  246. package/src/tool/pngAJpg/i18n/ru.ts +191 -0
  247. package/src/tool/pngAJpg/i18n/sv.ts +191 -0
  248. package/src/tool/pngAJpg/i18n/tr.ts +191 -0
  249. package/src/tool/pngAJpg/i18n/zh.ts +191 -0
  250. package/src/tool/pngAJpg/index.ts +13 -1
  251. package/src/tool/pngAWebp/i18n/de.ts +182 -0
  252. package/src/tool/pngAWebp/i18n/en.ts +2 -12
  253. package/src/tool/pngAWebp/i18n/es.ts +2 -12
  254. package/src/tool/pngAWebp/i18n/fr.ts +2 -12
  255. package/src/tool/pngAWebp/i18n/id.ts +182 -0
  256. package/src/tool/pngAWebp/i18n/it.ts +182 -0
  257. package/src/tool/pngAWebp/i18n/ja.ts +182 -0
  258. package/src/tool/pngAWebp/i18n/ko.ts +182 -0
  259. package/src/tool/pngAWebp/i18n/nl.ts +182 -0
  260. package/src/tool/pngAWebp/i18n/pl.ts +182 -0
  261. package/src/tool/pngAWebp/i18n/pt.ts +182 -0
  262. package/src/tool/pngAWebp/i18n/ru.ts +182 -0
  263. package/src/tool/pngAWebp/i18n/sv.ts +182 -0
  264. package/src/tool/pngAWebp/i18n/tr.ts +182 -0
  265. package/src/tool/pngAWebp/i18n/zh.ts +182 -0
  266. package/src/tool/pngAWebp/index.ts +12 -0
  267. package/src/tool/svgAJpg/i18n/de.ts +178 -0
  268. package/src/tool/svgAJpg/i18n/en.ts +8 -13
  269. package/src/tool/svgAJpg/i18n/es.ts +8 -13
  270. package/src/tool/svgAJpg/i18n/fr.ts +2 -12
  271. package/src/tool/svgAJpg/i18n/id.ts +178 -0
  272. package/src/tool/svgAJpg/i18n/it.ts +178 -0
  273. package/src/tool/svgAJpg/i18n/ja.ts +178 -0
  274. package/src/tool/svgAJpg/i18n/ko.ts +178 -0
  275. package/src/tool/svgAJpg/i18n/nl.ts +178 -0
  276. package/src/tool/svgAJpg/i18n/pl.ts +178 -0
  277. package/src/tool/svgAJpg/i18n/pt.ts +178 -0
  278. package/src/tool/svgAJpg/i18n/ru.ts +178 -0
  279. package/src/tool/svgAJpg/i18n/sv.ts +178 -0
  280. package/src/tool/svgAJpg/i18n/tr.ts +178 -0
  281. package/src/tool/svgAJpg/i18n/zh.ts +178 -0
  282. package/src/tool/svgAJpg/index.ts +12 -0
  283. package/src/tool/svgAPng/i18n/de.ts +178 -0
  284. package/src/tool/svgAPng/i18n/en.ts +8 -13
  285. package/src/tool/svgAPng/i18n/es.ts +31 -36
  286. package/src/tool/svgAPng/i18n/fr.ts +2 -12
  287. package/src/tool/svgAPng/i18n/id.ts +178 -0
  288. package/src/tool/svgAPng/i18n/it.ts +178 -0
  289. package/src/tool/svgAPng/i18n/ja.ts +178 -0
  290. package/src/tool/svgAPng/i18n/ko.ts +178 -0
  291. package/src/tool/svgAPng/i18n/nl.ts +178 -0
  292. package/src/tool/svgAPng/i18n/pl.ts +178 -0
  293. package/src/tool/svgAPng/i18n/pt.ts +178 -0
  294. package/src/tool/svgAPng/i18n/ru.ts +178 -0
  295. package/src/tool/svgAPng/i18n/sv.ts +178 -0
  296. package/src/tool/svgAPng/i18n/tr.ts +178 -0
  297. package/src/tool/svgAPng/i18n/zh.ts +178 -0
  298. package/src/tool/svgAPng/index.ts +12 -0
  299. package/src/tool/webpAIco/i18n/de.ts +183 -0
  300. package/src/tool/webpAIco/i18n/en.ts +8 -13
  301. package/src/tool/webpAIco/i18n/es.ts +9 -14
  302. package/src/tool/webpAIco/i18n/fr.ts +11 -16
  303. package/src/tool/webpAIco/i18n/id.ts +183 -0
  304. package/src/tool/webpAIco/i18n/it.ts +183 -0
  305. package/src/tool/webpAIco/i18n/ja.ts +183 -0
  306. package/src/tool/webpAIco/i18n/ko.ts +183 -0
  307. package/src/tool/webpAIco/i18n/nl.ts +183 -0
  308. package/src/tool/webpAIco/i18n/pl.ts +183 -0
  309. package/src/tool/webpAIco/i18n/pt.ts +183 -0
  310. package/src/tool/webpAIco/i18n/ru.ts +183 -0
  311. package/src/tool/webpAIco/i18n/sv.ts +183 -0
  312. package/src/tool/webpAIco/i18n/tr.ts +183 -0
  313. package/src/tool/webpAIco/i18n/zh.ts +183 -0
  314. package/src/tool/webpAIco/index.ts +12 -0
  315. package/src/tool/webpAJpg/i18n/de.ts +187 -0
  316. package/src/tool/webpAJpg/i18n/en.ts +9 -13
  317. package/src/tool/webpAJpg/i18n/es.ts +37 -42
  318. package/src/tool/webpAJpg/i18n/fr.ts +35 -40
  319. package/src/tool/webpAJpg/i18n/id.ts +182 -0
  320. package/src/tool/webpAJpg/i18n/it.ts +182 -0
  321. package/src/tool/webpAJpg/i18n/ja.ts +182 -0
  322. package/src/tool/webpAJpg/i18n/ko.ts +182 -0
  323. package/src/tool/webpAJpg/i18n/nl.ts +182 -0
  324. package/src/tool/webpAJpg/i18n/pl.ts +182 -0
  325. package/src/tool/webpAJpg/i18n/pt.ts +182 -0
  326. package/src/tool/webpAJpg/i18n/ru.ts +182 -0
  327. package/src/tool/webpAJpg/i18n/sv.ts +182 -0
  328. package/src/tool/webpAJpg/i18n/tr.ts +182 -0
  329. package/src/tool/webpAJpg/i18n/zh.ts +182 -0
  330. package/src/tool/webpAJpg/index.ts +12 -0
  331. package/src/tool/webpAPng/i18n/de.ts +182 -0
  332. package/src/tool/webpAPng/i18n/en.ts +8 -13
  333. package/src/tool/webpAPng/i18n/es.ts +35 -40
  334. package/src/tool/webpAPng/i18n/fr.ts +2 -12
  335. package/src/tool/webpAPng/i18n/id.ts +182 -0
  336. package/src/tool/webpAPng/i18n/it.ts +182 -0
  337. package/src/tool/webpAPng/i18n/ja.ts +182 -0
  338. package/src/tool/webpAPng/i18n/ko.ts +182 -0
  339. package/src/tool/webpAPng/i18n/nl.ts +182 -0
  340. package/src/tool/webpAPng/i18n/pl.ts +182 -0
  341. package/src/tool/webpAPng/i18n/pt.ts +182 -0
  342. package/src/tool/webpAPng/i18n/ru.ts +182 -0
  343. package/src/tool/webpAPng/i18n/sv.ts +182 -0
  344. package/src/tool/webpAPng/i18n/tr.ts +182 -0
  345. package/src/tool/webpAPng/i18n/zh.ts +182 -0
  346. package/src/tool/webpAPng/index.ts +12 -0
@@ -0,0 +1,178 @@
1
+ import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
+ import type { GifAJpgLocaleContent } from '../index';
4
+
5
+ const slug = 'gif-to-jpg-converter';
6
+ const title = 'GIFをJPGにオンラインで変換';
7
+ const description =
8
+ 'GIFファイルから最初のフレームを抽出してJPGに変換します。サーバーを介さず、ブラウザ内でローカル処理を行います。無料で無制限に使用できます。';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'GIFファイルをドラッグ...',
12
+ convertText: '即座にJPGに変換します',
13
+ selectFiles: 'ファイルを選択',
14
+ processedFiles: '処理済みファイル',
15
+ downloadAll: 'すべてダウンロード (.zip)',
16
+ pending: '待機中',
17
+ bibliographyTitle: '参考文献',
18
+ faqTitle: 'よくある質問',
19
+ };
20
+
21
+ const faq: GifAJpgLocaleContent['faq'] = [
22
+ {
23
+ question: 'JPGに変換するとアニメーションはどうなりますか?',
24
+ answer:
25
+ 'JPG形式は静止画専用であり、複数のフレームをサポートしていません。当コンバーターは、GIFシーケンスの最初の画像(フレーム)のみを抽出します。',
26
+ },
27
+ {
28
+ question: '特殊効果や透明な背景は失われますか?',
29
+ answer:
30
+ 'はい、これはJPG標準の仕様です。透明な背景を持つGIFを読み込んだ場合、色の崩れを防ぐために、背景に自動的に白の塗りつぶしレイヤーを挿入します。',
31
+ },
32
+ {
33
+ question: 'コンテンツが保存されることなく、GIFからJPGを抽出できますか?',
34
+ answer:
35
+ 'もちろんです。このツールはHTML5のCanvasを利用したウェブアプリです。すべてのデコード処理は、お客様自身のデバイスのプロセッサで実行されます。',
36
+ },
37
+ ];
38
+
39
+ const howTo: GifAJpgLocaleContent['howTo'] = [
40
+ {
41
+ name: '動く重いファイルをドラッグ',
42
+ text: 'フォルダから変換したいGIFを選択し、処理ボックスへドラッグ&ドロップしてください。',
43
+ },
44
+ {
45
+ name: '最初のフレームをクリーンに抽出',
46
+ text: '一瞬でアニメーションを抽出し、サーバーを経由せずに白背景のJPGを作成します。',
47
+ },
48
+ {
49
+ name: 'ZIPパッケージでまとめて取得',
50
+ text: '個別ダウンロード、または大量のファイルを処理した場合はZIP形式でまとめて取得してください。',
51
+ },
52
+ ];
53
+
54
+ const bibliography: GifAJpgLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'Joint Photographic Experts Group 技術仕様',
57
+ url: 'https://en.wikipedia.org/wiki/JPEG',
58
+ },
59
+ {
60
+ name: 'CompuServe GIF Information',
61
+ url: 'https://www.w3.org/Graphics/GIF/spec-gif89a.txt',
62
+ },
63
+ ];
64
+
65
+ const seo: GifAJpgLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'GIFからJPGへのコンバーター:フレームを高品質な画像として抽出',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'GIFファイルは何十年もの間、インターネット上の短いアニメーションの世界を支配してきました。しかし、そのアニメーションという性質上、サムネイルやSNSのプレビュー、文書用の画像としては不便な場合があります。特定のフレームを高品質な静止画として抽出したい場合、JPGへの変換が最も実用的で互換性の高い解決策です。',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'GIFそれともJPG?対照的な目的を持つ形式',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'GIF(Graphics Interchange Format)は、1フレームあたり256色しか表現できないという厳しい制限のもと、1987年に設計されました。この制限は色数の少ないシンプルなアニメーションでは問題ありませんでしたが、実写写真のような表現には不向きでした。一方、JPGは高度な圧縮アルゴリズムにより、数百万色を表現できます。',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'GIFからフレームを抽出してJPGとして保存することは、ビデオプレーヤーのサムネイル生成、コンテンツ管理プラットフォーム用のプレビュー作成、プレゼン用の静止画取得、複雑なアニメーションの一瞬をアーカイブするなど、多くの用途があります。結果として得られるJPGは、元のGIFよりもはるかに軽量で、汎用性が高いものになります。',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: 'アーキテクチャの比較:ローカル vs クラウド',
91
+ level: 3,
92
+ },
93
+ {
94
+ type: 'comparative',
95
+ items: [
96
+ {
97
+ title: 'クラウドコンバーター',
98
+ description: '処理のためにファイルをリモートサーバーにアップロードするツール。',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'あなたのGIFがインターネット経由で第三者のサーバーに送信される',
103
+ 'アップロードとダウンロードにネットワーク遅延が発生する',
104
+ 'セッションごとのサイズやファイル数に制限がある',
105
+ '他人のサーバーにデータが保持されるリスク',
106
+ ],
107
+ },
108
+ {
109
+ title: '当サイトのローカルアーキテクチャ',
110
+ description: 'Vanilla JSテクノロジーを使用してハードウェア上で直接処理。',
111
+ icon: 'mdi:laptop-mac',
112
+ highlight: true,
113
+ points: [
114
+ 'GIFがデバイスから離れることはありません',
115
+ 'ネットワークの待ち時間なしで即座に処理が完了',
116
+ 'サイズ制限やファイル数制限なし',
117
+ '完全なプライバシー:外部へのデータ送信なし',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'フレーム抽出の仕組み',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'ローカル変換は、HTML5のCanvas APIの性能に支えられています。GIFを読み込むと、ブラウザはメモリ内でそれをネイティブのImage要素としてデコードします。不可視のキャンバス上でレンダリングすることにより、ブラウザのグラフィックエンジンが自動的にアニメーションシーケンスの最初のフレームをキャプチャします。',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'JPG形式は透明度をサポートしていないため、当アルゴリズムは書き出し前に白の背景を適用します。キャンバスの<code>toDataURL(\'image/jpeg\')</code>メソッドは、ネットワーク接続なしで、お客様のコンピュータのRAM内に直接JPGバイトストリームを生成します。結果のファイルは即座にお手元のデバイスに保存されます。',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'GIFの限定されたカラーパレット',
138
+ html: 'GIFは1フレームあたり256色しか保持できません。抽出されたJPGは、元のGIFの限定されたパレットを継承します。そのため、グラデーションや写真が含まれるGIFの場合、色の境界が目立つポスタリゼーションが起こる可能性があります。最高の結果を得るには、シンプルな色使いのGIFやイラストを使用することをお勧めします。',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: '変換後のJPGの使用例と互換性',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'ビデオプラットフォームやCMS用のサムネイルおよびプレビュー。',
150
+ 'ソーシャルネットワーク投稿用のカバー画像。',
151
+ 'Word、PowerPoint、PDFドキュメントへの挿入。',
152
+ 'プレゼン資料やマーケティング素材。',
153
+ 'Windows, macOS, モバイル端末のビューアーでの高い互換性。',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: '結論:アニメーション以上の価値を持つ1フレーム',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: '2 MBのアニメーションGIFから、解像度にもよりますが、わずか50〜200 KBの高品質な静止画JPGを生成できます。当ツールは、サーバーを介さずにお客様のブラウザ内で即座に、プライベートに、そして無制限にこの変換を実行します。アカウント作成や待ち時間は不要です。',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: GifAJpgLocaleContent = {
169
+ slug,
170
+ title,
171
+ description,
172
+ ui,
173
+ seo,
174
+ faq,
175
+ bibliography,
176
+ howTo,
177
+ schemas: generateSchemas({ title, description, inLanguage: 'ja', faq, howTo }),
178
+ };
@@ -0,0 +1,178 @@
1
+ import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
+ import type { GifAJpgLocaleContent } from '../index';
4
+
5
+ const slug = 'gif-to-jpg-converter';
6
+ const title = 'GIF JPG 온라인 변환기';
7
+ const description =
8
+ 'GIF 파일에서 첫 번째 프레임을 추출하여 JPG로 변환하세요. 서버 전송 없음. 브라우저 내 로컬 처리. 무료 및 무제한 이용 가능.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'GIF 파일을 여기로 드래그하세요...',
12
+ convertText: '즉시 JPG로 변환하기',
13
+ selectFiles: '파일 선택',
14
+ processedFiles: '처리된 파일',
15
+ downloadAll: '모두 다운로드 (.zip)',
16
+ pending: '대기 중',
17
+ bibliographyTitle: '참고 문헌',
18
+ faqTitle: '자주 묻는 질문',
19
+ };
20
+
21
+ const faq: GifAJpgLocaleContent['faq'] = [
22
+ {
23
+ question: 'JPG로 변환하면 애니메이션은 어떻게 되나요?',
24
+ answer:
25
+ 'JPG 형식은 정지 이미지 전용이며 여러 프레임을 지원하지 않습니다. 당사의 변환기는 GIF 시퀀스에서 가장 처음에 나타나는 이미지 또는 프레임 하나만을 추출합니다.',
26
+ },
27
+ {
28
+ question: '특수 효과나 투명 배경이 사라지나요?',
29
+ answer:
30
+ '네, 이는 JPG 표준의 특성입니다. 투명 배경이 있는 GIF를 업로드하면 색상 왜곡을 방지하기 위해 자동으로 흰색 배경 레이어를 삽입하여 처리합니다.',
31
+ },
32
+ {
33
+ question: '웹사이트 서버에 저장되지 않고 GIF에서 JPG를 추출할 수 있나요?',
34
+ answer:
35
+ '물론입니다. 이 도구는 HTML5 Canvas 기술을 기반으로 한 웹 앱입니다. 모든 디코딩 작업은 사용자의 기기 내 프로세서에 의해 직접 수행됩니다.',
36
+ },
37
+ ];
38
+
39
+ const howTo: GifAJpgLocaleContent['howTo'] = [
40
+ {
41
+ name: '움직이는 이미지 파일 준비',
42
+ text: '변환하려는 GIF 파일을 폴더에서 선택하여 처리 영역으로 드래그 앤 드롭하세요.',
43
+ },
44
+ {
45
+ name: '첫 프레임 무손실 추출',
46
+ text: '순식간에 애니메이션이 추출되며 외부 서버 연결 없이 로컬에서 흰색 배경의 JPG가 생성됩니다.',
47
+ },
48
+ {
49
+ name: '일괄 다운로드 및 ZIP 보관',
50
+ text: '개별 다운로드 버튼을 누르거나 대량의 파일을 처리한 경우 ZIP 압축 파일로 한번에 받으세요.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: GifAJpgLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'Joint Photographic Experts Group 기술 사양',
57
+ url: 'https://en.wikipedia.org/wiki/JPEG',
58
+ },
59
+ {
60
+ name: 'CompuServe GIF Information',
61
+ url: 'https://www.w3.org/Graphics/GIF/spec-gif89a.txt',
62
+ },
63
+ ];
64
+
65
+ const seo: GifAJpgLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'GIF to JPG 변환기: 애니메이션 프레임을 고품질 정지 이미지로 추출',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'GIF 파일은 수십 년 동안 인터넷의 짧은 애니메이션 문화를 주도해 왔습니다. 하지만 애니메이션 형태는 썸네일, SNS 미리보기, 문서 삽입용 이미지로 활용하기에는 부적합한 경우가 많습니다. 특정 프레임을 고품질 정지 이미지로 추출해야 할 때 JPG 변환은 가장 실용적이고 호환성이 뛰어난 해결책입니다.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'GIF 또는 JPG? 상반된 목적을 가진 두 형식',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'GIF(Graphics Interchange Format)는 프레임당 256색만 표현할 수 있다는 기술적 한계를 안고 1987년에 설계되었습니다. 간단한 그래픽에는 문제가 없었으나 정밀한 사진 표현에는 적합하지 않았습니다. 반면 JPG는 고도의 압축 알고리즘을 통해 수백만 가지 색상을 렌더링할 수 있습니다.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'GIF에서 프레임을 추출하여 JPG로 저장하는 것은 비디오 플레이어의 썸네일 생성, 콘텐츠 관리 플랫폼용 미리보기 제작, 프리젠테이션용 정지 이미지 확보 등 다양한 용도로 활용됩니다. 결과물인 JPG는 원본 GIF보다 훨씬 가볍고 모든 기기에서 완벽하게 호환됩니다.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: '인프라 비교: 로컬 처리 vs 클라우드 저장',
91
+ level: 3,
92
+ },
93
+ {
94
+ type: 'comparative',
95
+ items: [
96
+ {
97
+ title: '클라우드 변환기',
98
+ description: '원본 파일을 타사 서버로 업로드하여 처리하는 도구입니다.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ '사용자의 이미지가 인터넷망을 통해 외부 서버로 전송됨',
103
+ '업로드 및 다운로드 시 네트워크 성능에 따른 지연 발생',
104
+ '서비스에 따라 파일 크기 및 개수 제한이 존재함',
105
+ '타사 서버에 데이터가 남을 수 있는 보안 리스크',
106
+ ],
107
+ },
108
+ {
109
+ title: '당사의 로컬 아키텍처',
110
+ description: '사용자의 하드웨어 내에서 Vanilla JS 기술로 직접 즉시 처리합니다.',
111
+ icon: 'mdi:laptop-mac',
112
+ highlight: true,
113
+ points: [
114
+ 'GIF 파일이 사용자의 기기 밖으로 절대 나가지 않음',
115
+ '네트워크 대기 없이 실시간 추출 속도 제공',
116
+ '파일 용량이나 개수에 대한 인위적인 제한 없음',
117
+ '완벽한 프라이버시 보호: 외부로 0바이트 전송',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: '프레임 추출 기술의 작동 원리',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: '로컬 변환은 HTML5 Canvas API의 성능을 활용합니다. GIF를 로드하면 브라우저는 이를 메모리에 네이티브 Image 데이터로 디코딩합니다. 보이지 않는 캔버스 위에서 렌더링이 이루어지며, 브라우저 엔진은 애니메이션 시퀀스의 첫 번째 프레임을 자동으로 캡처합니다.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'JPG 형식은 투명도를 지원하지 않으므로 내보내기 전에 흰색 배경을 적용합니다. 캔버스의 <code>toDataURL(\'image/jpeg\')</code> 메서드는 네트워크 연결 없이 사용자의 컴퓨터 RAM에서 직접 JPG 바이트 스트림을 생성하며, 결과물은 즉시 사용자의 기기에 저장됩니다.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'GIF의 제한된 색상 팔레트 안내',
138
+ html: 'GIF는 프레임당 256색만 가질 수 있습니다. 추출된 JPG는 원본의 제한된 색상을 그대로 물려받으므로, 그라데이션이 포함된 GIF의 경우 약간의 색 끊김 현상이 보일 수 있습니다. 최상의 결과를 위해 단순한 색상의 그래픽 이미지를 사용하시기 바랍니다.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: '추출된 JPG의 활용 사례 및 호환성',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ '비디오 플랫폼 및 CMS용 고품질 썸네일 미리보기.',
150
+ '소셜 네트워크 게시용 커버 이미지 및 프로필 사진.',
151
+ '워드, 파워포인트, PDF 등 문서 삽입용 이미지.',
152
+ '발표용 파일 및 마케팅 기획안 자료 구축.',
153
+ '윈도우, 맥, 모바일 등 모든 환경의 이미지 뷰어와 완벽 호환.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: '결론: 애니메이션 전체보다 가치 있는 결정적 한 장면',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: '2MB 용량의 GIF 애니메이션에서 약 50~200KB 수준의 가벼운 JPG 프레임을 생성할 수 있습니다. 당사의 도구는 서버에 파일을 업로드하지 않고 브라우저에서 즉시 프라이버시를 보호하며 변환을 완료합니다. 기다림 없이 지금 바로 확인해 보세요.',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: GifAJpgLocaleContent = {
169
+ slug,
170
+ title,
171
+ description,
172
+ ui,
173
+ seo,
174
+ faq,
175
+ bibliography,
176
+ howTo,
177
+ schemas: generateSchemas({ title, description, inLanguage: 'ko', faq, howTo }),
178
+ };
@@ -0,0 +1,178 @@
1
+ import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
+ import type { GifAJpgLocaleContent } from '../index';
4
+
5
+ const slug = 'gif-naar-jpg-converter';
6
+ const title = 'GIF naar JPG Online Converteren';
7
+ const description =
8
+ 'Extraheer het eerste frame uit je GIF\'s en converteer het naar JPG. Zonder server. Lokale verwerking in je browser. Gratis en onbeperkt.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'Sleep GIF-bestanden hierheen...',
12
+ convertText: 'Om ze direct naar JPG te converteren',
13
+ selectFiles: 'Bestanden selecteren',
14
+ processedFiles: 'Verwerkte bestanden',
15
+ downloadAll: 'Alles downloaden (.zip)',
16
+ pending: 'In afwachting',
17
+ bibliographyTitle: 'Bibliografische Referenties',
18
+ faqTitle: 'Veelgestelde Vragen',
19
+ };
20
+
21
+ const faq: GifAJpgLocaleContent['faq'] = [
22
+ {
23
+ question: 'Wat gebeurt er met de animaties als ik naar JPG ga?',
24
+ answer:
25
+ 'Het JPG-formaat is strikt statisch en ondersteunt geen meerdere frames. Onze converter extraheert alleen het eerste beeld of frame dat in de GIF-sequentie verschijnt.',
26
+ },
27
+ {
28
+ question: 'Verlies ik speciale effecten of een transparante achtergrond?',
29
+ answer:
30
+ 'Ja, dat is het natuurlijke gedrag van de JPG-standaard. Als je een GIF met een transparante achtergrond uploadt, voegen we automatisch een solide witte achtergrondlaag toe om kleurcorruptie te voorkomen.',
31
+ },
32
+ {
33
+ question: 'Kan ik JPG-foto\'s uit een GIF extraheren zonder dat de site mijn inhoud opslaat?',
34
+ answer:
35
+ 'Absoluut ja. De tool is een Web App gebaseerd op het Canvas van HTML5. De gehele decodering wordt uitgevoerd door de processor van je eigen fysieke apparaat.',
36
+ },
37
+ ];
38
+
39
+ const howTo: GifAJpgLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Sleep Beweegbare Zware Bestanden',
42
+ text: 'Plaats of sleep die GIF uit je map naar onze verwerkingsbox.',
43
+ },
44
+ {
45
+ name: 'Schone Berekening van het Eerste Frame',
46
+ text: 'In fracties van tijd wordt de animatie geëxtraheerd en de solide witte JPG gemaakt zonder servers te contacteren.',
47
+ },
48
+ {
49
+ name: 'Download ze Verpakt in een ZIP-bestand',
50
+ text: 'Download ze via de knoppen of gebruik de ZIP als je een groot aantal bestanden hebt verwerkt.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: GifAJpgLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'Technische Specificatie Joint Photographic Experts Group',
57
+ url: 'https://en.wikipedia.org/wiki/JPEG',
58
+ },
59
+ {
60
+ name: 'CompuServe GIF Information',
61
+ url: 'https://www.w3.org/Graphics/GIF/spec-gif89a.txt',
62
+ },
63
+ ];
64
+
65
+ const seo: GifAJpgLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'GIF naar JPG Converter: Extraheer Frames als Hoogwaardige Afbeeldingen',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'GIF-bestanden domineren al decennia de wereld van korte animaties op internet. Hun geanimeerde aard maakt ze echter volledig nutteloos als thumbnail, preview voor sociale netwerken of afbeelding voor documenten. Wanneer je een specifiek frame uit een GIF moet extraheren en converteren naar een statisch beeld van hoge kwaliteit, is de conversie naar JPG de meest praktische en compatibele oplossing.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'GIF of JPG? Formaten met tegengestelde doelen',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'De GIF (Graphics Interchange Format) werd in 1987 ontworpen met een strikte beperking die vandaag de dag nog steeds bestaat: het kan slechts 256 kleuren per frame weergeven. Deze technische beperking was niet erg voor eenvoudige animaties met beperkte paletten, maar maakt het een visueel arm formaat voor echte foto-opnamen. De JPG daarentegen kan miljoenen kleuren renderen met geavanceerde perceptuele compressie-algoritmen.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'Het extraheren van een frame uit een GIF en het opslaan als JPG heeft meerdere toepassingen: het genereren van thumbnails voor videospelers, het maken van previews voor contentbeheerplatformen, het verkrijgen van statische beelden voor presentaties of simpelweg het archiveren van een visueel moment uit een complexe animatie. De resulterende JPG zal veel lichter zijn dan de originele GIF en universeel compatibel.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: 'Vergelijking van Architectuur: Lokaal vs Cloud',
91
+ level: 3,
92
+ },
93
+ {
94
+ type: 'comparative',
95
+ items: [
96
+ {
97
+ title: 'Cloud Converters',
98
+ description: 'Tools die je bestanden naar een externe server uploaden om ze te verwerken.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'Je GIF\'s reizen via internet naar servers van derden',
103
+ 'Netwerklatentie bij uploaden en downloaden',
104
+ 'Limieten op grootte en aantal bestanden per sessie',
105
+ 'Risico op gegevensretentie op externe servers',
106
+ ],
107
+ },
108
+ {
109
+ title: 'Onze Lokale Architectuur',
110
+ description: 'Directe verwerking op je hardware via Vanilla JS-technologie.',
111
+ icon: 'mdi:laptop-mac',
112
+ highlight: true,
113
+ points: [
114
+ 'De GIF verlaat nooit je apparaat',
115
+ 'Onmiddellijke snelheid zonder wachttijd op het netwerk',
116
+ 'Zonder limieten op grootte of aantal bestanden',
117
+ 'Volledige privacy: 0 bytes naar buiten verzonden',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Hoe de technische frame-extractie werkt',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'De lokale conversie steunt op de kracht van de Canvas API van HTML5. Wanneer je een GIF laadt, decodeert de browser deze in het geheugen als een eigen Image-element. Door het op een onzichtbaar canvas te renderen, legt de grafische engine van de browser automatisch het eerste frame van de animatiesequentie vast.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Aangezien het JPG-formaat geen transparantie ondersteunt, past ons algoritme een solide witte achtergrond toe voordat het exporteert. De <code>toDataURL(\'image/jpeg\')</code> methode van het canvas genereert de JPG-bytestroom direct in het RAM-geheugen van je computer, zonder enige netwerkverbinding. Het resulterende bestand wordt onmiddellijk naar je apparaat gedownload.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Beperkt kleurenpalet van de GIF',
138
+ html: 'De GIF kan slechts 256 kleuren per frame bevatten. De geëxtraheerde JPG erft dat beperkte palet van het origineel over: als de GIF overgangen of foto\'s had, kan deze er wat geposteriseerd uitzien. Gebruik voor het beste resultaat GIF\'s met eenvoudige kleuren of illustraties.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Gebruiksscenario\'s en compatibiliteit van de resulterende JPG',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Thumbnails en previews voor videoplatforms en CMS.',
150
+ 'Omslagafbeeldingen voor posts op sociale netwerken.',
151
+ 'Invoegen in Word-, PowerPoint- of PDF-documenten.',
152
+ 'Presentatiebestanden en marketingmateriaal.',
153
+ 'Universele compatibiliteit met viewers op Windows, macOS en mobiel.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Conclusie: het frame dat meer waard is dan de animatie',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'Een geanimeerde GIF van 2 MB kan een JPG van het eerste frame produceren van slechts ongeveer 50-200 KB, afhankelijk van de resolutie. Onze tool voert deze conversie onmiddellijk, privé en onbeperkt uit, rechtstreeks in je browser. Geen servers, geen accounts, geen wachttijden.',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: GifAJpgLocaleContent = {
169
+ slug,
170
+ title,
171
+ description,
172
+ ui,
173
+ seo,
174
+ faq,
175
+ bibliography,
176
+ howTo,
177
+ schemas: generateSchemas({ title, description, inLanguage: 'nl', faq, howTo }),
178
+ };