This project has been retired and is replaced by:
Saves a image URL for an avatar to the local file system (and optimizes the image). Read the blog post that inspired this utility: A Featherweight Facepile.
- Workaround for large avatar images on hosted services.
- Image URLs won’t break in the future.
- Only keeps the smallest images (
webp
if smallest and one ofjpg
orpng
)
npm install avatar-local-cache
The default behavior will only keep webp
if it has the smallest file size and then will pick one of jpg
or png
based on which one is the smallest of the two. To disable this, see the Keep all formats
example below.
const AvatarLocalCache = require("avatar-local-cache");
let cache = new AvatarLocalCache();
cache.fetchUrl("https://opencollective-production.[…].jpeg", "nhoizey").then(function(files) {
console.log( `Wrote ${files.map(entry => entry.path).join(", ")}.` );
});
The above writes three files but only keeps one: nhoizey.webp
(20KB), nhoizey.jpg
(22KB), and nhoizey.png
(9KB).
- It only keeps the
webp
file if it is the smallest (it is not). - It then picks the smaller of the
jpg
and thepng
(in this case, thepng
wins by 13KB).
This allows you to iterate over the object returned from the promise to create an img
(if only one source remains) or a picture
element (if the webp
survived alongside a jpg
or png
).
Images will be resized down to this width. Images smaller than this width will not be resized.
let cache = new AvatarLocalCache();
cache.width = 400;
let cache = new AvatarLocalCache();
cache.formats = ["jpeg"];
// or
cache.formats = ["png"];
// or (order doesn’t matter)
cache.formats = ["webp", "jpeg"];
To disable this file size comparison and file pruning, just set onlyKeepSmallestFormats
to false.
let cache = new AvatarLocalCache();
cache.onlyKeepSmallestFormats = false;
Added in 2.0.6
Faster. Won’t return size or sharp
metadata.
let cache = new AvatarLocalCache();
cache.skipMetadata = true;