@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.
- package/package.json +60 -59
- package/src/shared/logic/schemas.ts +57 -0
- package/src/tests/faq_count.test.ts +13 -4
- package/src/tests/i18n_coverage.test.ts +36 -0
- package/src/tests/locale_completeness.test.ts +42 -0
- package/src/tests/no_h1_in_components.test.ts +48 -0
- package/src/tests/schemas_fulfillment.test.ts +23 -0
- package/src/tests/seo_length.test.ts +1 -1
- package/src/tests/slug_uniqueness.test.ts +81 -0
- package/src/tests/title_quality.test.ts +55 -0
- package/src/tool/avifAJpg/i18n/de.ts +178 -0
- package/src/tool/avifAJpg/i18n/en.ts +2 -12
- package/src/tool/avifAJpg/i18n/es.ts +2 -12
- package/src/tool/avifAJpg/i18n/fr.ts +2 -12
- package/src/tool/avifAJpg/i18n/id.ts +178 -0
- package/src/tool/avifAJpg/i18n/it.ts +178 -0
- package/src/tool/avifAJpg/i18n/ja.ts +178 -0
- package/src/tool/avifAJpg/i18n/ko.ts +178 -0
- package/src/tool/avifAJpg/i18n/nl.ts +178 -0
- package/src/tool/avifAJpg/i18n/pl.ts +178 -0
- package/src/tool/avifAJpg/i18n/pt.ts +178 -0
- package/src/tool/avifAJpg/i18n/ru.ts +178 -0
- package/src/tool/avifAJpg/i18n/sv.ts +178 -0
- package/src/tool/avifAJpg/i18n/tr.ts +178 -0
- package/src/tool/avifAJpg/i18n/zh.ts +178 -0
- package/src/tool/avifAJpg/index.ts +13 -1
- package/src/tool/avifAPng/i18n/de.ts +178 -0
- package/src/tool/avifAPng/i18n/en.ts +2 -12
- package/src/tool/avifAPng/i18n/es.ts +2 -12
- package/src/tool/avifAPng/i18n/fr.ts +2 -12
- package/src/tool/avifAPng/i18n/id.ts +178 -0
- package/src/tool/avifAPng/i18n/it.ts +178 -0
- package/src/tool/avifAPng/i18n/ja.ts +178 -0
- package/src/tool/avifAPng/i18n/ko.ts +178 -0
- package/src/tool/avifAPng/i18n/nl.ts +178 -0
- package/src/tool/avifAPng/i18n/pl.ts +178 -0
- package/src/tool/avifAPng/i18n/pt.ts +178 -0
- package/src/tool/avifAPng/i18n/ru.ts +178 -0
- package/src/tool/avifAPng/i18n/sv.ts +178 -0
- package/src/tool/avifAPng/i18n/tr.ts +178 -0
- package/src/tool/avifAPng/i18n/zh.ts +178 -0
- package/src/tool/avifAPng/index.ts +13 -1
- package/src/tool/avifAWebp/i18n/de.ts +178 -0
- package/src/tool/avifAWebp/i18n/en.ts +2 -12
- package/src/tool/avifAWebp/i18n/es.ts +2 -12
- package/src/tool/avifAWebp/i18n/fr.ts +2 -12
- package/src/tool/avifAWebp/i18n/id.ts +178 -0
- package/src/tool/avifAWebp/i18n/it.ts +178 -0
- package/src/tool/avifAWebp/i18n/ja.ts +178 -0
- package/src/tool/avifAWebp/i18n/ko.ts +178 -0
- package/src/tool/avifAWebp/i18n/nl.ts +178 -0
- package/src/tool/avifAWebp/i18n/pl.ts +178 -0
- package/src/tool/avifAWebp/i18n/pt.ts +178 -0
- package/src/tool/avifAWebp/i18n/ru.ts +178 -0
- package/src/tool/avifAWebp/i18n/sv.ts +178 -0
- package/src/tool/avifAWebp/i18n/tr.ts +178 -0
- package/src/tool/avifAWebp/i18n/zh.ts +178 -0
- package/src/tool/avifAWebp/index.ts +13 -1
- package/src/tool/bmpAJpg/i18n/de.ts +178 -0
- package/src/tool/bmpAJpg/i18n/en.ts +2 -12
- package/src/tool/bmpAJpg/i18n/es.ts +2 -12
- package/src/tool/bmpAJpg/i18n/fr.ts +2 -12
- package/src/tool/bmpAJpg/i18n/id.ts +178 -0
- package/src/tool/bmpAJpg/i18n/it.ts +178 -0
- package/src/tool/bmpAJpg/i18n/ja.ts +178 -0
- package/src/tool/bmpAJpg/i18n/ko.ts +178 -0
- package/src/tool/bmpAJpg/i18n/nl.ts +178 -0
- package/src/tool/bmpAJpg/i18n/pl.ts +178 -0
- package/src/tool/bmpAJpg/i18n/pt.ts +178 -0
- package/src/tool/bmpAJpg/i18n/ru.ts +178 -0
- package/src/tool/bmpAJpg/i18n/sv.ts +178 -0
- package/src/tool/bmpAJpg/i18n/tr.ts +178 -0
- package/src/tool/bmpAJpg/i18n/zh.ts +178 -0
- package/src/tool/bmpAJpg/index.ts +13 -1
- package/src/tool/bmpAPng/i18n/de.ts +177 -0
- package/src/tool/bmpAPng/i18n/en.ts +2 -12
- package/src/tool/bmpAPng/i18n/es.ts +2 -12
- package/src/tool/bmpAPng/i18n/fr.ts +2 -12
- package/src/tool/bmpAPng/i18n/id.ts +177 -0
- package/src/tool/bmpAPng/i18n/it.ts +177 -0
- package/src/tool/bmpAPng/i18n/ja.ts +177 -0
- package/src/tool/bmpAPng/i18n/ko.ts +177 -0
- package/src/tool/bmpAPng/i18n/nl.ts +177 -0
- package/src/tool/bmpAPng/i18n/pl.ts +177 -0
- package/src/tool/bmpAPng/i18n/pt.ts +177 -0
- package/src/tool/bmpAPng/i18n/ru.ts +177 -0
- package/src/tool/bmpAPng/i18n/sv.ts +177 -0
- package/src/tool/bmpAPng/i18n/tr.ts +177 -0
- package/src/tool/bmpAPng/i18n/zh.ts +177 -0
- package/src/tool/bmpAPng/index.ts +13 -1
- package/src/tool/bmpAWebp/i18n/de.ts +178 -0
- package/src/tool/bmpAWebp/i18n/en.ts +2 -12
- package/src/tool/bmpAWebp/i18n/es.ts +2 -12
- package/src/tool/bmpAWebp/i18n/fr.ts +2 -12
- package/src/tool/bmpAWebp/i18n/id.ts +178 -0
- package/src/tool/bmpAWebp/i18n/it.ts +178 -0
- package/src/tool/bmpAWebp/i18n/ja.ts +178 -0
- package/src/tool/bmpAWebp/i18n/ko.ts +178 -0
- package/src/tool/bmpAWebp/i18n/nl.ts +178 -0
- package/src/tool/bmpAWebp/i18n/pl.ts +178 -0
- package/src/tool/bmpAWebp/i18n/pt.ts +178 -0
- package/src/tool/bmpAWebp/i18n/ru.ts +178 -0
- package/src/tool/bmpAWebp/i18n/sv.ts +178 -0
- package/src/tool/bmpAWebp/i18n/tr.ts +178 -0
- package/src/tool/bmpAWebp/i18n/zh.ts +178 -0
- package/src/tool/bmpAWebp/index.ts +13 -1
- package/src/tool/gifAJpg/i18n/de.ts +178 -0
- package/src/tool/gifAJpg/i18n/en.ts +2 -12
- package/src/tool/gifAJpg/i18n/es.ts +2 -12
- package/src/tool/gifAJpg/i18n/fr.ts +2 -12
- package/src/tool/gifAJpg/i18n/id.ts +178 -0
- package/src/tool/gifAJpg/i18n/it.ts +178 -0
- package/src/tool/gifAJpg/i18n/ja.ts +178 -0
- package/src/tool/gifAJpg/i18n/ko.ts +178 -0
- package/src/tool/gifAJpg/i18n/nl.ts +178 -0
- package/src/tool/gifAJpg/i18n/pl.ts +178 -0
- package/src/tool/gifAJpg/i18n/pt.ts +178 -0
- package/src/tool/gifAJpg/i18n/ru.ts +178 -0
- package/src/tool/gifAJpg/i18n/sv.ts +178 -0
- package/src/tool/gifAJpg/i18n/tr.ts +178 -0
- package/src/tool/gifAJpg/i18n/zh.ts +178 -0
- package/src/tool/gifAJpg/index.ts +13 -1
- package/src/tool/gifAPng/i18n/de.ts +178 -0
- package/src/tool/gifAPng/i18n/en.ts +2 -12
- package/src/tool/gifAPng/i18n/es.ts +2 -12
- package/src/tool/gifAPng/i18n/fr.ts +2 -12
- package/src/tool/gifAPng/i18n/id.ts +178 -0
- package/src/tool/gifAPng/i18n/it.ts +178 -0
- package/src/tool/gifAPng/i18n/ja.ts +178 -0
- package/src/tool/gifAPng/i18n/ko.ts +178 -0
- package/src/tool/gifAPng/i18n/nl.ts +178 -0
- package/src/tool/gifAPng/i18n/pl.ts +178 -0
- package/src/tool/gifAPng/i18n/pt.ts +178 -0
- package/src/tool/gifAPng/i18n/ru.ts +178 -0
- package/src/tool/gifAPng/i18n/sv.ts +178 -0
- package/src/tool/gifAPng/i18n/tr.ts +178 -0
- package/src/tool/gifAPng/i18n/zh.ts +178 -0
- package/src/tool/gifAPng/index.ts +12 -0
- package/src/tool/gifAWebp/i18n/de.ts +178 -0
- package/src/tool/gifAWebp/i18n/en.ts +2 -12
- package/src/tool/gifAWebp/i18n/es.ts +2 -12
- package/src/tool/gifAWebp/i18n/fr.ts +2 -12
- package/src/tool/gifAWebp/i18n/id.ts +178 -0
- package/src/tool/gifAWebp/i18n/it.ts +178 -0
- package/src/tool/gifAWebp/i18n/ja.ts +178 -0
- package/src/tool/gifAWebp/i18n/ko.ts +178 -0
- package/src/tool/gifAWebp/i18n/nl.ts +178 -0
- package/src/tool/gifAWebp/i18n/pl.ts +178 -0
- package/src/tool/gifAWebp/i18n/pt.ts +178 -0
- package/src/tool/gifAWebp/i18n/ru.ts +178 -0
- package/src/tool/gifAWebp/i18n/sv.ts +178 -0
- package/src/tool/gifAWebp/i18n/tr.ts +178 -0
- package/src/tool/gifAWebp/i18n/zh.ts +178 -0
- package/src/tool/gifAWebp/index.ts +12 -0
- package/src/tool/imagenBase64/i18n/de.ts +168 -0
- package/src/tool/imagenBase64/i18n/en.ts +2 -12
- package/src/tool/imagenBase64/i18n/es.ts +2 -12
- package/src/tool/imagenBase64/i18n/fr.ts +2 -12
- package/src/tool/imagenBase64/i18n/id.ts +168 -0
- package/src/tool/imagenBase64/i18n/it.ts +168 -0
- package/src/tool/imagenBase64/i18n/ja.ts +168 -0
- package/src/tool/imagenBase64/i18n/ko.ts +168 -0
- package/src/tool/imagenBase64/i18n/nl.ts +168 -0
- package/src/tool/imagenBase64/i18n/pl.ts +168 -0
- package/src/tool/imagenBase64/i18n/pt.ts +173 -0
- package/src/tool/imagenBase64/i18n/ru.ts +168 -0
- package/src/tool/imagenBase64/i18n/sv.ts +168 -0
- package/src/tool/imagenBase64/i18n/tr.ts +168 -0
- package/src/tool/imagenBase64/i18n/zh.ts +168 -0
- package/src/tool/imagenBase64/index.ts +12 -0
- package/src/tool/jpgAIco/i18n/de.ts +183 -0
- package/src/tool/jpgAIco/i18n/en.ts +8 -13
- package/src/tool/jpgAIco/i18n/es.ts +13 -18
- package/src/tool/jpgAIco/i18n/fr.ts +9 -14
- package/src/tool/jpgAIco/i18n/id.ts +183 -0
- package/src/tool/jpgAIco/i18n/it.ts +183 -0
- package/src/tool/jpgAIco/i18n/ja.ts +183 -0
- package/src/tool/jpgAIco/i18n/ko.ts +183 -0
- package/src/tool/jpgAIco/i18n/nl.ts +183 -0
- package/src/tool/jpgAIco/i18n/pl.ts +183 -0
- package/src/tool/jpgAIco/i18n/pt.ts +183 -0
- package/src/tool/jpgAIco/i18n/ru.ts +183 -0
- package/src/tool/jpgAIco/i18n/sv.ts +183 -0
- package/src/tool/jpgAIco/i18n/tr.ts +183 -0
- package/src/tool/jpgAIco/i18n/zh.ts +183 -0
- package/src/tool/jpgAIco/index.ts +12 -0
- package/src/tool/jpgAPng/i18n/de.ts +178 -0
- package/src/tool/jpgAPng/i18n/en.ts +2 -12
- package/src/tool/jpgAPng/i18n/es.ts +2 -12
- package/src/tool/jpgAPng/i18n/fr.ts +2 -12
- package/src/tool/jpgAPng/i18n/id.ts +178 -0
- package/src/tool/jpgAPng/i18n/it.ts +178 -0
- package/src/tool/jpgAPng/i18n/ja.ts +178 -0
- package/src/tool/jpgAPng/i18n/ko.ts +178 -0
- package/src/tool/jpgAPng/i18n/nl.ts +178 -0
- package/src/tool/jpgAPng/i18n/pl.ts +178 -0
- package/src/tool/jpgAPng/i18n/pt.ts +178 -0
- package/src/tool/jpgAPng/i18n/ru.ts +178 -0
- package/src/tool/jpgAPng/i18n/sv.ts +178 -0
- package/src/tool/jpgAPng/i18n/tr.ts +178 -0
- package/src/tool/jpgAPng/i18n/zh.ts +178 -0
- package/src/tool/jpgAPng/index.ts +13 -1
- package/src/tool/jpgAWebp/i18n/de.ts +178 -0
- package/src/tool/jpgAWebp/i18n/en.ts +2 -12
- package/src/tool/jpgAWebp/i18n/es.ts +2 -12
- package/src/tool/jpgAWebp/i18n/fr.ts +2 -12
- package/src/tool/jpgAWebp/i18n/id.ts +178 -0
- package/src/tool/jpgAWebp/i18n/it.ts +178 -0
- package/src/tool/jpgAWebp/i18n/ja.ts +178 -0
- package/src/tool/jpgAWebp/i18n/ko.ts +178 -0
- package/src/tool/jpgAWebp/i18n/nl.ts +178 -0
- package/src/tool/jpgAWebp/i18n/pl.ts +178 -0
- package/src/tool/jpgAWebp/i18n/pt.ts +178 -0
- package/src/tool/jpgAWebp/i18n/ru.ts +178 -0
- package/src/tool/jpgAWebp/i18n/sv.ts +178 -0
- package/src/tool/jpgAWebp/i18n/tr.ts +178 -0
- package/src/tool/jpgAWebp/i18n/zh.ts +178 -0
- package/src/tool/jpgAWebp/index.ts +12 -0
- package/src/tool/pngAIco/i18n/de.ts +183 -0
- package/src/tool/pngAIco/i18n/en.ts +8 -13
- package/src/tool/pngAIco/i18n/es.ts +19 -24
- package/src/tool/pngAIco/i18n/fr.ts +20 -25
- package/src/tool/pngAIco/i18n/id.ts +183 -0
- package/src/tool/pngAIco/i18n/it.ts +183 -0
- package/src/tool/pngAIco/i18n/ja.ts +183 -0
- package/src/tool/pngAIco/i18n/ko.ts +183 -0
- package/src/tool/pngAIco/i18n/nl.ts +183 -0
- package/src/tool/pngAIco/i18n/pl.ts +183 -0
- package/src/tool/pngAIco/i18n/pt.ts +183 -0
- package/src/tool/pngAIco/i18n/ru.ts +183 -0
- package/src/tool/pngAIco/i18n/sv.ts +183 -0
- package/src/tool/pngAIco/i18n/tr.ts +183 -0
- package/src/tool/pngAIco/i18n/zh.ts +183 -0
- package/src/tool/pngAIco/index.ts +12 -0
- package/src/tool/pngAJpg/i18n/de.ts +191 -0
- package/src/tool/pngAJpg/i18n/en.ts +2 -12
- package/src/tool/pngAJpg/i18n/es.ts +2 -12
- package/src/tool/pngAJpg/i18n/fr.ts +2 -12
- package/src/tool/pngAJpg/i18n/id.ts +191 -0
- package/src/tool/pngAJpg/i18n/it.ts +191 -0
- package/src/tool/pngAJpg/i18n/ja.ts +191 -0
- package/src/tool/pngAJpg/i18n/ko.ts +191 -0
- package/src/tool/pngAJpg/i18n/nl.ts +191 -0
- package/src/tool/pngAJpg/i18n/pl.ts +191 -0
- package/src/tool/pngAJpg/i18n/pt.ts +191 -0
- package/src/tool/pngAJpg/i18n/ru.ts +191 -0
- package/src/tool/pngAJpg/i18n/sv.ts +191 -0
- package/src/tool/pngAJpg/i18n/tr.ts +191 -0
- package/src/tool/pngAJpg/i18n/zh.ts +191 -0
- package/src/tool/pngAJpg/index.ts +13 -1
- package/src/tool/pngAWebp/i18n/de.ts +182 -0
- package/src/tool/pngAWebp/i18n/en.ts +2 -12
- package/src/tool/pngAWebp/i18n/es.ts +2 -12
- package/src/tool/pngAWebp/i18n/fr.ts +2 -12
- package/src/tool/pngAWebp/i18n/id.ts +182 -0
- package/src/tool/pngAWebp/i18n/it.ts +182 -0
- package/src/tool/pngAWebp/i18n/ja.ts +182 -0
- package/src/tool/pngAWebp/i18n/ko.ts +182 -0
- package/src/tool/pngAWebp/i18n/nl.ts +182 -0
- package/src/tool/pngAWebp/i18n/pl.ts +182 -0
- package/src/tool/pngAWebp/i18n/pt.ts +182 -0
- package/src/tool/pngAWebp/i18n/ru.ts +182 -0
- package/src/tool/pngAWebp/i18n/sv.ts +182 -0
- package/src/tool/pngAWebp/i18n/tr.ts +182 -0
- package/src/tool/pngAWebp/i18n/zh.ts +182 -0
- package/src/tool/pngAWebp/index.ts +12 -0
- package/src/tool/svgAJpg/i18n/de.ts +178 -0
- package/src/tool/svgAJpg/i18n/en.ts +8 -13
- package/src/tool/svgAJpg/i18n/es.ts +8 -13
- package/src/tool/svgAJpg/i18n/fr.ts +2 -12
- package/src/tool/svgAJpg/i18n/id.ts +178 -0
- package/src/tool/svgAJpg/i18n/it.ts +178 -0
- package/src/tool/svgAJpg/i18n/ja.ts +178 -0
- package/src/tool/svgAJpg/i18n/ko.ts +178 -0
- package/src/tool/svgAJpg/i18n/nl.ts +178 -0
- package/src/tool/svgAJpg/i18n/pl.ts +178 -0
- package/src/tool/svgAJpg/i18n/pt.ts +178 -0
- package/src/tool/svgAJpg/i18n/ru.ts +178 -0
- package/src/tool/svgAJpg/i18n/sv.ts +178 -0
- package/src/tool/svgAJpg/i18n/tr.ts +178 -0
- package/src/tool/svgAJpg/i18n/zh.ts +178 -0
- package/src/tool/svgAJpg/index.ts +12 -0
- package/src/tool/svgAPng/i18n/de.ts +178 -0
- package/src/tool/svgAPng/i18n/en.ts +8 -13
- package/src/tool/svgAPng/i18n/es.ts +31 -36
- package/src/tool/svgAPng/i18n/fr.ts +2 -12
- package/src/tool/svgAPng/i18n/id.ts +178 -0
- package/src/tool/svgAPng/i18n/it.ts +178 -0
- package/src/tool/svgAPng/i18n/ja.ts +178 -0
- package/src/tool/svgAPng/i18n/ko.ts +178 -0
- package/src/tool/svgAPng/i18n/nl.ts +178 -0
- package/src/tool/svgAPng/i18n/pl.ts +178 -0
- package/src/tool/svgAPng/i18n/pt.ts +178 -0
- package/src/tool/svgAPng/i18n/ru.ts +178 -0
- package/src/tool/svgAPng/i18n/sv.ts +178 -0
- package/src/tool/svgAPng/i18n/tr.ts +178 -0
- package/src/tool/svgAPng/i18n/zh.ts +178 -0
- package/src/tool/svgAPng/index.ts +12 -0
- package/src/tool/webpAIco/i18n/de.ts +183 -0
- package/src/tool/webpAIco/i18n/en.ts +8 -13
- package/src/tool/webpAIco/i18n/es.ts +9 -14
- package/src/tool/webpAIco/i18n/fr.ts +11 -16
- package/src/tool/webpAIco/i18n/id.ts +183 -0
- package/src/tool/webpAIco/i18n/it.ts +183 -0
- package/src/tool/webpAIco/i18n/ja.ts +183 -0
- package/src/tool/webpAIco/i18n/ko.ts +183 -0
- package/src/tool/webpAIco/i18n/nl.ts +183 -0
- package/src/tool/webpAIco/i18n/pl.ts +183 -0
- package/src/tool/webpAIco/i18n/pt.ts +183 -0
- package/src/tool/webpAIco/i18n/ru.ts +183 -0
- package/src/tool/webpAIco/i18n/sv.ts +183 -0
- package/src/tool/webpAIco/i18n/tr.ts +183 -0
- package/src/tool/webpAIco/i18n/zh.ts +183 -0
- package/src/tool/webpAIco/index.ts +12 -0
- package/src/tool/webpAJpg/i18n/de.ts +187 -0
- package/src/tool/webpAJpg/i18n/en.ts +9 -13
- package/src/tool/webpAJpg/i18n/es.ts +37 -42
- package/src/tool/webpAJpg/i18n/fr.ts +35 -40
- package/src/tool/webpAJpg/i18n/id.ts +182 -0
- package/src/tool/webpAJpg/i18n/it.ts +182 -0
- package/src/tool/webpAJpg/i18n/ja.ts +182 -0
- package/src/tool/webpAJpg/i18n/ko.ts +182 -0
- package/src/tool/webpAJpg/i18n/nl.ts +182 -0
- package/src/tool/webpAJpg/i18n/pl.ts +182 -0
- package/src/tool/webpAJpg/i18n/pt.ts +182 -0
- package/src/tool/webpAJpg/i18n/ru.ts +182 -0
- package/src/tool/webpAJpg/i18n/sv.ts +182 -0
- package/src/tool/webpAJpg/i18n/tr.ts +182 -0
- package/src/tool/webpAJpg/i18n/zh.ts +182 -0
- package/src/tool/webpAJpg/index.ts +12 -0
- package/src/tool/webpAPng/i18n/de.ts +182 -0
- package/src/tool/webpAPng/i18n/en.ts +8 -13
- package/src/tool/webpAPng/i18n/es.ts +35 -40
- package/src/tool/webpAPng/i18n/fr.ts +2 -12
- package/src/tool/webpAPng/i18n/id.ts +182 -0
- package/src/tool/webpAPng/i18n/it.ts +182 -0
- package/src/tool/webpAPng/i18n/ja.ts +182 -0
- package/src/tool/webpAPng/i18n/ko.ts +182 -0
- package/src/tool/webpAPng/i18n/nl.ts +182 -0
- package/src/tool/webpAPng/i18n/pl.ts +182 -0
- package/src/tool/webpAPng/i18n/pt.ts +182 -0
- package/src/tool/webpAPng/i18n/ru.ts +182 -0
- package/src/tool/webpAPng/i18n/sv.ts +182 -0
- package/src/tool/webpAPng/i18n/tr.ts +182 -0
- package/src/tool/webpAPng/i18n/zh.ts +182 -0
- 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 { GifAPngLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'gif-to-png-converter';
|
|
6
|
+
const title = 'GIFをPNGにオンラインで変換';
|
|
7
|
+
const description =
|
|
8
|
+
'GIFファイルから最初のフレームを抽出し、透明度を維持したままPNGに変換します。サーバー不要。ブラウザ内ローカル処理。無料。';
|
|
9
|
+
|
|
10
|
+
const ui: ImageConverterUI = {
|
|
11
|
+
dragText: 'GIFファイルをドラッグ...',
|
|
12
|
+
convertText: '即座にPNGに変換します',
|
|
13
|
+
selectFiles: 'ファイルを選択',
|
|
14
|
+
processedFiles: '処理済みファイル',
|
|
15
|
+
downloadAll: 'すべてダウンロード (.zip)',
|
|
16
|
+
pending: '待機中',
|
|
17
|
+
bibliographyTitle: '参考文献',
|
|
18
|
+
faqTitle: 'よくある質問',
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const faq: GifAPngLocaleContent['faq'] = [
|
|
22
|
+
{
|
|
23
|
+
question: 'なぜGIFのようなアニメーション形式をPNGのような静的な形式に変換するのですか?',
|
|
24
|
+
answer:
|
|
25
|
+
'多くのSNSやアバターでは、動く画像がサポートされていない場合があります。複雑なGIFから最初の1フレームを高品質なPNGとして抽出することで、制限を回避し、不要なファイルサイズを削減できます。',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: '元のGIFの透明度は、変換後のPNGでも維持されますか?',
|
|
29
|
+
answer:
|
|
30
|
+
'はい、JPGとは異なり、PNG形式はアルファチャンネルを保持します。元のGIFに透明な背景があった場合、PNGでも境界線を鮮明に保ったまま透明度が維持されます。',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: '処理後、画像は一定期間サーバーに保存されますか?',
|
|
34
|
+
answer:
|
|
35
|
+
'サーバーがお客様のGIFを保持することはありません。Web Canvas APIにより、すべての抽出処理はローカルで完了します。お客様のPCのプロセッサが、ネットワーク通信なしで安全にファイルをデコードします。',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const howTo: GifAPngLocaleContent['howTo'] = [
|
|
40
|
+
{
|
|
41
|
+
name: 'アニメーションを準備',
|
|
42
|
+
text: '変換したいGIFファイルを処理ボックスへドラッグ&ドロップしてください。',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: '完璧な抽出写真',
|
|
46
|
+
text: 'システムが動きの起点を正確に捉え、数ミリ秒で非の打ち所のないコピーを作成します。',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: '静止画を保存',
|
|
50
|
+
text: '静的なPNG形式に変換されたGIFアバターを、ZIP形式でまとめて保存してください。',
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
const bibliography: GifAPngLocaleContent['bibliography'] = [
|
|
55
|
+
{
|
|
56
|
+
name: 'World Wide Web Consortium: PNG format',
|
|
57
|
+
url: 'https://www.w3.org/TR/png/',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'CompuServe GIF Information',
|
|
61
|
+
url: 'https://www.w3.org/Graphics/GIF/spec-gif89a.txt',
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const seo: GifAPngLocaleContent['seo'] = [
|
|
66
|
+
{
|
|
67
|
+
type: 'title',
|
|
68
|
+
text: 'GIFからPNGへのコンバーター:GIFのカラーと透明度の限界を克服',
|
|
69
|
+
level: 2,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'paragraph',
|
|
73
|
+
html: 'GIFは、モニターがわずか256色しか表示できなかった時代に設計されました。数十年経った今でも、その制限は大きな弱点となっています。PNGは、ロゴ、アイコン、インターフェースのグラフィック、そしてどんな背景色の上でも完璧に見える必要がある透明な背景を持つ画像など、品質と透明度が重要視されるすべてのケースでGIFに代わるものとして誕生しました。',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'title',
|
|
77
|
+
text: 'GIF vs PNG:1600万色の革命',
|
|
78
|
+
level: 3,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'paragraph',
|
|
82
|
+
html: 'GIFとPNGの最も決定的な違いは色数だけではありません。GIFはバイナリ透過(ピクセルが不透明か完全に透明かのどちらか)のみをサポートしており、グラデーションには対応していません。一方、PNGはピクセルごとに256段階の不透明度を設定できるフルアルファチャンネルをサポートしています。これにより、PNGのロゴの境界線は完璧に滑らかになりますが、GIFのロゴの境界線はカラー背景の上で特徴的な「ギザギザ」が目立ってしまいます。',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
type: 'paragraph',
|
|
86
|
+
html: '優れた透明度に加え、PNGはGIFの256色の制限を取り払いました。スクリーンショット、グラデーションのあるイラスト、影のあるロゴなど、すべてがPNGでは大幅にきれいに見えます。また、可逆圧縮であるため、JPG変換で発生するようなノイズ(アーティファクト)がなく、各ピクセルが元の値を正確に保持します。',
|
|
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
|
+
'絶対的なプライバシー:外部への送信なし',
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
type: 'title',
|
|
124
|
+
text: 'ブラウザ内でのGIFからPNGへの変換の仕組み',
|
|
125
|
+
level: 3,
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'paragraph',
|
|
129
|
+
html: '変換にはブラウザのCanvas APIを使用します。GIFはメモリ内でネイティブのImage要素としてデコードされます。HTML5キャンバスへのレンダリングにより、ブラウザのグラフィックエンジンが元の透明度情報を維持したまま最初のフレームをキャプチャします。',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'paragraph',
|
|
133
|
+
html: 'JPG変換とは異なり、PNGでは背景を白く塗りつぶす必要はありません。元のGIFのアルファチャンネルは、エクスポートされたPNGに直接引き継がれます。キャンバスの<code>toDataURL(\'image/png\')</code>メソッドは、ネットワーク通信を行わずにお客様のコンピュータのRAM内に直接PNGバイトストリームを生成し、ファイルが即座にダウンロードされます。',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'tip',
|
|
137
|
+
title: 'GIFのバイナリ透過 vs PNGのアルファチャンネル',
|
|
138
|
+
html: 'GIFは、不透明か透明かの2値しかサポートしていません。PNGに変換する際、GIFの半透明なピクセルはブラウザが解釈した通りに保持されます。もしGIFにギザギザの境界線がある場合、PNGでもそれは維持されますが、PNGであれば後から画像エディタで境界線を滑らかに補正することが可能です。これは元のGIFでは不可能なことです。',
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
type: 'title',
|
|
142
|
+
text: '変換後のPNGの使用例と互換性',
|
|
143
|
+
level: 3,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
type: 'list',
|
|
147
|
+
icon: 'mdi:check-circle',
|
|
148
|
+
items: [
|
|
149
|
+
'あらゆる背景色の上で使用できるロゴやアイコン。',
|
|
150
|
+
'Discord, Telegram, Slack, ゲームプラットフォーム用のアバター。',
|
|
151
|
+
'ウェブやモバイルアプリのインターフェース用画像。',
|
|
152
|
+
'透明な背景を持つパーソナライズされたステッカーや絵文字。',
|
|
153
|
+
'技術文書用のスクリーンショットやUI要素。',
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'title',
|
|
158
|
+
text: '結論:PNGは、GIFがずっと「なりたかった」姿です',
|
|
159
|
+
level: 3,
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
type: 'paragraph',
|
|
163
|
+
html: 'GIFからPNGに変換することは、単に形式を変えるだけではありません。画像を、GIFが決して到達できなかった現代の標準へとアップデートすることです。より多くの色、より優れた透明度、より軽いサイズ。当ツールは、外部へのデータ送信なしで、お客様のブラウザ内で数ミリ秒でこの変換を完了させます。',
|
|
164
|
+
},
|
|
165
|
+
];
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
export const content: GifAPngLocaleContent = {
|
|
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 { GifAPngLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'gif-to-png-converter';
|
|
6
|
+
const title = 'GIF PNG 온라인 변환기';
|
|
7
|
+
const description =
|
|
8
|
+
'GIF 파일에서 첫 번째 프레임을 추출하고 투명도를 유지하여 PNG로 변환하세요. 서버 필요 없음. 로컬 처리. 무료 이용 가능.';
|
|
9
|
+
|
|
10
|
+
const ui: ImageConverterUI = {
|
|
11
|
+
dragText: 'GIF 파일을 여기로 드래그하세요...',
|
|
12
|
+
convertText: '즉시 PNG로 변환하기',
|
|
13
|
+
selectFiles: '파일 선택',
|
|
14
|
+
processedFiles: '처리된 파일',
|
|
15
|
+
downloadAll: '모두 다운로드 (.zip)',
|
|
16
|
+
pending: '대기 중',
|
|
17
|
+
bibliographyTitle: '참고 문헌',
|
|
18
|
+
faqTitle: '자주 묻는 질문',
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const faq: GifAPngLocaleContent['faq'] = [
|
|
22
|
+
{
|
|
23
|
+
question: '왜 GIF와 같은 애니메이션 형식을 PNG와 같은 정지 형식으로 변환하나요?',
|
|
24
|
+
answer:
|
|
25
|
+
'많은 SNS나 아바타 서비스는 움직이는 이미지를 지원하지 않을 수 있습니다. 복잡한 GIF에서 첫 프레임을 고품질 PNG로 추출하면 이러한 제한을 해결하고 불필요한 파일 용량을 줄일 수 있습니다.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: '기존 GIF의 투명도가 변환된 PNG에서도 유지되나요?',
|
|
29
|
+
answer:
|
|
30
|
+
'네, JPG와 달리 PNG 형식은 알파 채널을 유지합니다. 원본 GIF에 투명 배경이 있었다면 PNG에서도 경계선을 선명하게 유지하며 투명도가 보존됩니다.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: '처리 후 내 이미지가 서버에 잠시 동안 보관되나요?',
|
|
34
|
+
answer:
|
|
35
|
+
'어떤 서버도 사용자의 GIF를 보관하지 않습니다. Web Canvas API 덕분에 모든 추출 과정은 로컬에서 이루어집니다. 외부 네트워크 연결 없이 사용자의 PC 프로세서가 안전하게 파일을 디코딩합니다.',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const howTo: GifAPngLocaleContent['howTo'] = [
|
|
40
|
+
{
|
|
41
|
+
name: '애니메이션 파일 준비',
|
|
42
|
+
text: '변환하려는 용량이 큰 GIF 파일들을 입력 영역으로 드래그 앤 드롭하세요.',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: '완벽한 프레임 추출',
|
|
46
|
+
text: '시스템이 이미지의 정확한 시작점을 포착하여 수 밀리초 내에 무결점 복사본을 만들어 냅니다.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: '정지 이미지 저장',
|
|
50
|
+
text: '정지된 PNG 형식으로 변환된 GIF 아바타들을 ZIP 파일로 묶어서 대량 저장하세요.',
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
const bibliography: GifAPngLocaleContent['bibliography'] = [
|
|
55
|
+
{
|
|
56
|
+
name: 'World Wide Web Consortium: PNG format',
|
|
57
|
+
url: 'https://www.w3.org/TR/png/',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'CompuServe GIF Information',
|
|
61
|
+
url: 'https://www.w3.org/Graphics/GIF/spec-gif89a.txt',
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const seo: GifAPngLocaleContent['seo'] = [
|
|
66
|
+
{
|
|
67
|
+
type: 'title',
|
|
68
|
+
text: 'GIF to PNG 변환기: GIF의 색상과 투명도 한계를 넘어서는 품질',
|
|
69
|
+
level: 2,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'paragraph',
|
|
73
|
+
html: 'GIF는 모니터가 겨우 256색만 표현할 수 있던 시절에 설계되었습니다. 수십 년이 지난 지금도 이러한 한계는 큰 약점으로 남아 있습니다. PNG는 바로 이러한 품질과 투명도가 중요한 모든 경우(로고, 아이콘, 인터페이스 그래픽, 어떤 배경색 위에서도 완벽하게 보여야 하는 투명 배경 이미지 등)에서 GIF를 대체하기 위해 탄생했습니다.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'title',
|
|
77
|
+
text: 'GIF vs PNG: 1,600만 색상의 혁명',
|
|
78
|
+
level: 3,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'paragraph',
|
|
82
|
+
html: 'GIF와 PNG의 가장 결정적인 차이점은 색상 수만이 아닙니다. GIF는 이진 투명도(불투명하거나 완전히 투명함)만을 지원하여 그라데이션 처리가 불가능합니다. 반면 PNG는 픽셀당 256단계의 불투명도를 부여하는 전체 알파 채널을 지원합니다. 이는 PNG 로고의 경계선이 완벽하게 부드럽게 보정될 수 있음을 의미하며, GIF 로고는 유색 배경 위에서 특유의 계단 현상이 나타납니다.',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
type: 'paragraph',
|
|
86
|
+
html: '우수한 투명도 외에도 PNG는 GIF의 256색 제한을 없앴습니다. 스크린샷, 그래데이션이 있는 일러스트레이션, 그림자가 있는 로고 등 모든 이미지가 PNG에서 훨씬 더 선명하게 보입니다. 또한 무손실 압축이므로 JPG 변환 시 발생하는 노이즈 없이 각 픽셀이 원본 값을 정확하게 유지합니다.',
|
|
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: '로컬 환경의 GIF to PNG 변환 원리',
|
|
125
|
+
level: 3,
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'paragraph',
|
|
129
|
+
html: '이 변환은 브라우저의 Canvas API를 활용합니다. GIF는 메모리 내에서 네이티브 Image 요소로 디코딩됩니다. HTML5 캔버스 위에서 렌더링이 이루어지며, 브라우저 엔진은 원본의 투명도 정보를 그대로 유지하면서 첫 번째 프레임을 캡처합니다.',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'paragraph',
|
|
133
|
+
html: 'JPG 변환과 달리 PNG는 흰색 배경을 추가할 필요가 없습니다. 원본 GIF의 알파 채널이 내보낸 PNG 파일에 그대로 보존됩니다. 캔버스의 <code>toDataURL(\'image/png\')</code> 메서드는 네트워크 전송 없이 사용자의 컴퓨터 RAM에서 직접 PNG 바이트 스트림을 생성하며, 파일은 즉시 다운로드됩니다.',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'tip',
|
|
137
|
+
title: 'GIF의 이진 투명도 vs PNG의 알파 채널 비교',
|
|
138
|
+
html: 'GIF는 불투명하거나 투명한 두 가지 상태만 지원합니다. PNG로 변환하면 GIF의 반투명한 픽셀들이 브라우저가 해석한 그대로 유지됩니다. 만약 원본 GIF에 계단 현상이 있었다면 PNG에서도 그대로 나타나지만, PNG에서는 이미지 편집기를 통해 부드러운 가장자리 처리가 가능해집니다. 이는 원본 GIF에서는 할 수 없는 작업입니다.',
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
type: 'title',
|
|
142
|
+
text: '변환된 PNG의 활용 사례 및 호환성',
|
|
143
|
+
level: 3,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
type: 'list',
|
|
147
|
+
icon: 'mdi:check-circle',
|
|
148
|
+
items: [
|
|
149
|
+
'어떠한 배경색 위에서도 자연스럽게 어울리는 로고 및 아이콘.',
|
|
150
|
+
'디스코드, 텔레그램, 슬랙 및 게이밍 플랫폼용 아바타 이미지.',
|
|
151
|
+
'웹 및 모바일 앱용 고해상도 인터페이스 그래픽.',
|
|
152
|
+
'투명 배경을 가진 개인화된 스티커 및 이모지.',
|
|
153
|
+
'기술 문서 제작을 위한 스크린샷 및 UI 요소.',
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'title',
|
|
158
|
+
text: '결론: PNG는 GIF가 항상 꿈꿔왔던 모습입니다',
|
|
159
|
+
level: 3,
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
type: 'paragraph',
|
|
163
|
+
html: 'GIF에서 PNG로 변환하는 것은 단순한 확장자 변경이 아닙니다. 이미지를 GIF가 결코 도달할 수 없었던 현대적인 표준으로 업데이트하는 과정입니다. 더 많은 색상, 더 뛰어난 투명도, 더 가벼운 용량을 경험해 보세요. 당사의 도구는 외부로 데이터를 전송하지 않고 브라우저에서 수 밀리초 만에 이 과정을 완료합니다.',
|
|
164
|
+
},
|
|
165
|
+
];
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
export const content: GifAPngLocaleContent = {
|
|
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 { GifAPngLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'gif-naar-png-converter';
|
|
6
|
+
const title = 'GIF naar PNG Online Converteren';
|
|
7
|
+
const description =
|
|
8
|
+
'Extraheer het eerste frame uit je GIF\'s en converteer het naar PNG met behoud van transparantie. Zonder server. Lokale verwerking. Gratis.';
|
|
9
|
+
|
|
10
|
+
const ui: ImageConverterUI = {
|
|
11
|
+
dragText: 'Sleep GIF-bestanden hierheen...',
|
|
12
|
+
convertText: 'Om ze direct naar PNG 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: GifAPngLocaleContent['faq'] = [
|
|
22
|
+
{
|
|
23
|
+
question: 'Waarom een geanimeerd formaat zoals GIF naar een statisch formaat zoals PNG converteren?',
|
|
24
|
+
answer:
|
|
25
|
+
'Veel sociale netwerken of avatars ondersteunen geen afbeeldingen die veranderen. Het extraheren van het eerste frame van een complexe GIF naar een hoogwaardige PNG lost barrières op en vermindert onnodig bestandsgewicht.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Blijven de transparanties van de oude GIF behouden in de resulterende PNG?',
|
|
29
|
+
answer:
|
|
30
|
+
'Ja, in tegenstelling tot JPG behoudt het PNG-formaat het alfakanaal. Als de GIF een transparante achtergrond had, zal de PNG deze behouden met scherpe randen.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: 'Bewaren jullie mijn afbeeldingen na verwerking enige tijd op de servers?',
|
|
34
|
+
answer:
|
|
35
|
+
'Geen enkele server bewaart je GIF; de gehele extractie is lokaal dankzij de Web Canvas API. Het is de processor van je pc die op veilige wijze je bestand decodeert zonder enig contact met het netwerk.',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const howTo: GifAPngLocaleContent['howTo'] = [
|
|
40
|
+
{
|
|
41
|
+
name: 'Breng de Animatie Dichterbij',
|
|
42
|
+
text: 'Sleep de zware GIF-bestanden naar het invoerveld.',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Perfect Geëxtraheerde Foto',
|
|
46
|
+
text: 'Het systeem stopt de exacte oorsprong van de beweging en maakt in milliseconden een onberispelijke kopie.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'Sla je Statische Beeld op',
|
|
50
|
+
text: 'Sla alle naar PNG geconverteerde statische GIF-avatars massaal op in een ZIP-bestand.',
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
const bibliography: GifAPngLocaleContent['bibliography'] = [
|
|
55
|
+
{
|
|
56
|
+
name: 'World Wide Web Consortium: PNG format',
|
|
57
|
+
url: 'https://www.w3.org/TR/png/',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'CompuServe GIF Information',
|
|
61
|
+
url: 'https://www.w3.org/Graphics/GIF/spec-gif89a.txt',
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const seo: GifAPngLocaleContent['seo'] = [
|
|
66
|
+
{
|
|
67
|
+
type: 'title',
|
|
68
|
+
text: 'GIF naar PNG Converter: Overschrijd de kleur- en transparantiegrenzen van GIF',
|
|
69
|
+
level: 2,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'paragraph',
|
|
73
|
+
html: 'GIF werd ontworpen in een tijd dat monitoren nauwelijks 256 kleuren konden weergeven. Decennia later is die beperking nog steeds de grootste zwakte. PNG werd precies geboren om GIF te vervangen in alle gebruiksscenario\'s waar kwaliteit en transparantie belangrijk zijn: logo\'s, iconen, interface-graphics en elke afbeelding met een transparante achtergrond die er op elke achtergrondkleur perfect uit moet zien.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'title',
|
|
77
|
+
text: 'GIF vs PNG: de revolutie van de 16 miljoen kleuren',
|
|
78
|
+
level: 3,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'paragraph',
|
|
82
|
+
html: 'Het meest cruciale verschil tussen GIF och PNG is niet alleen het aantal kleuren. GIF ondersteunt binaire transparantie: elke pixel is ondoorzichtig of volledig transparant, zonder gradaties. PNG daarentegen ondersteunt het volledige alfakanaal, met 256 niveaus van ondoorzichtigheid per pixel. Dit betekent dat de randen van een logo in PNG perfect kunnen worden gladgestreken, terwijl die van GIF een kenmerkende karteling vertonen op gekleurde achtergronden.',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
type: 'paragraph',
|
|
86
|
+
html: 'Naast de superieure transparantie neemt PNG de grens van 256 kleuren van GIF weg. Screenshots, illustraties met gradiënten, logo\'s met schaduwen: ze zien er allemaal aanzienlijk beter uit in PNG. En omdat het verliesvrije compressie is, behoudt elke pixel precies de originele waarde, zonder de artefacten die een conversie naar JPG zou introduceren.',
|
|
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 afbeeldingen op externe servers verwerken.',
|
|
99
|
+
icon: 'mdi:cloud-upload',
|
|
100
|
+
pointIcon: 'mdi:close-circle-outline',
|
|
101
|
+
points: [
|
|
102
|
+
'Je logo\'s en iconen reizen via internet',
|
|
103
|
+
'Wachttijd door netwerklatentie',
|
|
104
|
+
'Limieten op grootte en aantal bestanden',
|
|
105
|
+
'Je afbeeldingen kunnen in caches van derden blijven staan',
|
|
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 conversie zonder netwerk',
|
|
116
|
+
'Zonder limieten op bestanden of grootte',
|
|
117
|
+
'Absolute privacy: 0 bytes verzonden',
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
type: 'title',
|
|
124
|
+
text: 'Hoe de lokale GIF naar PNG conversie werkt',
|
|
125
|
+
level: 3,
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'paragraph',
|
|
129
|
+
html: 'De conversie maakt gebruik van de Canvas API van de browser. De GIF wordt in het geheugen gedecodeerd als een eigen Image-element. Door het op een HTML5-canvas te renderen, legt de grafische engine van de browser het eerste frame vast met al zijn originele transparantie-informatie intact.',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'paragraph',
|
|
133
|
+
html: 'In tegenstelling tot de conversie naar JPG, is bij PNG geen witte achtergrond nodig. Het alfakanaal van de originele GIF wordt direct bewaard in de geëxporteerde PNG. De <code>toDataURL(\'image/png\')</code> methode genereert de PNG-bytestroom in het RAM-geheugen van je computer zonder enige netwerktransmissie, en het bestand wordt direct gedownload.',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'tip',
|
|
137
|
+
title: 'Binaire transparantie van GIF vs alfakanaal van PNG',
|
|
138
|
+
html: 'GIF ondersteunt alleen binaire transparantie (ondoorzichtig of transparant). Bij het converteren naar PNG blijven de half-transparante pixels van de GIF behouden zoals de browser ze interpreteert. Als je GIF kartelige randen heeft, zal de PNG deze behouden — maar je kunt ze bewerken met randverzachting in elke editor, iets wat onmogelijk is met de originele GIF.',
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
type: 'title',
|
|
142
|
+
text: 'Gebruiksscenario\'s en compatibiliteit van de resulterende PNG',
|
|
143
|
+
level: 3,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
type: 'list',
|
|
147
|
+
icon: 'mdi:check-circle',
|
|
148
|
+
items: [
|
|
149
|
+
'Logo\'s en iconen voor gebruik op elke achtergrondkleur.',
|
|
150
|
+
'Avatars voor Discord, Telegram, Slack en gamingplatforms.',
|
|
151
|
+
'Interface-graphics voor web- en mobiele apps.',
|
|
152
|
+
'Gepersonaliseerde stickers en emoji\'s met transparante achtergrond.',
|
|
153
|
+
'Screenshots en UI-elementen voor technische documentatie.',
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'title',
|
|
158
|
+
text: 'Conclusie: PNG is wat de GIF altijd had willen zijn',
|
|
159
|
+
level: 3,
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
type: 'paragraph',
|
|
163
|
+
html: 'Converteren van GIF naar PNG is niet alleen een formaatverandering: het is het bijwerken van een afbeelding naar de moderne standaard die de GIF nooit heeft kunnen bereiken. Meer kleuren, betere transparantie, minder gewicht. Onze tool voert deze conversie in milliseconden uit, direct in je browser, zonder gegevens naar buiten te sturen.',
|
|
164
|
+
},
|
|
165
|
+
];
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
export const content: GifAPngLocaleContent = {
|
|
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
|
+
};
|