lqip-loader: low quality images placeholders for webpack
demo
npm install --save-dev lqip-loader
Generating Base64 & dominant colours palette for a jpeg image imported in your JS bundle:
PS: The large image file will be emitted & only 400byte of Base64 (if set to true in the loader options) will be bundled.
webpack.config.js:
{
test: /\.jpe?g$/,
loaders: [
{
loader: 'lqip-loader',
options: {
path: '/media',
name: '[name].[ext]',
base64: true,
palette: true
}
}
]
test: /\.(png|jpe?g)$/,
loaders: [
{
loader: 'lqip-loader',
options: {
base64: true,
palette: false
}
},
{
loader: 'url-loader',
options: {
limit: 8000
}
}
]
}
your-app-module.js:
import banner from './images/banner.jpg';
console.log(banner.preSrc);
console.log(banner.palette)
console.log(banner.src)
To save memory and improve GPU performance, browsers (including Chrome started from 61.0.3163.38) will now render a
slightly more crisp or pixelated Base64 encoded images.
Older Chrome to the left, Chrome v61 to the right.
If you want the blur to be smooth really bad, here's a fix!
img {
filter: blur(25px);
}
More history about the issue can be found here and here.
alternatively, you can fill the container with a really cheap colour or gradient from the amazing palette we provide.
Related projects to this would be lqip module for Node as well as lqip-cli.
Thanks to Colin van Eenige for his reviewing and early testing.
MIT - Zouhir Chahoud