img-cacher
Version:
Serve images from localStorage – great for offline apps.
144 lines (101 loc) • 4.28 kB
Markdown
# ImgCacher
Serve images from localStorage – great for offline apps. Yes, ImgCacher supports resizing & cropping.
Lightning-Quick 3-Level Caching
===============================
1. ImgCacher will try to look up the image in localStorage. This works across page loads!
2. If not found, ImgCacher will look up the cropped & resized image in an in-memory store. If you have the same image cropped and sized similarly on a page 1000 times, resizing & cropping will only be executed the first time.
3. If still not found, ImgCacher will look the image up in an in-memory store of source images. Whether you're loading an image 1 or 1000 times on a page, the source image will be downloaded only once.
How Do I Use ImgCacher?
=======================
```html
<script type="text/javascript" src="/path/to/img-cacher.js"></script>
<script type="text/javascript">
var url = 'http://www.marketingjs.com/assets/car.jpg',
imgCacher = new window.ImgCacher({
prefix: 'img-demo-',
logging: 'imgCacher'
});
// Basic usage
imgCacher.src(url, {
maxWidth: 600,
maxHeight: 600
}, function(err, dataUrl) {
var img = document.createElement('img');
if (err) { // Something went wrong! Fallback to the supplied `url`.
img.src = url;
} else {
img.src = dataUrl;
}
document.body.appendChild(img);
});
// A Square, Cropped Thumbnail
imgCacher.src('test', { // 'test' is a cacheKey, see buildSrc in options
fillWidth: 300,
fillHeight: 300,
bg: '#ffffff',
cropWidth: 300,
cropHeight: 300,
src: function(done) {
// If your src is dynamically generated (eg. private s3 URL), return as the 2nd argument
setTimeout(function() {
done(url);
}, 3000);
}
// cropX: 0, // If not supplied, crop is centered horizontally
// cropY: 0 // If not supplied, crop is centered vertically
}, function(err, dataUrl) {
var img = document.createElement('img');
if (err) { // Something went wrong! Fallback to the supplied `url`.
img.src = url;
} else {
img.src = dataUrl;
}
document.body.appendChild(img);
});
</script>
```
## CHANGELOG
1.1.5
-----
- `Math.ceil()` all sizes for native functionality (eg. resize and crop to 182.9384px or invalid dimensions in iOS UIWebView creates a blank image).
1.1.4
-----
- New base64Img options passed to `toDataURL`: `options.type`, `options.encoderOptions`.
1.1.3
-----
- Fix cross-origin.
1.1.2
-----
- Fix for log (works better with browser defaults).
- Fix for multiple images loading on the same page, but different sizes.
1.1.1
-----
- Anti-aliasing support
1.1.0
-----
- Fixed a bug in caching `base64Img` src images.
1.0.7
-----
- Added `cacheKey` as first argument to the dynamic `src` function
1.0.6
-----
- More obvious use of `cacheKey`
- Supply a `src` function to the `options` hash to build dynamic URLs *only if necessary*. This is helpful for private S3 URLs, etc.
1.0.5
-----
- Optimize memoization.
- Cache input `src` `img` in memory.
- Cache generated `base64URL` from options in memory.
1.0.4
-----
- Added `logging` option to `ImgCacher`.
- Memoization of `getData` for an immense speed boost. Now, if you `getData` the same `src` 20 times in parallel, only 1 request will be sent remotely, but all 20 callbacks will be fired as expected. This means only 1 remote request (instead of 20) and 1 save to localStorage (instead of 20).
- Adding `img-cacher.min.js` to the `demo` folder in future version releases.
1.0.3
-----
- Added `fillWidth` and `fillHeight`. These maximize the image to the biggest possible area.
- Added `cropWidth`, `cropHeight`, `cropX`, and `cropY`. These crop your image to the desired size AFTER resizing it and BEFORE storing it locally.
- Added `bg` which adds a background color to the image (only seen if cropping out of bounds or if your image has a transparent background.
1.0.2
-----
- Add options hash to all methods for all methods that accept a `src`. Options hash can functionally accept `width`, `height`, `maxWidth`, and `maxHeight`.