docusaurus/packages/lqip-loader
Alexey Pyltsyn 91ec2509b7
chore: prepare v2.0.0-beta.9 release (#5859)
* chore: prepare v2.0.0-beta.9 release

* v2.0.0-beta.9
2021-11-02 20:40:01 +03:00
..
src refactor: migrate lqip-loader to TS, fix typing for Webpack Loaders (#5779) 2021-10-27 16:38:11 +02:00
package.json chore: prepare v2.0.0-beta.9 release (#5859) 2021-11-02 20:40:01 +03:00
README.md docs(v2): Add READMEs to v2 packages (#4034) 2021-01-14 17:16:26 +01:00
tsconfig.json refactor: migrate lqip-loader to TS, fix typing for Webpack Loaders (#5779) 2021-10-27 16:38:11 +02:00

@docusaurus/lqip-loader

Low Quality Image Placeholders (LQIP) loader for webpack.

Installation

npm install --save-dev @docusaurus/lqip-loader

Example

Generating Base64 & dominant colours palette for a jpeg image imported in your JS bundle:

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

{
  // OPTION A: default file-loader fallback
  test: /\.jpe?g$/,
  loaders: [
    {
      loader: '@docusaurus/lqip-loader',
      options: {
        path: '/media', // your image going to be in media folder in the output dir
        name: '[name].[ext]', // you can use [hash].[ext] too if you wish,
        base64: true, // default: true, gives the base64 encoded image
        palette: true // default: false, gives the dominant colours palette
      }
    }
  ]

  // OPTION B: Chained with your own url-loader or file-loader
  test: /\.(png|jpe?g)$/,
  loaders: [
    {
      loader: '@docusaurus/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);
// outputs: "data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhY....

// the object will have palette property, array will be sorted from most dominant colour to the least
console.log(banner.palette); // [ '#628792', '#bed4d5', '#5d4340', '#ba454d', '#c5dce4', '#551f24' ]

console.log(banner.src); // that's the original image URL to load later!

Important note

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. If you want the blur to be very intense (smooth), 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.

Credits

This package has been imported from @endiliey/lqip-loader which was a fork of the original lqip-loader created exclusively for Docusaurus.