This tutorial shows how to load, display, and save images using the LEADTOOLS SDK in React.JS.
| Overview | |
|---|---|
| Summary | This tutorial covers how to load, display, and save image in a React JS application. |
| Completion Time | 15 minutes |
| Visual Studio Project | Download tutorial project (553 KB) |
| Platform | React JS Web Application |
| IDE | Visual Studio Code - Client |
| Development License | Download LEADTOOLS |
| Try it in another language |
|
Get familiar with the basic steps of creating a project by reviewing the Add References and Set a License tutorial, before working on the Display Images in an Image Viewer - React JS tutorial.
To create the project structure open the command line console and cd into the location where the project is to be created. Then run the following command:
npx create-react-app <APP NAME> --template typescript
The references needed depend upon the purpose of the project. For this project, the following JS files are needed and located at <INSTALL_DIR>\LEADTOOLS23\Bin\JS:
Leadtools.jsLeadtools.d.tsLeadtools.Controls.jsLeadtools.Controls.d.tsMake sure to copy both files to the public\Common folder and import them in the public\index.html file.
The License unlocks the features needed for the project. It must be set before any toolkit function is called. For details, including tutorials for different platforms, refer to Setting a Runtime License.
There are two types of runtime licenses:
Note Adding LEADTOOLS local references and setting a license are covered in more detail in the Add References and Set a License tutorial.
With the project created, the references added, and the license set, coding can begin.
Create a new folder within the src folder and name it Components, inside of this folder create a new file and name it ImageViewer.tsx. Add the following code to ImageViewer.tsx:
///<reference path="../../public/Common/Leadtools.Controls.d.ts" />import { ChangeEvent, useEffect, useRef, useState } from "react";function ImageViewer() {const imageViewerRef = useRef(null);const [chosenFile, setChosenFile] = useState("https://demo.leadtools.com/images/jpeg/cannon.jpg");const [imageViewer, setImageViewer] = useState<lt.Controls.ImageViewer>();// On component mount, create the ImageVieweruseEffect(() => {createImageViewer();}, []);function createImageViewer() {if (imageViewerRef.current) {const createOptions = new lt.Controls.ImageViewerCreateOptions(imageViewerRef.current);const imageViewer = new lt.Controls.ImageViewer(createOptions);imageViewer.viewVerticalAlignment = lt.Controls.ControlAlignment.center;imageViewer.viewHorizontalAlignment = lt.Controls.ControlAlignment.center;imageViewer.autoCreateCanvas = true;imageViewer.imageUrl = chosenFile;setImageViewer(imageViewer);}}// When file is uploaded, make sure it is valid then update the stateconst handleFileUpload = (e: ChangeEvent<HTMLInputElement>) => {const selectedFile = e.target.files && e.target.files[0];if (selectedFile) {const newChosenFile = URL.createObjectURL(selectedFile);setChosenFile(newChosenFile);}};// When the state is updated, update the imageUrluseEffect(() => {if (imageViewer) imageViewer.imageUrl = chosenFile;}, [chosenFile]);// Download the Imageconst handleDownloadClick = async () => {if (chosenFile) {try {const response = await fetch(chosenFile);const blob = await response.blob();const url = URL.createObjectURL(blob);const link = document.createElement('a');link.href = url;link.download = 'downloaded-image.jpg';link.click();URL.revokeObjectURL(url);} catch (error) {console.error('Error downloading image:', error);}}};return (<><input className="file-input" type="file" onChange={handleFileUpload} accept=".jpg,.jpeg,.png" /><divref={imageViewerRef}style={{ height: "720px", width: "1280px" }}></div><button onClick={handleDownloadClick}>Save Image</button></>);}export default ImageViewer;
Open src\App.js file and modify the HTML with the below code:
import React from 'react';import logo from './logo.svg';import './App.css';function App() {return (<div className="App"><header className="App-header"><div class="tutorial-image"><img src={logo} className="App-logo" alt="logo" /></div><p>Loading and Saving an Image example</p><p>Image Viewer Below</p><input type="file" id="file-input" accept=".jpg,.jpeg,.png"></input><button id="addToViewer">Add Image To Viewer</button><a id="download" download="new-image-name.jpg"> save image </a><div id="imageViewerDiv"></div></header></div>);}export default App;
Inside of the App.tsx file change the App functions return statement to:
return (<div className="App"><header className="App-header"><p>Displaying an Image Example</p><ImageViewer /></header></div>);
Add the following CSS class to App.css
.file-input {padding: 20px;}
Open the command line console, then cd into the root of the React project. From there, run npm start.
This will build the React application, and the ImageViewer will now be loaded into the browser.

To load a new RasterImage into the ImageViewer, click Choose File and choose an image. Then press Add Image to Viewer to display the image. To export the image click the Save Image button and the image will begin to download.
This tutorial showed how to load, display, and save images. In addition, it showed how to use the ImageViewer object.