Licence
MIT
Version
0.1.1
Deps
1
Size
11 kB
Vulns
1
Weekly
0
@zachtrice/optimize-images
Build-time image optimizer built on sharp:
- Converts every
.png/.jpgin a folder to WebP (typically 60–75% smaller). - Generates a tiny base64 blur placeholder for each, written as a map you can
feed straight into
next/imageplaceholder="blur"(or anything else). - Use it as a CLI (drop it in an npm script) or call the API.
Install
npm install --save-dev @zachtrice/optimize-images
CLI
// package.json
{
"scripts": {
"optimize-images": "optimize-images",
"prebuild": "optimize-images"
}
}
npx optimize-images --dir public/images --out lib/image-blur.ts
| Option | Default | Description |
|---|---|---|
--dir <path> |
public/images |
Source image directory. |
--out <path|none> |
lib/image-blur.ts |
Blur-map output file (none = skip). |
--format <ts|js|json> |
ts |
Blur-map format. |
--export-name <name> |
imageBlurData |
Export name for ts/js output. |
--url-prefix <prefix> |
/images |
Public URL prefix used for map keys. |
--quality <1-100> |
82 |
WebP quality (full-size). |
--blur-width <px> |
20 |
Blur placeholder width. |
--blur-quality <1-100> |
20 |
Blur placeholder quality. |
Use with next/image
import Image from 'next/image'
import { imageBlurData } from '@/lib/image-blur'
<Image
src="/images/hero.webp"
alt="Hero"
width={1200}
height={630}
placeholder="blur"
blurDataURL={imageBlurData['/images/hero.webp']}
/>
API
import { optimizeImages, serializeBlurMap } from '@zachtrice/optimize-images'
const { blur, results } = await optimizeImages({
dir: 'public/images',
out: 'lib/image-blur.ts',
format: 'ts',
quality: 82,
log: console.log
})
optimizeImages(options)→{ blur, results }.blurmaps"/images/name.webp"to a base64 data URI;resultslists per-file byte sizes.serializeBlurMap(blur, format?, exportName?)→ source string (ts|js|json).
Existing .webp files are overwritten; source PNG/JPEG are left in place.
License
MIT ZachTRice