@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-zu-png-konvertieren';
|
|
6
|
+
const title = 'GIF in PNG online konvertieren';
|
|
7
|
+
const description =
|
|
8
|
+
'Extrahieren Sie das erste Bild aus Ihren GIFs und konvertieren Sie es in PNG unter Beibehaltung der Transparenz. Ohne Server. Lokale Verarbeitung. Kostenlos.';
|
|
9
|
+
|
|
10
|
+
const ui: ImageConverterUI = {
|
|
11
|
+
dragText: 'GIF-Dateien hierhere ziehen...',
|
|
12
|
+
convertText: 'Um sie sofort in PNG zu konvertieren',
|
|
13
|
+
selectFiles: 'Dateien auswählen',
|
|
14
|
+
processedFiles: 'Verarbeitete Dateien',
|
|
15
|
+
downloadAll: 'Alles herunterladen (.zip)',
|
|
16
|
+
pending: 'Ausstehend',
|
|
17
|
+
bibliographyTitle: 'Literaturhinweise',
|
|
18
|
+
faqTitle: 'Häufig gestellte Fragen',
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const faq: GifAPngLocaleContent['faq'] = [
|
|
22
|
+
{
|
|
23
|
+
question: 'Warum sollte man ein animiertes Format wie GIF in ein statisches Format wie PNG konvertieren?',
|
|
24
|
+
answer:
|
|
25
|
+
'Viele soziale Netzwerke oder Avatare unterstützen keine Bilder, die sich ändern. Das Extrahieren des ersten Rahmens eines komplexen GIFs in ein hochwertiges PNG löst Barrieren und reduziert unnötiges Dateigewicht.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Bleiben die Transparenzen des alten GIFs im resultierenden PNG erhalten?',
|
|
29
|
+
answer:
|
|
30
|
+
'Ja, im Gegensatz zu JPG behält das PNG-Format den Alphakanal bei. Wenn das GIF einen transparenten Hintergrund hatte, behält das PNG diesen mit scharfen Kanten bei.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: 'Speichern Sie meine Bilder nach der Verarbeitung eine Zeit lang auf den Servern?',
|
|
34
|
+
answer:
|
|
35
|
+
'Kein Server behält Ihr GIF; die gesamte Extraktion erfolgt lokal dank der Web-Canvas-API. Der Prozessor Ihres PCs dekodiert Ihre Datei sicher, ohne Kontakt zum Netzwerk.',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const howTo: GifAPngLocaleContent['howTo'] = [
|
|
40
|
+
{
|
|
41
|
+
name: 'Animation bereitstellen',
|
|
42
|
+
text: 'Ziehen Sie die schweren GIF-Dateien in das Einfügefeld.',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Perfektes extrahiertes Foto',
|
|
46
|
+
text: 'Das System stoppt den Ursprung der Bewegung exakt und erstellt in Millisekunden eine makellose Kopie.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'Statische Bilder speichern',
|
|
50
|
+
text: 'Speichern Sie das gesamte Volumen an statischen GIF-Avataren, die in PNG konvertiert wurden, massenhaft als 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-zu-PNG-Konverter: Überwinden Sie die Farb- und Transparenzgrenzen von GIF',
|
|
69
|
+
level: 2,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'paragraph',
|
|
73
|
+
html: 'GIF wurde zu einer Zeit entwickelt, als Monitore kaum 256 Farben anzeigen konnten. Jahrzehnte später ist diese Einschränkung immer noch seine größte Schwäche. PNG wurde genau deshalb geboren, um GIF in allen Anwendungsfällen zu ersetzen, in denen Qualität und Transparenz wichtig sind: Logos, Icons, Interface-Grafiken und jedes Bild mit transparentem Hintergrund, das auf jedem Hintergrund perfekt aussehen soll.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'title',
|
|
77
|
+
text: 'GIF vs. PNG: Die Revolution der 16 Millionen Farben',
|
|
78
|
+
level: 3,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'paragraph',
|
|
82
|
+
html: 'Der kritischste Unterschied zwischen GIF und PNG ist nicht nur die Anzahl der Farben. GIF unterstützt binäre Transparenz: Jedes Pixel ist entweder opak oder vollständig transparent, ohne Abstufungen. PNG hingegen unterstützt den vollen Alphakanal mit 256 Stufen der Opazität pro Pixel. Dies bedeutet, dass die Kanten eines Logos in PNG perfekt geglättet werden können, während die von GIF eine charakteristische Zackenbildung auf farbigen Hintergründen zeigen.',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
type: 'paragraph',
|
|
86
|
+
html: 'Zusätzlich zur überlegenen Transparenz hebt PNG die 256-Farben-Grenze von GIF auf. Screenshots, Illustrationen mit Verläufen, Logos mit Schatten: Alle sehen in PNG deutlich besser aus. Und da es sich um eine verlustfreie Kompression handelt, behält jedes Pixel exakt den Originalwert bei, ohne die Artefakte, die eine Konvertierung in JPG einführen würde.',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
type: 'title',
|
|
90
|
+
text: 'Architekturvergleich: Lokal vs. Cloud',
|
|
91
|
+
level: 3,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
type: 'comparative',
|
|
95
|
+
items: [
|
|
96
|
+
{
|
|
97
|
+
title: 'Cloud Konverter',
|
|
98
|
+
description: 'Tools, die Ihre Bilder auf einem Remote-Server verarbeiten.',
|
|
99
|
+
icon: 'mdi:cloud-upload',
|
|
100
|
+
pointIcon: 'mdi:close-circle-outline',
|
|
101
|
+
points: [
|
|
102
|
+
'Ihre Logos und Icons reisen über das Internet',
|
|
103
|
+
'Wartezeit durch Netzwerklatenz',
|
|
104
|
+
'Dateigrößen- und Anzahl-Limits',
|
|
105
|
+
'Ihre Bilder können in Caches von Drittanbietern verbleiben',
|
|
106
|
+
],
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
title: 'Unsere lokale Architektur',
|
|
110
|
+
description: 'Direkte Verarbeitung auf Ihrer Hardware mittels Vanilla JS-Technologie.',
|
|
111
|
+
icon: 'mdi:laptop-mac',
|
|
112
|
+
highlight: true,
|
|
113
|
+
points: [
|
|
114
|
+
'Das GIF verlässt nie Ihr Gerät',
|
|
115
|
+
'Sofortige Konvertierung ohne Netzwerk',
|
|
116
|
+
'Keine Datei- oder Dateigrößenlimits',
|
|
117
|
+
'Absolute Privatsphäre: 0 gesendete Bytes',
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
type: 'title',
|
|
124
|
+
text: 'Wie die lokale GIF-zu-PNG-Konvertierung funktioniert',
|
|
125
|
+
level: 3,
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'paragraph',
|
|
129
|
+
html: 'Die Konvertierung nutzt das Canvas-API des Browsers. Das GIF wird im Speicher als natives Image-Element dekodiert. Beim Rendern auf einem HTML5-Canvas erfasst die Grafik-Engine des Browsers den ersten Rahmen mit all seinen ursprünglichen Transparenzinformationen intakt.',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'paragraph',
|
|
133
|
+
html: 'Im Gegensatz zur Konvertierung in JPG ist bei PNG kein weißer Hintergrund erforderlich. Der Alphakanal des ursprünglichen GIFs wird direkt in das exportierte PNG übernommen. Die <code>toDataURL(\'image/png\')</code> Methode generiert den PNG-Bytestrom im RAM Ihres Computers ohne jegliche Netzwerkübertragung, und die Datei wird direkt heruntergeladen.',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'tip',
|
|
137
|
+
title: 'Binäre Transparenz von GIF vs. Alphakanal von PNG',
|
|
138
|
+
html: 'GIF unterstützt nur binäre Transparenz (opak oder transparent). Bei der Konvertierung in PNG bleiben die halbtransparenten Pixel des GIFs so erhalten, wie der Browser sie interpretiert. Wenn Ihr GIF gezackte Kanten hat, behält das PNG diese bei — aber Sie können sie mit Kantenglättung in jedem Editor bearbeiten, was mit dem ursprünglichen GIF unmöglich ist.',
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
type: 'title',
|
|
142
|
+
text: 'Anwendungsfälle und Kompatibilität des resultierenden PNGs',
|
|
143
|
+
level: 3,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
type: 'list',
|
|
147
|
+
icon: 'mdi:check-circle',
|
|
148
|
+
items: [
|
|
149
|
+
'Logos und Icons für die Verwendung auf beliebigem Hintergrund.',
|
|
150
|
+
'Avatare für Discord, Telegram, Slack und Gaming-Plattformen.',
|
|
151
|
+
'Interface-Grafiken für Web- und Mobil-Apps.',
|
|
152
|
+
'Personalisierte Sticker und Emojis mit transparentem Hintergrund.',
|
|
153
|
+
'Screenshots und UI-Elemente für technische Dokumentation.',
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'title',
|
|
158
|
+
text: 'Fazit: PNG ist das, was GIF immer sein wollte',
|
|
159
|
+
level: 3,
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
type: 'paragraph',
|
|
163
|
+
html: 'Die Konvertierung von GIF in PNG ist nicht nur ein Formatwechsel: Es ist die Aktualisierung eines Bildes auf den modernen Standard, den GIF nie erreichen konnte. Mehr Farben, bessere Transparenz, weniger Gewicht. Unser Tool führt diese Konvertierung in Millisekunden direkt im Browser durch, ohne Daten nach außen zu senden.',
|
|
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: 'de', faq, howTo }),
|
|
178
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { WithContext, SoftwareApplication } from 'schema-dts';
|
|
2
1
|
import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
|
|
2
|
+
import { generateSchemas } from '../../../shared/logic/schemas';
|
|
3
3
|
import type { GifAPngLocaleContent } from '../index';
|
|
4
4
|
|
|
5
5
|
const slug = 'gif-to-png-converter';
|
|
@@ -164,16 +164,6 @@ const seo: GifAPngLocaleContent['seo'] = [
|
|
|
164
164
|
},
|
|
165
165
|
];
|
|
166
166
|
|
|
167
|
-
const appSchema: WithContext<SoftwareApplication> = {
|
|
168
|
-
'@context': 'https://schema.org',
|
|
169
|
-
'@type': 'SoftwareApplication',
|
|
170
|
-
name: title,
|
|
171
|
-
description,
|
|
172
|
-
applicationCategory: 'UtilitiesApplication',
|
|
173
|
-
operatingSystem: 'Web',
|
|
174
|
-
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
175
|
-
inLanguage: 'en',
|
|
176
|
-
};
|
|
177
167
|
|
|
178
168
|
export const content: GifAPngLocaleContent = {
|
|
179
169
|
slug,
|
|
@@ -184,5 +174,5 @@ export const content: GifAPngLocaleContent = {
|
|
|
184
174
|
faq,
|
|
185
175
|
bibliography,
|
|
186
176
|
howTo,
|
|
187
|
-
schemas:
|
|
177
|
+
schemas: generateSchemas({ title, description, inLanguage: 'en', faq, howTo }),
|
|
188
178
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { WithContext, SoftwareApplication } from 'schema-dts';
|
|
2
1
|
import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
|
|
2
|
+
import { generateSchemas } from '../../../shared/logic/schemas';
|
|
3
3
|
import type { GifAPngLocaleContent } from '../index';
|
|
4
4
|
|
|
5
5
|
const slug = 'convertidor-gif-a-png';
|
|
@@ -164,16 +164,6 @@ const seo: GifAPngLocaleContent['seo'] = [
|
|
|
164
164
|
},
|
|
165
165
|
];
|
|
166
166
|
|
|
167
|
-
const appSchema: WithContext<SoftwareApplication> = {
|
|
168
|
-
'@context': 'https://schema.org',
|
|
169
|
-
'@type': 'SoftwareApplication',
|
|
170
|
-
name: title,
|
|
171
|
-
description,
|
|
172
|
-
applicationCategory: 'UtilitiesApplication',
|
|
173
|
-
operatingSystem: 'Web',
|
|
174
|
-
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
175
|
-
inLanguage: 'es',
|
|
176
|
-
};
|
|
177
167
|
|
|
178
168
|
export const content: GifAPngLocaleContent = {
|
|
179
169
|
slug,
|
|
@@ -184,5 +174,5 @@ export const content: GifAPngLocaleContent = {
|
|
|
184
174
|
faq,
|
|
185
175
|
bibliography,
|
|
186
176
|
howTo,
|
|
187
|
-
schemas:
|
|
177
|
+
schemas: generateSchemas({ title, description, inLanguage: 'es', faq, howTo }),
|
|
188
178
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { WithContext, SoftwareApplication } from 'schema-dts';
|
|
2
1
|
import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
|
|
2
|
+
import { generateSchemas } from '../../../shared/logic/schemas';
|
|
3
3
|
import type { GifAPngLocaleContent } from '../index';
|
|
4
4
|
|
|
5
5
|
const slug = 'convertisseur-gif-en-png';
|
|
@@ -164,16 +164,6 @@ const seo: GifAPngLocaleContent['seo'] = [
|
|
|
164
164
|
},
|
|
165
165
|
];
|
|
166
166
|
|
|
167
|
-
const appSchema: WithContext<SoftwareApplication> = {
|
|
168
|
-
'@context': 'https://schema.org',
|
|
169
|
-
'@type': 'SoftwareApplication',
|
|
170
|
-
name: title,
|
|
171
|
-
description,
|
|
172
|
-
applicationCategory: 'UtilitiesApplication',
|
|
173
|
-
operatingSystem: 'Web',
|
|
174
|
-
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
175
|
-
inLanguage: 'fr',
|
|
176
|
-
};
|
|
177
167
|
|
|
178
168
|
export const content: GifAPngLocaleContent = {
|
|
179
169
|
slug,
|
|
@@ -184,5 +174,5 @@ export const content: GifAPngLocaleContent = {
|
|
|
184
174
|
faq,
|
|
185
175
|
bibliography,
|
|
186
176
|
howTo,
|
|
187
|
-
schemas:
|
|
177
|
+
schemas: generateSchemas({ title, description, inLanguage: 'fr', faq, howTo }),
|
|
188
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 = 'konverter-gif-ke-png';
|
|
6
|
+
const title = 'Ubah GIF ke PNG Online';
|
|
7
|
+
const description =
|
|
8
|
+
'Ekstrak bingkai pertama dari GIF Anda dan ubah ke PNG dengan tetap mempertahankan transparansi. Tanpa server. Pemrosesan lokal. Gratis.';
|
|
9
|
+
|
|
10
|
+
const ui: ImageConverterUI = {
|
|
11
|
+
dragText: 'Seret file GIF...',
|
|
12
|
+
convertText: 'Untuk mengubahnya ke PNG secara instan',
|
|
13
|
+
selectFiles: 'Pilih file',
|
|
14
|
+
processedFiles: 'File yang diproses',
|
|
15
|
+
downloadAll: 'Unduh Semua (.zip)',
|
|
16
|
+
pending: 'Tertunda',
|
|
17
|
+
bibliographyTitle: 'Referensi Bibliografi',
|
|
18
|
+
faqTitle: 'Pertanyaan Umum',
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const faq: GifAPngLocaleContent['faq'] = [
|
|
22
|
+
{
|
|
23
|
+
question: 'Mengapa mengubah format animasi seperti GIF ke format statis seperti PNG?',
|
|
24
|
+
answer:
|
|
25
|
+
'Banyak jejaring sosial atau avatar tidak mendukung foto yang bergerak. Mengekstrak bingkai pertama dari GIF yang kompleks menjadi PNG berkualitas tinggi mengatasi hambatan tersebut dan mengurangi ukuran file yang tidak perlu.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Apakah transparansi dari GIF lama tetap terjaga pada PNG yang dihasilkan?',
|
|
29
|
+
answer:
|
|
30
|
+
'Ya, berbeda dengan JPG, format PNG tetap mempertahankan saluran alfa. Jika GIF memiliki latar belakang transparan, PNG akan tetap menjaganya dengan tepi yang tajam.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: 'Apakah Anda menyimpan gambar saya di server untuk beberapa waktu setelah pemrosesan?',
|
|
34
|
+
answer:
|
|
35
|
+
'Tidak ada server yang menyimpan GIF Anda; seluruh ekstraksi dilakukan secara lokal berkat Web Canvas API. Prosesor PC Anda yang akan mendeskripsinya secara aman tanpa koneksi jaringan apa pun.',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const howTo: GifAPngLocaleContent['howTo'] = [
|
|
40
|
+
{
|
|
41
|
+
name: 'Berikan Animasi',
|
|
42
|
+
text: 'Seret file GIF yang berat ke dalam kotak input.',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Foto Ekstraksi Sempurna',
|
|
46
|
+
text: 'Sistem akan menghentikan asal gerakan secara tepat, menghasilkan salinan yang tanpa cacat dalam hitungan milidetik.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'Simpan Gambar Statis Anda',
|
|
50
|
+
text: 'Simpan semua avatar GIF statis yang telah diubah ke format PNG secara massal dalam bentuk 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: 'Konverter GIF ke PNG: Lampaui Batas Warna dan Transparansi GIF',
|
|
69
|
+
level: 2,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'paragraph',
|
|
73
|
+
html: 'GIF dirancang pada masa ketika monitor hampir tidak bisa menampilkan 256 warna. Puluhan tahun kemudian, batasan tersebut tetap menjadi kelemahan terbesarnya. PNG lahir tepat untuk menggantikan GIF dalam semua kasus penggunaan di mana kualitas dan transparansi sangat penting: logo, ikon, grafik antarmuka, dan gambar apa pun dengan latar belakang transparan yang harus terlihat sempurna di atas warna latar belakang apa pun.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'title',
|
|
77
|
+
text: 'GIF vs PNG: Revolusi 16 juta warna',
|
|
78
|
+
level: 3,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'paragraph',
|
|
82
|
+
html: 'Perbedaan paling kritis antara GIF dan PNG bukan hanya jumlah warnanya. GIF mendukung transparansi biner: setiap piksel bersifat buram atau transparan sepenuhnya, tanpa gradasi. Sebaliknya, PNG mendukung saluran alfa penuh, dengan 256 tingkat opasitas per piksel. Ini berarti tepi logo dalam format PNG bisa dihaluskan dengan sempurna, sementara tepi pada GIF menunjukkan bentuk bergerigi yang khas di atas latar belakang berwarna.',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
type: 'paragraph',
|
|
86
|
+
html: 'Selain transparansi yang lebih unggul, PNG menghilangkan batas 256 warna pada GIF. Tangkapan layar, ilustrasi dengan gradasi, logo dengan bayangan: semuanya terlihat jauh lebih baik dalam format PNG. Dan karena merupakan kompresi tanpa kehilangan data, setiap piksel tetap mempertahankan nilai aslinya secara tepat, tanpa adanya artefak yang muncul jika dikonversi ke JPG.',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
type: 'title',
|
|
90
|
+
text: 'Perbandingan Arsitektur: Lokal vs Cloud',
|
|
91
|
+
level: 3,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
type: 'comparative',
|
|
95
|
+
items: [
|
|
96
|
+
{
|
|
97
|
+
title: 'Konverter Cloud',
|
|
98
|
+
description: 'Alat yang memproses gambar Anda di server jarak jauh.',
|
|
99
|
+
icon: 'mdi:cloud-upload',
|
|
100
|
+
pointIcon: 'mdi:close-circle-outline',
|
|
101
|
+
points: [
|
|
102
|
+
'Logo dan ikon Anda dikirim melalui internet',
|
|
103
|
+
'Waktu tunggu karena latensi jaringan',
|
|
104
|
+
'Batasan ukuran dan jumlah file',
|
|
105
|
+
'Gambar Anda mungkin tetap ada di cache pihak ketiga',
|
|
106
|
+
],
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
title: 'Arsitektur Lokal Kami',
|
|
110
|
+
description: 'Pemrosesan langsung di perangkat keras Anda melalui teknologi Vanilla JS.',
|
|
111
|
+
icon: 'mdi:laptop-mac',
|
|
112
|
+
highlight: true,
|
|
113
|
+
points: [
|
|
114
|
+
'GIF tidak pernah meninggalkan perangkat Anda',
|
|
115
|
+
'Konversi instan tanpa jaringan',
|
|
116
|
+
'Tanpa batasan jumlah file atau ukuran',
|
|
117
|
+
'Privasi absolut: 0 byte dikirim ke luar',
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
type: 'title',
|
|
124
|
+
text: 'Bagaimana cara kerja konversi lokal GIF ke PNG',
|
|
125
|
+
level: 3,
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'paragraph',
|
|
129
|
+
html: 'Konversi ini menggunakan Canvas API browser. GIF dideskripsikan di memori sebagai elemen Image asli. Saat me-rendernya pada kanvas HTML5, mesin grafis browser menangkap bingkai pertama dengan seluruh informasi transparansi aslinya tetap utuh.',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'paragraph',
|
|
133
|
+
html: 'Berbeda dengan konversi ke JPG, dengan PNG tidak perlu menambahkan latar belakang putih. Saluran alfa dari GIF asli dipertahankan secara langsung dalam PNG yang diekspor. Metode <code>toDataURL(\'image/png\')</code> menghasilkan byte stream PNG di RAM komputer Anda tanpa transmisi jaringan apa pun, dan file akan segera diunduh.',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'tip',
|
|
137
|
+
title: 'Transparansi biner GIF vs saluran alfa PNG',
|
|
138
|
+
html: 'GIF hanya mendukung transparansi biner (buram atau transparan). Saat dikonversi ke PNG, piksel semi-transparan dari GIF tetap dipertahankan seperti yang diinterpretasikan oleh browser. Jika GIF Anda memiliki tepi yang bergerigi, PNG akan tetap menjaganya — tetapi Anda dapat mengeditnya dengan penghalusan tepi di editor mana pun, sesuatu yang tidak mungkin dilakukan dengan GIF asli.',
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
type: 'title',
|
|
142
|
+
text: 'Kasus penggunaan dan kompatibilitas PNG yang dihasilkan',
|
|
143
|
+
level: 3,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
type: 'list',
|
|
147
|
+
icon: 'mdi:check-circle',
|
|
148
|
+
items: [
|
|
149
|
+
'Logo dan ikon untuk digunakan di atas latar belakang warna apa pun.',
|
|
150
|
+
'Avatar untuk Discord, Telegram, Slack, dan platform gaming.',
|
|
151
|
+
'Grafik antarmuka untuk aplikasi web dan seluler.',
|
|
152
|
+
'Stiker dan emoji khusus dengan latar belakang transparan.',
|
|
153
|
+
'Tangkapan layar dan elemen UI untuk dokumentasi teknis.',
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'title',
|
|
158
|
+
text: 'Kesimpulan: PNG adalah bentuk yang selalu diinginkan oleh GIF',
|
|
159
|
+
level: 3,
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
type: 'paragraph',
|
|
163
|
+
html: 'Mengonversi dari GIF ke PNG bukan sekadar mengubah format: ini adalah memperbarui gambar ke standar modern yang tidak pernah bisa dicapai oleh GIF. Lebih banyak warna, transparansi yang lebih baik, ukuran yang lebih ringan. Alat kami melakukan konversi ini dalam hitungan milidetik, langsung di browser Anda, tanpa mengirim data apa pun ke luar.',
|
|
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: 'id', 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 = 'convertitore-gif-a-png';
|
|
6
|
+
const title = 'Convertire GIF in PNG Online';
|
|
7
|
+
const description =
|
|
8
|
+
'Estrai il primo fotogramma dalle tue GIF e convertilo in PNG preservando le trasparenze. Senza server. Elaborazione locale. Gratuito.';
|
|
9
|
+
|
|
10
|
+
const ui: ImageConverterUI = {
|
|
11
|
+
dragText: 'Trascina i file GIF...',
|
|
12
|
+
convertText: 'Per convertirli in PNG istantaneamente',
|
|
13
|
+
selectFiles: 'Seleziona i file',
|
|
14
|
+
processedFiles: 'File elaborati',
|
|
15
|
+
downloadAll: 'Scarica tutto (.zip)',
|
|
16
|
+
pending: 'In attesa',
|
|
17
|
+
bibliographyTitle: 'Riferimenti Bibliografici',
|
|
18
|
+
faqTitle: 'Domande Frequenti',
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const faq: GifAPngLocaleContent['faq'] = [
|
|
22
|
+
{
|
|
23
|
+
question: 'Perché convertire un formato animato come il GIF in un formato statico come il PNG?',
|
|
24
|
+
answer:
|
|
25
|
+
'Molti social network o avatar non supportano fotografie che cambiano. Estrarre il primo fotogramma di una GIF complessa verso un PNG di alta qualità risolve le barriere e riduce pesi inutili.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Le trasparenze della vecchia GIF si conservano nel PNG risultante?',
|
|
29
|
+
answer:
|
|
30
|
+
'Sì, a differenza del JPG, il formato PNG mantiene il canale alfa. Se la GIF aveva uno sfondo trasparente, il PNG lo conserverà con bordi nitidi.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: 'Mantenete le mie immagini sui server per un po\' dopo l\'elaborazione?',
|
|
34
|
+
answer:
|
|
35
|
+
'Nessun server trattiene la tua GIF; tutta l\'estrazione è locale grazie alla Web Canvas API. È il processore del tuo PC che decodifica in modo sicuro il tuo file senza alcun contatto con la rete.',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const howTo: GifAPngLocaleContent['howTo'] = [
|
|
40
|
+
{
|
|
41
|
+
name: 'Avvicinaci l\'Animazione',
|
|
42
|
+
text: 'Trascina i pesanti file GIF nel riquadro di inserimento.',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Foto Estratta Perfetta',
|
|
46
|
+
text: 'Il sistema bloccherà l\'origine esatta del movimento, ottenendo una copia impeccabile in millisecondi.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'Salva il tuo Statico',
|
|
50
|
+
text: 'Salva massivamente in ZIP tutto il volume di avatar GIF statici convertiti in PNG.',
|
|
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: 'Convertitore da GIF a PNG: Supera i limiti di colore e trasparenza del GIF',
|
|
69
|
+
level: 2,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'paragraph',
|
|
73
|
+
html: 'Il GIF è stato progettato in un\'epoca in cui i monitor potevano mostrare a malapena 256 colori. Decenni dopo, questa limitazione rimane la sua più grande debolezza. Il PNG è nato proprio per sostituire il GIF in tutti i casi d\'uso in cui la qualità e la trasparenza sono importanti: loghi, icone, grafiche di interfaccia e qualsiasi immagine con sfondo trasparente che debba apparire perfetta su qualsiasi colore di sfondo.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'title',
|
|
77
|
+
text: 'GIF vs PNG: la rivoluzione dei 16 milioni di colori',
|
|
78
|
+
level: 3,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'paragraph',
|
|
82
|
+
html: 'La differenza più critica tra GIF e PNG non è solo il numero di colori. Il GIF supporta la trasparenza binaria: ogni pixel è opaco o completamente trasparente, senza sfumature. Il PNG, invece, supporta il canale alfa completo, con 256 livelli di opacità per pixel. Questo significa che i bordi di un logo in PNG possono essere perfettamente ammorbiditi, mentre quelli del GIF mostrano una tipica seghettatura su sfondi colorati.',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
type: 'paragraph',
|
|
86
|
+
html: 'Oltre alla trasparenza superiore, il PNG elimina il limite dei 256 colori del GIF. Screenshot, illustrazioni con sfumature, loghi con ombre: tutti appaiono significativamente meglio in PNG. Essendo una compressione senza perdita, ogni pixel conserva esattamente il valore originale, senza gli artefakti che introdurrebbe una conversione in JPG.',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
type: 'title',
|
|
90
|
+
text: 'Confronto tra Architetture: Locale vs Cloud',
|
|
91
|
+
level: 3,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
type: 'comparative',
|
|
95
|
+
items: [
|
|
96
|
+
{
|
|
97
|
+
title: 'Convertitori Cloud',
|
|
98
|
+
description: 'Strumenti che elaborano le tue immagini su server remoti.',
|
|
99
|
+
icon: 'mdi:cloud-upload',
|
|
100
|
+
pointIcon: 'mdi:close-circle-outline',
|
|
101
|
+
points: [
|
|
102
|
+
'I tuoi loghi e icone viaggiano su internet',
|
|
103
|
+
'Tempo di attesa per latenza di rete',
|
|
104
|
+
'Limiti di dimensione e numero di file',
|
|
105
|
+
'Le tue immagini possono rimanere nelle cache di terze parti',
|
|
106
|
+
],
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
title: 'La Nostra Architettura Locale',
|
|
110
|
+
description: 'Elaborazione diretta sul tuo hardware tramite tecnologia Vanilla JS.',
|
|
111
|
+
icon: 'mdi:laptop-mac',
|
|
112
|
+
highlight: true,
|
|
113
|
+
points: [
|
|
114
|
+
'La GIF non abbandona mai il tuo dispositivo',
|
|
115
|
+
'Conversione istantanea senza rete',
|
|
116
|
+
'Senza limiti di file né di dimensione',
|
|
117
|
+
'Privatatezza assoluta: 0 byte inviati',
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
type: 'title',
|
|
124
|
+
text: 'Come funziona la conversione locale GIF a PNG',
|
|
125
|
+
level: 3,
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'paragraph',
|
|
129
|
+
html: 'La conversione utilizza la Canvas API del browser. La GIF viene decodificata in memoria come un elemento Image nativo. Rendendola su un canvas HTML5, il motore grafico del browser cattura il primo fotogramma con tutte le sue informazioni originali di trasparenza intatte.',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'paragraph',
|
|
133
|
+
html: 'A differenza della conversione in JPG, con il PNG non è necessario aggiungere uno sfondo bianco. Il canale alfa della GIF originale viene preservato direttamente nel PNG esportato. Il metodo <code>toDataURL(\'image/png\')</code> genera il flusso di byte PNG nella RAM del tuo computer, senza alcuna trasmissione di rete, e il file viene scaricato direttamente.',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'tip',
|
|
137
|
+
title: 'Trasparenza binaria della GIF vs canale alfa del PNG',
|
|
138
|
+
html: 'Il GIF supporta solo la trasparenza binaria (opaco o trasparente). Convertendo in PNG, i pixel semitrasparenti della GIF si mantengono così come interpretati dal browser. Se la tua GIF ha bordi seghettati, il PNG li conserverà — ma potrai editarli con ammorbidimento dei bordi in qualsiasi editor, cosa impossibile con la GIF originale.',
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
type: 'title',
|
|
142
|
+
text: 'Casi d\'uso e compatibilità del PNG risultante',
|
|
143
|
+
level: 3,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
type: 'list',
|
|
147
|
+
icon: 'mdi:check-circle',
|
|
148
|
+
items: [
|
|
149
|
+
'Loghi e icone per l\'uso su qualsiasi colore di sfondo.',
|
|
150
|
+
'Avatar per Discord, Telegram, Slack e piattaforme di gaming.',
|
|
151
|
+
'Grafiche di interfaccia per applicazioni web e mobili.',
|
|
152
|
+
'Sticker ed emoji personalizzati con sfondo trasparente.',
|
|
153
|
+
'Screenshot ed elementi UI per documentazione tecnica.',
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'title',
|
|
158
|
+
text: 'Conclusione: il PNG è ciò che la GIF ha sempre voluto essere',
|
|
159
|
+
level: 3,
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
type: 'paragraph',
|
|
163
|
+
html: 'Convertire da GIF a PNG non è solo cambiare formato: è aggiornare un\'immagine allo standard moderno che la GIF non ha mai potuto raggiungere. Più colori, migliore trasparenza, meno peso. Il nostro strumento esegue questa conversione in millisecondi, direttamente nel tuo browser, senza inviare alcun dato all\'esterno.',
|
|
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: 'it', faq, howTo }),
|
|
178
|
+
};
|