[]
Document Solutions Image Viewer is a fast JavaScript based client-side Image Viewer that runs in all major browsers.
Note that DsImageViewer is the new name for GcImageViewer, with the same API.
During this transition period we are publishing both versions, but it is recommended that you switch to using DsImageViewer when possible.
const viewer = new GcImageViewer("#root");
new GcImageViewer(element, options?): GcImageViewer;
ImageViewer constructor.
string | HTMLElement
Required. HTML element or CSS selector.
Partial<ViewerOptions>
Optional. Viewer options.
GcImageViewer
static LicenseKey: string;
Gets or sets the license key.
actualSize: Size;
Gets the actual display size of the active image, including the active zoom value.
adaptiveNaturalSize: Size;
Gets the active image DPI adaptive natural size. This is the image size that will be used to display the image at 100%. The adaptiveNaturalSize property is used for the actual size calculations.
ImageViewerAPI.adaptiveNaturalSize
eventBus: EventBus;
Image viewer event bus.
viewer.eventBus.on("after-open", function(args) {
console.log("Image opened.", args);
});
viewer.open('Test.png');
frameIndex: number;
Gets or sets the active frame index. This is applicable for multi-frame images such as TIFF and ICO.
When setting this value, it will also be used as the initial frame index when opening a new image.
const viewer = new DsImageViewer('#root');
viewer.frameIndex = 9;
viewer.open('Test.ico');
framesCount: number;
Gets total frames count for the active image. Applicable for TIFF, ICO images.
const viewer = new DsImageViewer('#root');
viewer.onAfterOpen.register(function() {
alert("The image opened. Total number of frames: " + viewer.framesCount);
});
viewer.open('Test.png');
hasImage: boolean;
Indicates whether the viewer has opened the image.
const hasImageFlag = viewer.hasImage;
hasRedo: boolean;
Gets a value indicating whether the image viewer can redo changes.
if(viewer.hasRedo) {
viewer.redo();
}
hasUndo: boolean;
Gets a value indicating whether the image viewer can undo changes.
if(viewer.hasUndo) {
viewer.undo();
}
isAnimationStarted: boolean;
Gets a value indicating whether the image animation has started.
// Toggle image animation:
const viewer = DsImageViewer.findControl("#root");
if(viewer.isAnimationStarted) {
viewer.stopAnimation();
} else {
viewer.startAnimation();
}
ImageViewerAPI.isAnimationStarted
language: string;
language - A property that retrieves the standardized language key based on the provided language option.
The language key is determined by the options.language setting.
Standardized language key (e.g., 'en', 'ja').
layers: ImageLayer[];
Image layers. Used for painting.
naturalSize: Size;
Gets the active image natural size. The natural size is the image's width/height if drawn with nothing constraining its width/height, this is the number of CSS pixels wide the image will be.
onAfterOpen: EventFan;
The event raised when the user changes the viewer theme.
const viewer = new DsImageViewer('#root');
viewer.onAfterOpen.register(function() {
alert("The image opened.");
});
viewer.open('Test.png');
onBeforeOpen: EventFan;
Occurs immediately before the image opens.
const viewer = new DsImageViewer('#root');
viewer.onBeforeOpen.register(function(args) {
alert("A new image will be opened,\n payload type(binary or URL): " + args.type +",\n payload(bytes or string): " + args.payload);
});
viewer.open('Test.png');
onError: EventFan;
The event indicating error.
function handleError(args) {
console.error(args);
}
const viewer = new DsImageViewer('#root');
viewer.onError.register(handleError);
viewer.open('Test.png');
onImagePaint: EventFan;
The event raised when appearance image element changed.
openParameters: OpenParameters;
The Open parameters that were used to open an image.
options: Partial<ViewerOptions>;
Viewer options
toolbarLayout: ImageToolbarLayout;
Defines the layout of the toolbar. The full list of the viewer specific toolbar items:
'open', '$navigation', 'navigation-auto', '$split', 'zoom', '$fullscreen', 'save', 'about'
// Customize the toolbar layout:
viewer.toolbarLayout.viewer.default = ["open", "$zoom", "$fullscreen", "save", "print", "about"];
viewer.applyToolbarLayout();
undoCount: number;
Gets total undo levels count.
alert("Undo levels count is " + viewer.undoCount);
undoIndex: number;
Gets current undo level index.
alert("The current Undo level index is " + viewer.undoIndex);
undoStorage: UndoStorage;
Command based undo state storage.
const isUndoInProgress = viewer.undoStorage.undoInProgress;
version: string;
Returns the current version of the DS Image viewer.
alert("The DsImageViewer version is " + viewer.version);
zoom: ZoomSettings;
Gets or sets the current zoom settings
static findControl(selector): ImageViewerAPI;
Gets the viewer instance using the host element or host element selector.
string | HTMLElement
Root HTML element or its CSS selector
Image Viewer instance if found
const viewer = DsImageViewer.findControl("#root");
addKeyboardListener(uniqueKey, handler): void;
Add window keyboard listener.
string
Listener key.
Keyboard event handler.
void
ImageViewerAPI.addKeyboardListener
addPlugin(plugin): boolean;
Adds a plugin instance to the DsImageViewer. This method is now intended for internal and officially supported plugins only. Custom or third-party plugins are no longer supported starting from version 9.0. The plugin system remains available for internal use to provide optional viewer features, such as ImageFiltersPlugin, PageToolsPlugin, and PaintToolsPlugin. Attempting to register non-official plugins may lead to undefined behavior and is not supported by the product team.
The plugin instance
boolean
true if added successfully; otherwise false.
// ✅ Supported (built-in plugin)
const viewer = new DsImageViewer("#root");
viewer.addPlugin(new ImageFiltersPlugin());
// ❌ Not supported (custom plugin)
viewer.addPlugin(new CustomPlugin()); // Custom plugins are no longer supported
applyOptions(): void;
Call this method in order to apply changed options.
void
viewer.applyOptions();
applyToolbarLayout(): void;
Call this method in order to apply changes in @see:toolbarLayout.
void
viewer.toolbarLayout.viewer.default = ["open", "save"];
viewer.applyToolbarLayout();
const viewer = new DsImageViewer(document.querySelector("#viewer"));
const toolbar = viewer.toolbar;
const toolbarLayout = viewer.toolbarLayout;
toolbar.addItem({
key: 'custom-action',
icon: { type: "svg", content: '<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path style="fill: #205F78;" d="M20.25 12l-2.25 2.25 2.25 2.25-3.75 3.75-2.25-2.25-2.25 2.25-2.25-2.25-2.25 2.25-3.75-3.75 2.25-2.25-2.25-2.25 2.25-2.25-2.25-2.25 3.75-3.75 2.25 2.25 2.25-2.25 2.25 2.25 2.25-2.25 3.75 3.75-2.25 2.25 2.25 2.25z"></path></svg>' },
title: 'Custom action',
checked: false, enabled: false,
action: function () {
alert("Implement your action here.");
},
onUpdate: function (args) {
return {
enabled: true,
checked: false,
title: 'Custom action title'
}
}
});
toolbarLayout.viewer.default.splice(0, 0, "custom-action");
viewer.applyToolbarLayout();
ImageViewerAPI.applyToolbarLayout
clearUndo(): void;
Clear undo storage.
void
close(): Promise<void>;
Closes the currently open image.
Promise<void>
await viewer.close();
configurePluginMainToolbar(pos, buttonsToInsert): void;
Allows to configure the main toolbar layout.
number | boolean
The position where the buttons should be inserted. Use false or -1 to skip insertion. Undefined means the position will be determined automatically.
string[]
An array of button keys to be inserted.
void
// Apply a custom layout to insert "zoomIn" and "zoomOut" buttons at position 2 for the "PaintTools" plugin.
viewer.configurePluginMainToolbar(2, ["zoomIn", "zoomOut"]);
ImageViewerAPI.configurePluginMainToolbar
confirm(
confirmationText?,
level?,
title?,
buttons?): Promise<boolean | ConfirmButton>;
Display confirmation dialog.
any
Confirmation text can be plain string or JSX.Element if you're using React.
"error" | "info" | "warning"
string
Promise<boolean | ConfirmButton>
const confirmResult = await viewer.confirm("Apply changes?", "info", "Confirm action", ["Yes", "No", "Cancel"]);
if (confirmResult === "Yes") {
// put your code here
} else if (confirmResult === "No") {
// put your code here
} else {
// put your code here
}
dataUrlToImageData(dataUrl, destinationSize?): Promise<ImageData>;
Load image data using given data url.
string
Defines needed image size
Promise<ImageData>
ImageViewerAPI.dataUrlToImageData
dispose(): void;
Use this method to close and release resources occupied by the DsImageViewer.
void
ensurePaintLayer(): ImageLayer;
Create at least one image layer which will be used for painting.
ImageViewerAPI.ensurePaintLayer
executeCommand(command): Promise<void>;
Execute a new command.
Instance of a command.
Promise<void>
findPlugin(pluginId): ImageViewerPluginReference;
Finds a viewer plugin by its id.
Plugin id
// find imageFilters plugin:
const imageFilters = viewer.findPlugin("imageFilters");
// find pageTools plugin:
const pageTools = viewer.findPlugin("pageTools");
getEvent(eventName): EventFan;
Get event object.
string
Embedded or custom event name.
viewer.getEvent("CustomEvent").register(function(args) {
console.log(args);
});
getEventCanvasPoint(event, includeDpi): PointLocation;
Retrieves the point location from the pointer event provided by the 'event' parameter. The returned point is relative to the active canvas element.
MouseEvent | PointerEvent
DOM Pointer or Mouse event object.
boolean
ImageViewerAPI.getEventCanvasPoint
getImageDataUrl(): string;
Get current image data url.
string
ImageViewerAPI.getImageDataUrl
getOriginalImageDataUrl(): string;
Get unmodified current image data url.
string
ImageViewerAPI.getOriginalImageDataUrl
hideActivitySpinner(): void;
Hide activity spinner.
void
viewer.hideActivitySpinner();
ImageViewerAPI.hideActivitySpinner
hideSecondToolbar(toolbarKey?): Promise<void>;
Hides the second toolbar. This method deactivates any active editor mode associated with the second toolbar and then hides the toolbar itself.
Optional. The key identifying the specific second toolbar to hide. If provided, only hides the specified toolbar if it exists.
Promise<void>
A Promise that resolves once the second toolbar is successfully hidden.
// Hide the second toolbar
viewer.hideSecondToolbar();
// Hide a specific second toolbar by passing its key
viewer.hideSecondToolbar("page-tools");
ImageViewerAPI.hideSecondToolbar
newImage(options?): Promise<any>;
Create new empty image.
Partial<Size> & OpenParameters
Optional. New image parameters.
Promise<any>
await viewer.newImage({ width: 300, height: 300, fileName: "myImage.png" });
open(file, openParameters?): Promise<any>;
Open Image document.
string | URL | Uint8Array<ArrayBufferLike>
Image URL or it's binary data.
| OpenParameters
| ImageFormatCode
| ImageFormatName
Image format or image opening parameters object.
Promise<any>
viewer.open("Images/HelloWorld.png");
openLocalFile(): void;
Show the file open dialog where the user can select the Image file.
void
viewer.openLocalFile();
redo(): Promise<void>;
Redo changes.
Promise<void>
if(viewer.hasRedo) {
viewer.redo();
}
removeKeyboardListener(uniqueKey): void;
Remove window keyboard listener.
string
Listener key.
void
ImageViewerAPI.removeKeyboardListener
removeLayer(layerOrIndex): void;
Remove and dispose image layer given by argument layerOrIndex.
string | number | ImageLayer
Image layer or image layer index or image layer name.
void
removeLayers(): void;
Remove and dispose all image layers.
void
removePlugin(pluginId): void;
Removes a plugin instance from the DsImageViewer. This method remains available for internal and officially supported plugins only. Custom or third-party plugins are no longer supported starting from version 9.0.
| ImageViewerPluginReference
| PluginType
Plugin id or plugin instance.
void
// ✅ Supported
viewer.removePlugin("ImageFiltersPlugin");
// ❌ Not supported
viewer.removePlugin("CustomPluginId");
removePlugins(): void;
Remove all plug-ins.
void
viewer.removePlugins();
resetCursor(): void;
Resets the cursor to default style
void
// Reset cursor when operation completes
viewer.resetCursor();
// Reset cursor on mouse leave
viewerElement.addEventListener('mouseleave', () => {
viewer.resetCursor();
});
save(options?, original?): void;
Saves the Image document loaded in the Viewer to the local disk.
string | SaveOptions
Optional Destination file name or the save options, including the destination file name and other settings.
boolean
Optional Flag indicating whether to use the initial version of the image for save. Defaults to false.
void
// Example: Save the modified image without using specific options.
const viewer = DsImageViewer.findControl("#root");
viewer.save();
// Example: Save the modified image as "image.png".
const viewer = DsImageViewer.findControl("#root");
viewer.save({ fileName: "image.png" });
// Example: Download the original version of the image as "original_image.jpg".
const viewer = DsImageViewer.findControl("#root");
viewer.save({ fileName: "original_image.jpg", original: true });
// Example: Save the modified image in PNG format.
const viewer = DsImageViewer.findControl("#root");
viewer.save({ convertToFormat: "image/png" });
// Example: Save the modified image with a custom file name and in JPEG format.
const viewer = DsImageViewer.findControl("#root");
viewer.save({ fileName: "custom_name", convertToFormat: "image/jpeg" });
setCursor(cursorType): void;
Sets the cursor style for the image viewer
The cursor style to apply
void
// Set rotate cursor during image rotation
viewer.setCursor('rotate');
// Set resize cursor when hovering over edges
viewer.setCursor('nwse-resize');
GlobalCursorType for all available cursor options
setImageDataUrl(dataUrl): Promise<void>;
Modify current image data url.
any
Promise<void>
ImageViewerAPI.setImageDataUrl
showAbout(): void;
Show about dialog.
void
showActivitySpinner(container?): void;
Show activity spinner.
HTMLElement
void
viewer.showActivitySpinner();
ImageViewerAPI.showActivitySpinner
showMessage(
message,
details,
severity): void;
Shows the message for the user.
string
Message title text
string
Additional details text, empty by default.
"error" | "info" | "warn" | "debug"
Message severity, default "info".
void
showSecondToolbar(toolbarKey): Promise<void>;
Displays a second toolbar specified by the toolbarKey argument.
The key identifying the specific second toolbar to show.
Promise<void>
A Promise that resolves once the second toolbar is successfully displayed.
// Show the page tools toolbar
viewer.showSecondToolbar("page-tools");
ImageViewerAPI.showSecondToolbar
startAnimation(): void;
Start GIF animation.
void
DsImageViewer.findControl("#root").startAnimation();
stopAnimation(): void;
Stop GIF animation. *
void
toggleAnimation(): void;
Toggle GIF animation.
void
DsImageViewer.findControl("#root").toggleAnimation();
ImageViewerAPI.toggleAnimation
toggleCursor(cursorType): void;
Toggles between specified cursor and default style
false | GlobalCursorType
Cursor style to apply, or false to reset
void
// Toggle grab cursor during drag operations
viewer.toggleCursor(isDragging ? 'grab' : false);
// Toggle zoom cursor based on modifier key
document.addEventListener('keydown', (e) => {
if (e.ctrlKey) {
viewer.toggleCursor('zoom-in');
}
});
triggerEvent(eventName, args?): void;
Trigger event.
string
Embedded or custom event name.
Record<string, unknown>
Arguments for event handler function.
void
// Listen CustomEvent:
viewer.getEvent("CustomEvent").register(function(args) {
console.log(args);
});
// Trigger CustomEvent:
viewer.triggerEvent("CustomEvent", { arg1: 1, arg2: 2});
undo(): Promise<void>;
Undo changes.
Promise<void>
if(viewer.hasUndo) {
viewer.undo();
}