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(); 