@jjlmoya/utils-converters 1.7.0 → 1.8.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/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 = '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
|
+
};
|
|
@@ -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 = 'convert-gif-to-png';
|
|
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
|
+
};
|