UNPKG

img-cacher

Version:

Serve images from localStorage – great for offline apps.

144 lines (101 loc) 4.28 kB
# 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`.