diff --git a/.gitignore b/.gitignore
index cb8cc80..07f94c5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -28,3 +28,6 @@ pnpm-debug.log*
/playwright-report/
/blob-report/
/playwright/.cache/
+
+# Custom
+src/assets/
diff --git a/src/pages/next.astro b/src/pages/next.astro
index e6c1c0f..587781a 100644
--- a/src/pages/next.astro
+++ b/src/pages/next.astro
@@ -3,18 +3,22 @@ import Layout from '../layouts/Layout.astro'
import Button from '../templates/components/Button/Button.tsx'
import Image from '../templates/components/Image/Image'
import Page from '../templates/components/Page/Page'
+import sampleA from '../templates/images/sample.avif'
+import sampleW from '../templates/images/sample.avif'
+import OptimizeImage from '../templates/components/Optimizer/OptimizeImage'
---
-
+
Built-in Components
-
+
diff --git a/src/templates/components/Image/Image.tsx b/src/templates/components/Image/Image.tsx
index bfb3b19..2df6d4c 100644
--- a/src/templates/components/Image/Image.tsx
+++ b/src/templates/components/Image/Image.tsx
@@ -1,35 +1,17 @@
-import sharp from 'sharp'
-import fs from 'fs'
-
interface Props {
- src: string
+ avif: string
+ webp: string
size?: number
alt?: string
}
-const convertImage = async (props: Props) => {
- const avifOutputPath = `src/assets/optimized/${props.src.split('.').slice(0, -1).join('.')}.avif`
- const webpOutputPath = `src/assets/optimized/${props.src.split('.').slice(0, -1).join('.')}.webp`
-
- if (!fs.existsSync(webpOutputPath) || !fs.existsSync(avifOutputPath)) {
- const avifBuffer = await sharp(`src/assets/images/${props.src}`).avif({ quality: 60 }).resize(props.size).toBuffer()
- await sharp(avifBuffer).toFile(avifOutputPath)
-
- const webpBuffer = await sharp(`src/assets/images/${props.src}`).webp({ quality: 75 }).resize(props.size).toBuffer()
- await sharp(webpBuffer).toFile(webpOutputPath)
- }
-}
-
export default (props: Props) => {
- const imageSrc = `src/assets/optimized/${props.src.split('.').slice(0, -1).join('.')}.webp`
- convertImage(props)
-
return (
<>
-
-
-
+
+
+
>
)
diff --git a/src/templates/components/Optimizer/OptimizeImage.tsx b/src/templates/components/Optimizer/OptimizeImage.tsx
new file mode 100644
index 0000000..4edf349
--- /dev/null
+++ b/src/templates/components/Optimizer/OptimizeImage.tsx
@@ -0,0 +1,21 @@
+import sharp from 'sharp'
+
+interface Props {
+ src: string
+ size?: number
+}
+
+const convertImage = async (props: Props) => {
+ const avifOutputPath = `src/templates/images/${props.src.split('.').slice(0, -1).join('.')}.avif`
+ const webpOutputPath = `src/templates/images/${props.src.split('.').slice(0, -1).join('.')}.webp`
+
+ const avifBuffer = await sharp(`src/assets/images/${props.src}`).avif({ quality: 60 }).resize(props.size).toBuffer()
+ await sharp(avifBuffer).toFile(avifOutputPath)
+
+ const webpBuffer = await sharp(`src/assets/images/${props.src}`).webp({ quality: 75 }).resize(props.size).toBuffer()
+ await sharp(webpBuffer).toFile(webpOutputPath)
+}
+
+export default (props: Props) => {
+ convertImage(props)
+}
diff --git a/src/templates/components/Optimizer/OptimizeLogo.tsx b/src/templates/components/Optimizer/OptimizeLogo.tsx
index fb39b0d..83172d8 100644
--- a/src/templates/components/Optimizer/OptimizeLogo.tsx
+++ b/src/templates/components/Optimizer/OptimizeLogo.tsx
@@ -2,7 +2,6 @@ import sharp from 'sharp'
interface Props {
size?: number
- alt?: string
}
const convertLogo = async (props: Props) => {
diff --git a/src/templates/images/sample.avif b/src/templates/images/sample.avif
new file mode 100644
index 0000000..78c62db
Binary files /dev/null and b/src/templates/images/sample.avif differ
diff --git a/src/templates/images/sample.webp b/src/templates/images/sample.webp
new file mode 100644
index 0000000..0cb2279
Binary files /dev/null and b/src/templates/images/sample.webp differ