Migration from v1 guide
WARNING
Legacy browser support has been stopped in v2. See supported browsers list at Vite docs.
Import
If you have loaded Lens script by url, change file name from lens.js
or lens.min.js
to lens.umd.cjs
.
lens.js
is now ES module and can be used for native imports.
distort()
function changes
image
argument type changed
HTMLImageElement
, ImageBitmap
, Blob
, Promise<ImageAdapter>
and other types are not supported as input arguments. Only ImageAdapter
implementations or underlying resource types (HTMLCanvasElement
, OffscreenCanvas
in browser, Jimp
in Node.js) are supported.
let adapterPromise: Promise<ImageAdapter>;
// ...
const result = await distort(
adapterPromise,
await adapterPromise,
distortion,
args
);
import { Canvas } from "@alxcube/lens";
let imageBlob: Blob;
// ...
const result = await distort(
imageBlob,
await Canvas.createFromBlob(imageBlob),
distortion,
args
);
import { Canvas } from "@alxcube/lens";
let image: HTMLImageElement;
// ...
const result = await distort(
image,
Canvas.createFromImage(image),
distortion,
args
);
resampler
option changed
resampler
option was renamed to preferredResampler
and only supports "ewa" | "point"
type. "ewa"
is still used as default value.
const result = await distort(image, distortion, args, {
resampler: "point",
preferredResampler: "point",
});
imageVirtualPixelMethod
option renamed
Renamed to virtualPixelMethod
const result = await distort(image, distortion, args, {
imageVirtualPixelMethod: VirtualPixelMethod.TILE,
virtualPixelMethod: VirtualPixelMethod.TILE,
});
imageInterpolationMethod
option renamed
Renamed to interpolationMethod
const result = await distort(image, distortion, args, {
imageInterpolationMethod: InterpolationMethod.INTEGER,
interpolationMethod: InterpolationMethod.INTEGER,
});
repage
option behavior changed
In Lens v1.x when repage
option was set to [number, number]
(Point
) value, it was ADDING given offset to image virtual viewport offset. This was incorrect behavior. In v2, given offset SETS image virtual viewport offset to given value.
ImageAdapter
changes
Removed getVirtualPixelMethod()
method
Method was removed and has no alternatives.
Removed setVirtualPixelMethod()
method
Method was removed. virtualPixelMethod
option can be used instead:
import { distort, VirtualPixelMethod } from "@alxcube/lens";
/* ... */
const result = distort(image, distortion, args, {
virtualPixelMethod: VirtualPixelMethod.TILE,
});
Removed getInterpolationMethod()
method
Method was removed and has no alternatives.
Removed setInterpolationMethod()
method
Method was removed. interpolationMethod
option can be used instead:
import { distort, InterpolationMethod } from "@alxcube/lens";
/* ... */
const result = distort(image, distortion, args, {
interpolationMethod: InterpolationMethod.INTEGER,
});
Removed getInterpolatedPixelColor()
method.
Color interpolation was reworked and decoupled from ImageAdapter
.
getResource()
method is made synchronous
Replace async usages to sync:
const resource = await adapter.getResource();
const resource = adapter.getResource();
adapter.getResource().then(handleResource);
handleResource(adapter.getResource());
scale()
method is made synchronous
If you have used this method, replace async usage to sync usage.
getBlank()
method is made synchronous
If you have used this method (which is unlikely), replace async usage to sync usage.
commit()
method is made synchronous
Method is made synchronous and now returns void
. It is very unlikely that you have used this method, but worth noting.
Canvas
class changes
All changes to the ImageAdapter
interface apply to the Canvas
class in particular.
All public methods, not related to ImageAdapter
interface was removed.
The following are some alternatives:
Removed getCanvasElement()
method
import { toHTMLCanvasElement } from "@alxcube/lens";
/* ... */
document.body.appendChild(await adapter.getCanvasElement());
document.body.appendChild(toHTMLCanvasElement(adapter.getResource()));
Removed getOffscreenCanvas()
method
You may write tiny helper function to be sure you have OffscreenCanvas
:
function toOffscreen(
canvas: HTMLCanvasElement | OffscreenCanvas
): OffscreenCanvas {
if (canvas instanceof OffscreenCanvas) {
return canvas;
}
const offscreen = new OffscreenCanvas(canvas.width, canvas.height);
offscreen.getContext("2d").drawImage(canvas, 0, 0);
return offscreen;
}
...and use it with getResource()
method:
const offscreen = await adapter.getOffscreenCanvas();
const offscreen = toOffscreen(adapter.getResource());
Removed getImageElement
method
import { preloadHtmlImage, toHTMLCanvasElement } from "@alxcube.lens";
const image = await adapter.getImageElement();
const image = await preloadHtmlImage(
toHTMLCanvasElement(adapter.getResource()).toDataUrl()
);
Removed getBlob()
method
You can use toOffscreen()
function from above example:
const blob = await adapter.getBlob();
const blob = await toOffscreen(adapter.getResource()).convertToBlob();