Wrapper for pica to work with blobs, with some sugar.
This is a pica wrapper for convenient work with images from file input fields.
While pica works with raw bitmaps, this package operates with "image files".
Additional features are:
- [jpeg] Apply orientation to the downscaled result.
- [jpeg] Keep metadata, but with patched orientation and the original color profile removed.
- Easy to monkey-patch for your needs.
npm install image-blob-reduceimport imageBlobReduce from 'image-blob-reduce'
const reduce = imageBlobReduce()
//...
reduce
.toBlob(image_blob, { max: 1000 })
.then(blob => { ... })If you load the prebuilt UMD script in a browser, use
window.imageBlobReduce.
Note
For a quick look at dist/ folder contents, see
https://unpkg.com/image-blob-reduce@latest/.
Create a new reducer instance.
import imageBlobReduce, { ImageBlobReduce } from 'image-blob-reduce'
const reduce = imageBlobReduce()
reduce instanceof ImageBlobReduce // trueCreate a new reducer. Options:
pica- apicainstance, if you want different defaults or a shared web worker pool.
Downscale an image so its width and height fit within max*max pixels. For
example, { max: 1000 } limits the longest side to 1000 px; it does not limit
the output blob size in bytes. If the blob contains a JPEG, orientation is
applied and metadata from the original image is reused (with minimal changes).
Options:
- max - max allowed width/height, in pixels.
- pica
.resize()options -quality,filter,unsharpAmount,unsharpRadius,unsharpThreshold,cancelToken
The same as .toBlob(), but with canvas output.
Inject your custom handler before the specified method. See the .setup()
source code for an example.
The same as .before(), but the handler is injected after the specified
method.
Sugar to simplify the assignment of external plugins. Just calls
plugin_init(this, ...params).
Configure the instance before first use. By default, installs the built-in JPEG hooks. Override this method if you need to install custom plugins, add hooks or replace pipeline methods before processing starts.
import imageBlobReduce, { ImageBlobReduce, image_traverse, pica, Pica } from 'image-blob-reduce'imageBlobReduce- default factory.ImageBlobReduce- reducer constructor.image_traverse- JPEG traversal helpers.pica-picafactory.Pica-picaconstructor.
Legacy static fields are available only in UMD build:
window.imageBlobReduce.ImageBlobReducewindow.imageBlobReduce.image_traversewindow.imageBlobReduce.picawindow.imageBlobReduce.Pica
Since it's difficult to implement all possible options, this package is specially designed for easy customization. See the source code first.
- You can inherit from the class & replace existing methods.
- You can add extra actions before/after existing methods.
- You can override existing methods of an instance.
For example, if you wish to force output to always be JPEG with a certain quality:
import imageBlobReduce from 'image-blob-reduce'
const reducer = imageBlobReduce()
reducer._create_blob = function (env) {
return this.pica.toBlob(env.out_canvas, 'image/jpeg', 0.8)
.then(function (blob) {
env.out_blob = blob
return env
})
}Or rewrite the scaling logic, introducing a min option instead:
import imageBlobReduce from 'image-blob-reduce'
const reducer = imageBlobReduce()
reducer._calculate_size = function (env) {
const scale_factor = env.opts.min / Math.min(env.image.width, env.image.height)
if (scale_factor > 1) scale_factor = 1
env.transform_width = Math.max(Math.round(env.image.width * scale_factor), 1)
env.transform_height = Math.max(Math.round(env.image.height * scale_factor), 1)
return env
}