@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 = 'konvertera-gif-till-png';
|
|
6
|
+
const title = 'Konvertera GIF till PNG Online';
|
|
7
|
+
const description =
|
|
8
|
+
'Extrahera den första rutan från dina GIF-filer och konvertera den till PNG med bevarad transparens. Utan server. Lokal bearbetning. Gratis.';
|
|
9
|
+
|
|
10
|
+
const ui: ImageConverterUI = {
|
|
11
|
+
dragText: 'Dra GIF-filer hit...',
|
|
12
|
+
convertText: 'För att konvertera dem till PNG direkt',
|
|
13
|
+
selectFiles: 'Välj filer',
|
|
14
|
+
processedFiles: 'Bearbetade filer',
|
|
15
|
+
downloadAll: 'Ladda ner alla (.zip)',
|
|
16
|
+
pending: 'Väntande',
|
|
17
|
+
bibliographyTitle: 'Bibliografiska Referenser',
|
|
18
|
+
faqTitle: 'Vanliga Frågor',
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const faq: GifAPngLocaleContent['faq'] = [
|
|
22
|
+
{
|
|
23
|
+
question: 'Varför konvertera ett animerat format som GIF till ett statiskt format som PNG?',
|
|
24
|
+
answer:
|
|
25
|
+
'Många sociala nätverk eller avatarer stöder inte bilder som ändras. Att extrahera den första rutan i en komplex GIF till en högkvalitativ PNG löser detta och minskar onödig filstorlek.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Bevaras transparensen från den gamla GIF-filen i den resulterande PNG-filen?',
|
|
29
|
+
answer:
|
|
30
|
+
'Ja, till skillnad från JPG behåller PNG-formatet alfakanalen. Om GIF-filen hade en transparent bakgrund kommer PNG-filen att behålla den med skarpa kanter.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: 'Sparar ni mina bilder på servrarna ett tag efter bearbetningen?',
|
|
34
|
+
answer:
|
|
35
|
+
'Ingen server sparar din GIF; hela extraktionen sker lokalt tack vare Web Canvas API. Det är din dators processor som säkert avkodar din fil utan någon nätverkskontakt.',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const howTo: GifAPngLocaleContent['howTo'] = [
|
|
40
|
+
{
|
|
41
|
+
name: 'Dra in din animation',
|
|
42
|
+
text: 'Dra de tunga GIF-filerna till inmatningsrutan.',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Perfekt extraherat foto',
|
|
46
|
+
text: 'Systemet stoppar rörelsen exakt vid ursprunget och skapar en felfri kopia på några millisekunder.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'Spara din statiska bild',
|
|
50
|
+
text: 'Spara alla statiska GIF-avatarer som konverterats till PNG i ett samlat ZIP-arkiv.',
|
|
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 till PNG-konverterare: Övervinn färg- och transparensgränserna för GIF',
|
|
69
|
+
level: 2,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'paragraph',
|
|
73
|
+
html: 'GIF designades vid en tidpunkt då bildskärmar knappt kunde visa 256 färger. Decennier senare är den begränsningen fortfarande dess största svaghet. PNG föddes just för att ersätta GIF i alla användningsfall där kvalitet och transparens spelar roll: logotyper, ikoner, gränssnittsgrafik och alla bilder med transparent bakgrund som måste se perfekta ut på valfri bakgrundsfärg.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'title',
|
|
77
|
+
text: 'GIF vs PNG: revolutionen med 16 miljoner färger',
|
|
78
|
+
level: 3,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'paragraph',
|
|
82
|
+
html: 'Den mest kritiska skillnaden mellan GIF och PNG är inte bara antalet färger. GIF stöder binär transparens: varje pixel är antingen opak eller helt transparent, utan graderingar. PNG stöder däremot full alfakanal, med 256 nivåer av opacitet per pixel. Detta innebär att kanterna på en logotyp i PNG kan göras helt jämna, medan de i GIF visar en karakteristisk tandad kant på färgade bakgrunder.',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
type: 'paragraph',
|
|
86
|
+
html: 'Förutom överlägsen transparens tar PNG bort gränsen på 256 färger för GIF. Skärmdumpar, illustrationer med toningar, logotyper med skuggor – alla ser betydligt bättre ut i PNG. Och eftersom det är en förlustfri komprimering behåller varje pixel exakt sitt ursprungliga värde, utan de artefakter som en konvertering till JPG skulle introducera.',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
type: 'title',
|
|
90
|
+
text: 'Arkitekturjämförelse: Lokal vs Moln',
|
|
91
|
+
level: 3,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
type: 'comparative',
|
|
95
|
+
items: [
|
|
96
|
+
{
|
|
97
|
+
title: 'Molnkonverterare',
|
|
98
|
+
description: 'Verktyg som bearbetar dina bilder på fjärrservrar.',
|
|
99
|
+
icon: 'mdi:cloud-upload',
|
|
100
|
+
pointIcon: 'mdi:close-circle-outline',
|
|
101
|
+
points: [
|
|
102
|
+
'Dina logotyper och ikoner skickas över internet',
|
|
103
|
+
'Väntetid på grund av nätverksfördröjning',
|
|
104
|
+
'Storleksbegränsningar och begränsningar för antal filer',
|
|
105
|
+
'Dina bilder kan finnas kvar i tredjeparts cachen',
|
|
106
|
+
],
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
title: 'Vår lokala arkitektur',
|
|
110
|
+
description: 'Direkt bearbetning på din hårdvara via Vanilla JS-teknik.',
|
|
111
|
+
icon: 'mdi:laptop-mac',
|
|
112
|
+
highlight: true,
|
|
113
|
+
points: [
|
|
114
|
+
'GIF-filen lämnar aldrig din enhet',
|
|
115
|
+
'Omedelbar konvertering utan nätverk',
|
|
116
|
+
'Inga fil- eller storleksbegränsningar',
|
|
117
|
+
'Total integritet: 0 byte skickas',
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
type: 'title',
|
|
124
|
+
text: 'Hur den lokala GIF till PNG-konverteringen fungerar',
|
|
125
|
+
level: 3,
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'paragraph',
|
|
129
|
+
html: 'Konverteringen använder webbläsarens Canvas API. GIF-filen avkodas i minnet som ett inbyggt Image-element. Vid rendering på en HTML5-canvas fångar webbläsarens grafikmotor den första rutan med all dess ursprungliga transparensinformation intakt.',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'paragraph',
|
|
133
|
+
html: 'Till skillnad från konvertering till JPG krävs ingen vit bakgrund med PNG. Alfakanalen från den ursprungliga GIF-filen bevaras direkt i den exporterade PNG-filen. Canvas-metoden <code>toDataURL(\'image/png\')</code> genererar PNG-byteströmmen i din dators RAM-minne utan någon nätverksöverföring, och filen laddas ner direkt.',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'tip',
|
|
137
|
+
title: 'Binär transparens för GIF vs alfakanal för PNG',
|
|
138
|
+
html: 'GIF stöder endast binär transparens (opak eller transparent). Vid konvertering till PNG bibehålls de halvtransparenta pixlarna i GIF-filen så som webbläsaren tolkar dem. Om din GIF har tandade kanter kommer PNG-filen att behålla dem — men du kan redigera dem med kantutjämning i valfri redigerare, något som är omöjligt med den ursprungliga GIF-filen.',
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
type: 'title',
|
|
142
|
+
text: 'Användningsfall och kompatibilitet för resulterande PNG',
|
|
143
|
+
level: 3,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
type: 'list',
|
|
147
|
+
icon: 'mdi:check-circle',
|
|
148
|
+
items: [
|
|
149
|
+
'Logotyper och ikoner för användning på valfri bakgrundsfärg.',
|
|
150
|
+
'Avatarer för Discord, Telegram, Slack och spelplattformar.',
|
|
151
|
+
'Gränssnittsgrafik för webb- och mobilappar.',
|
|
152
|
+
'Personliga klistermärken och emojis med transparent bakgrund.',
|
|
153
|
+
'Skärmdumpar och UI-element för teknisk dokumentation.',
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'title',
|
|
158
|
+
text: 'Slutsats: PNG är vad GIF alltid ville vara',
|
|
159
|
+
level: 3,
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
type: 'paragraph',
|
|
163
|
+
html: 'Att konvertera från GIF till PNG är inte bara att byta format: det är att uppgradera en bild till den moderna standard som GIF aldrig kunde nå. Fler färger, bättre transparens, mindre vikt. Vårt verktyg utför denna konvertering på några millisekunder direkt i din webbläsare utan att skicka några data utåt.',
|
|
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: 'sv', 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-png-donusturucu';
|
|
6
|
+
const title = 'GIF\'i PNG\'ye Çevrimiçi Dönüştür';
|
|
7
|
+
const description =
|
|
8
|
+
'GIF dosyalarınızdan ilk kareyi çıkarın ve şeffaflığı koruyarak bunu PNG\'ye dönüştürün. Sunucu yok. Yerel işleme. Ücretsiz.';
|
|
9
|
+
|
|
10
|
+
const ui: ImageConverterUI = {
|
|
11
|
+
dragText: 'GIF dosyalarını buraya sürükleyin...',
|
|
12
|
+
convertText: 'Anında PNG\'ye dönüştürmek için',
|
|
13
|
+
selectFiles: 'Dosyaları seçin',
|
|
14
|
+
processedFiles: 'İşlenen dosyalar',
|
|
15
|
+
downloadAll: 'Tümünü İndir (.zip)',
|
|
16
|
+
pending: 'Bekliyor',
|
|
17
|
+
bibliographyTitle: 'Bibliyografik Referanslar',
|
|
18
|
+
faqTitle: 'Sıkça Sorulan Sorular',
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const faq: GifAPngLocaleContent['faq'] = [
|
|
22
|
+
{
|
|
23
|
+
question: 'Neden GIF gibi animasyonlu bir formatı PNG gibi statik bir formata dönüştürelim?',
|
|
24
|
+
answer:
|
|
25
|
+
'Pek çok sosyal ağ veya avatar, değişen fotoğrafları kabul etmez. Karmaşık bir GIF\'in ilk karesini yüksek kaliteli bir PNG\'ye çıkarmak engelleri çözer ve işe yaramaz dosya ağırlığını azaltır.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Eski GIF\'teki şeffaflıklar sonuç PNG\'sinde korunur mu?',
|
|
29
|
+
answer:
|
|
30
|
+
'Evet, JPG\'nin aksine PNG formatı alfa kanalını korur. GIF\'in şeffaf bir arka planı varsa, PNG bunu keskin kenarlarla koruyacaktır.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: 'İşlemeden sonra görsellerimi bir süre sunucularda tutuyor musunuz?',
|
|
34
|
+
answer:
|
|
35
|
+
'Hiçbir sunucu GIF\'inizi tutmaz; Web Canvas API sayesinde tüm çıkarma işlemi yereldir. Dosyanızı herhangi bir ağ teması olmadan güvenli bir şekilde çözen PC\'nizin işlemcisidir.',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const howTo: GifAPngLocaleContent['howTo'] = [
|
|
40
|
+
{
|
|
41
|
+
name: 'Animasyonu Hazırlayın',
|
|
42
|
+
text: 'Ağır GIF dosyalarını ekleme kutusuna sürükleyin.',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Mükemmel Çıkarılmış Fotoğraf',
|
|
46
|
+
text: 'Sistem, hareketin tam kaynağını dondurarak milisaniyeler içinde kusursuz bir kopya çıkaracaktır.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'Statik Görüntünüzü Kaydedin',
|
|
50
|
+
text: 'Statik PNG formatına dönüştürülen GIF avatarlarını toplu olarak ZIP olarak kaydedin.',
|
|
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 Dönüştürücü: GIF\'in Renk ve Şeffaflık Sınırlarını Aşın',
|
|
69
|
+
level: 2,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'paragraph',
|
|
73
|
+
html: 'GIF, monitörlerin ancak 256 rengi gösterebildiği bir çağda tasarlandı. Onlarca yıl sonra, bu kısıtlama hala en büyük zayıflığı olmaya devam ediyor. PNG, kalitenin ve şeffaflığın önemli olduğu tüm kullanım durumlarında GIF\'in yerini almak üzere tam olarak bu yüzden doğdu: logolar, simgeler, arayüz grafikleri ve herhangi bir arka plan renginde mükemmel görünmesi gereken şeffaf arka planlı her türlü görüntü.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'title',
|
|
77
|
+
text: 'GIF vs PNG: 16 milyon renk devrimi',
|
|
78
|
+
level: 3,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'paragraph',
|
|
82
|
+
html: 'GIF ve PNG arasındaki en kritik fark sadece renk sayısı değildir. GIF ikili şeffaflığı destekler: her piksel ya opak ya da tamamen şeffaftır, geçişler yoktur. PNG ise piksel başına 256 opaklık seviyesi ile tam alfa kanalını destekler. Bu, PNG\'deki bir logonun kenarlarının mükemmel şekilde pürüzsüzleştirilebileceği anlamına gelirken, GIF\'tekiler renkli arka planlar üzerinde karakteristik bir tırtıklı yapı gösterir.',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
type: 'paragraph',
|
|
86
|
+
html: 'Üstün şeffaflığa ek olarak PNG, GIF\'in 256 renk sınırını ortadan kaldırır. Ekran görüntüleri, gradyanlı illüstrasyonlar, gölgeli logolar: bunların hepsi PNG\'de önemli ölçüde daha iyi görünür. Ve kayıpsız sıkıştırma olduğundan, her piksel, bir JPG dönüşümünün getireceği yapay dokular olmadan tam olarak orijinal değerini korur.',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
type: 'title',
|
|
90
|
+
text: 'Mimari Karşılaştırması: Yerel vs Bulut',
|
|
91
|
+
level: 3,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
type: 'comparative',
|
|
95
|
+
items: [
|
|
96
|
+
{
|
|
97
|
+
title: 'Bulut Dönüştürücüler',
|
|
98
|
+
description: 'Görüntülerinizi uzak sunucularda işleyen araçlar.',
|
|
99
|
+
icon: 'mdi:cloud-upload',
|
|
100
|
+
pointIcon: 'mdi:close-circle-outline',
|
|
101
|
+
points: [
|
|
102
|
+
'Logolarınız ve simgeleriniz internet üzerinden iletilir',
|
|
103
|
+
'Ağ gecikmesi nedeniyle bekleme süresi',
|
|
104
|
+
'Boyut ve dosya sayısı sınırları',
|
|
105
|
+
'Görselleriniz üçüncü taraf önbelleklerinde kalabilir',
|
|
106
|
+
],
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
title: 'Yerel Mimarimiz',
|
|
110
|
+
description: 'Vanilla JS teknolojisi ile doğrudan donanımınızda işleme.',
|
|
111
|
+
icon: 'mdi:laptop-mac',
|
|
112
|
+
highlight: true,
|
|
113
|
+
points: [
|
|
114
|
+
'GIF cihazınızı asla terk etmez',
|
|
115
|
+
'Ağ olmadan anında dönüşüm',
|
|
116
|
+
'Dosya veya boyut sınırı yok',
|
|
117
|
+
'Mutlak gizlilik: 0 bayt gönderilir',
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
type: 'title',
|
|
124
|
+
text: 'Yerel GIF-PNG dönüşümü nasıl çalışır?',
|
|
125
|
+
level: 3,
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'paragraph',
|
|
129
|
+
html: 'Dönüşüm, tarayıcının Canvas API\'sini kullanır. GIF, bellekte yerel bir Image öğesi olarak çözülür. HTML5 tuvali üzerinde işlenirken tarayıcının grafik motoru, orijinal şeffaflık bilgisi bozulmadan ilk kareyi yakalar.',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'paragraph',
|
|
133
|
+
html: 'JPG dönüşümünün aksine, PNG ile beyaz bir arka plan eklemek gerekmez. Orijinal GIF\'in alfa kanalı doğrudan dışa aktarılan PNG\'de korunur. <code>toDataURL(\'image/png\')</code> yöntemi, herhangi bir ağ iletimi olmadan bilgisayarınızın RAM\'inde PNG bayt akışını oluşturur ve dosya doğrudan indirilir.',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'tip',
|
|
137
|
+
title: 'GIF ikili şeffaflığı vs PNG alfa kanalı',
|
|
138
|
+
html: 'GIF yalnızca ikili şeffaflığı (opak veya şeffaf) destekler. PNG\'ye dönüştürüldüğünde, GIF\'in yarı şeffaf pikselleri tarayıcının yorumladığı şekilde kalır. GIF\'inizin tırtıklı kenarları varsa, PNG bunları koruyacaktır; ancak bunları herhangi bir editörde kenar yumuşatma ile düzenleyebilirsiniz, bu orijinal GIF ile imkansızdır.',
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
type: 'title',
|
|
142
|
+
text: 'Elde edilen PNG\'nin kullanım durumları ve uyumluluğu',
|
|
143
|
+
level: 3,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
type: 'list',
|
|
147
|
+
icon: 'mdi:check-circle',
|
|
148
|
+
items: [
|
|
149
|
+
'Herhangi bir arka plan renginde kullanım için logolar ve simgeler.',
|
|
150
|
+
'Discord, Telegram, Slack ve oyun platformları için avatarlar.',
|
|
151
|
+
'Web ve mobil uygulamalar için arayüz grafikleri.',
|
|
152
|
+
'Şeffaf arka planlı kişiselleştirilmiş çıkartmalar ve emojiler.',
|
|
153
|
+
'Teknik dokümantasyon için ekran görüntüleri ve kullanıcı arayüzü öğeleri.',
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'title',
|
|
158
|
+
text: 'Sonuç: PNG, GIF\'in her zaman olmak istediği şeydir',
|
|
159
|
+
level: 3,
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
type: 'paragraph',
|
|
163
|
+
html: 'GIF\'ten PNG\'ye dönüştürmek sadece format değiştirmek değildir: bir görüntüyü GIF\'in asla ulaşamadığı modern standarta güncellemektir. Daha fazla renk, daha iyi şeffaflık, daha az boyut. Aracımız bu dönüşümü, herhangi bir veriyi dışarı göndermeden milisaniyeler içinde doğrudan tarayıcınızda gerçekleştirir.',
|
|
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: 'tr', 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
|
+
'许多社交网络或头像不支持会动的图片。将复杂 GIF 的第一帧提取到高质量的 PNG 中可以解决这些障碍,并减少不必要的文件体积。',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: '旧 GIF 的透明度会在生成的 PNG 中保留吗?',
|
|
29
|
+
answer:
|
|
30
|
+
'是的,与 JPG 不同,PNG 格式保留 Alpha 通道。如果 GIF 有透明背景,PNG 将保留它并保持边缘清晰。',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: '处理后,我的图片会在服务器上保留一段时间吗?',
|
|
34
|
+
answer:
|
|
35
|
+
'没有任何服务器会保留您的 GIF;由于 Web Canvas API 的作用,所有提取均在本地完成。是您电脑的处理器在没有任何网络接触的情况下安全地解码您的文件。',
|
|
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:Logo、图标、界面图形以及任何在任何背景色上都必须看起来完美的透明背景图像。',
|
|
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 支持完整的 Alpha 通道,每个像素具有 256 个不透明度级别。这意味着 PNG 中的 Logo 边缘可以被完美平滑,而 GIF 在彩色背景上展现出特征性的锯齿。',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
type: 'paragraph',
|
|
86
|
+
html: '除了卓越的透明度外,PNG 还消除了 GIF 的 256 色限制。屏幕截图、带有渐变的插图、带有阴影的 Logo:所有这些在 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
|
+
'您的 Logo 和图标通过互联网传输',
|
|
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 转 PNG 的技术原理',
|
|
125
|
+
level: 3,
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'paragraph',
|
|
129
|
+
html: '转换使用了浏览器的 Canvas API。GIF 在内存中被解码为原生 Image 元素。通过在 HTML5 画布(canvas)上渲染,浏览器的图形引擎会捕捉第一帧,且保留其原始透明度信息完好无损。',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'paragraph',
|
|
133
|
+
html: '与转换为 JPG 不同,使用 PNG 无需添加白色背景。原 GIF 的 Alpha 通道直接保留在导出的 PNG 中。画布的 <code>toDataURL(\'image/png\')</code> 方法直接在您电脑的 RAM 中生成 PNG 字节流,无需任何网络传输,生成的文件会立即下载。',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'tip',
|
|
137
|
+
title: 'GIF 的二进制透明 vs PNG 的 Alpha 通道',
|
|
138
|
+
html: 'GIF 仅支持二进制透明(全透明或不透明)。转换为 PNG 时,GIF 的半透明像素将保持浏览器解释的样子。如果您的 GIF 有锯齿状边缘,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
|
+
'可在任何背景色上使用的 Logo 和图标。',
|
|
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: 'zh', faq, howTo }),
|
|
178
|
+
};
|
|
@@ -16,6 +16,18 @@ export const gifAPng: ConvertersToolEntry<ImageConverterUI> = {
|
|
|
16
16
|
es: () => import('./i18n/es').then((m) => m.content),
|
|
17
17
|
en: () => import('./i18n/en').then((m) => m.content),
|
|
18
18
|
fr: () => import('./i18n/fr').then((m) => m.content),
|
|
19
|
+
de: () => import('./i18n/de').then((m) => m.content),
|
|
20
|
+
id: () => import('./i18n/id').then((m) => m.content),
|
|
21
|
+
it: () => import('./i18n/it').then((m) => m.content),
|
|
22
|
+
ja: () => import('./i18n/ja').then((m) => m.content),
|
|
23
|
+
ko: () => import('./i18n/ko').then((m) => m.content),
|
|
24
|
+
nl: () => import('./i18n/nl').then((m) => m.content),
|
|
25
|
+
pl: () => import('./i18n/pl').then((m) => m.content),
|
|
26
|
+
pt: () => import('./i18n/pt').then((m) => m.content),
|
|
27
|
+
ru: () => import('./i18n/ru').then((m) => m.content),
|
|
28
|
+
sv: () => import('./i18n/sv').then((m) => m.content),
|
|
29
|
+
tr: () => import('./i18n/tr').then((m) => m.content),
|
|
30
|
+
zh: () => import('./i18n/zh').then((m) => m.content),
|
|
19
31
|
},
|
|
20
32
|
};
|
|
21
33
|
|