Categories
Vue

How to Make a Photo Editor with React

Making a photo editor that is as least as capable as Microsoft Paint is not hard. Developers have done the hard work for building photo editor widgets for JavaScript. One example is the Toast UI Image Editor, located at https://ui.toast.com/tui-image-editor.

It is a very capable photo editor. You can style it with themes and users can apply effects that they like to their image easily. The list of features for the editor include loading images, undo and redo, crop, flip, rotate, draw, add shapes, write text, and add mask and image filters.

You can retrieve the image easily and save it to disk since the editor loads the image into a HTML canvas element.

In this article, we will build a photo editor with React using the React version of the Toast UI Image Editor. We will style it and add a download button to save the image to disk.

To start, we create the app with Create React App. Run npx create-react-app photo-editor-app to create the project and install the packages.

Next we add our own packages to the app. We need @toast-ui/react-image-editor , which the React version of the Toast UI Image Editor, Bootstrap and React Bootstrap for styling, React Router for routing, and Download.js for downloading the image to disk.

To do this, run npm i @toast-ui/react-image-editor bootstrap downloadjs react-bootstrap react-router-dom . This will install all the libraries listed above.

With all the packages installed, we can start writing code. First we start with modifying App.js . We replace the existing code with:

import React from "react";
import "./App.css";
import TopBar from "./TopBar";
import { Router, Route, Link } from "react-router-dom";
import { createBrowserHistory as createHistory } from "history";
import HomePage from "./HomePage";
const history = createHistory();

function App() {
  return (
    <div className="App">
      <Router history={history}>
        <TopBar />
        <Route
          path="/"
          exact
          component={HomePage}
        />
      </Router>
    </div>
  );
}

export default App;

We will display the top bar which we will create and add a route to the home page so we can access it after we build it.

Next in App.css we replace the existing code with:

.center {
    text-align: center;
}

so that we can center our titles and buttons later.

Next we add a home page. Create a file called HomePage.js in the src folder and add the following:

import React, { useState, useEffect } from "react";
import "./HomePage.css";
import "tui-image-editor/dist/tui-image-editor.css";
import ImageEditor from "@toast-ui/react-image-editor";
import Button from "react-bootstrap/Button";
const icona = require("tui-image-editor/dist/svg/icon-a.svg");
const iconb = require("tui-image-editor/dist/svg/icon-b.svg");
const iconc = require("tui-image-editor/dist/svg/icon-c.svg");
const icond = require("tui-image-editor/dist/svg/icon-d.svg");
const download = require("downloadjs");

const myTheme = {
  "menu.backgroundColor": "white",
  "common.backgroundColor": "#151515",
  "downloadButton.backgroundColor": "white",
  "downloadButton.borderColor": "white",
  "downloadButton.color": "black",
  "menu.normalIcon.path": icond,
  "menu.activeIcon.path": iconb,
  "menu.disabledIcon.path": icona,
  "menu.hoverIcon.path": iconc,
};

function HomePage() {
  const [imageSrc, setImageSrc] = useState("");
  const imageEditor = React.createRef();

  const saveImageToDisk = () => {
    const imageEditorInst = imageEditor.current.imageEditorInst;
    const data = imageEditorInst.toDataURL();
    if (data) {
      const mimeType = data.split(";")[0];
      const extension = data.split(";")[0].split("/")[1];
      download(data, `image.${extension}`, mimeType);
    }
  };

  return (
    <div className="home-page">
      <div className="center">
        <h1>Photo Editor</h1>
        <Button className='button' onClick={saveImageToDisk}>Save Image to Disk</Button>
      </div>
      <ImageEditor
        includeUI={{
          loadImage: {
            path: imageSrc,
            name: "image",
          },
          theme: myTheme,
          menu: ["crop", "flip", "rotate", "draw", "shape", "text", "filter"],
          initMenu: "",
          uiSize: {
            height: `calc(100vh - 160px)`,
          },
          menuBarPosition: "bottom",
        }}
        cssMaxHeight={window.innerHeight}
        cssMaxWidth={window.innerWidth}
        selectionStyle={{
          cornerSize: 20,
          rotatingPointOffset: 70,
        }}
        usageStatistics={true}
        ref={imageEditor}
      />
    </div>
  );
}

export default HomePage;

There are a few tricks to note to get the image editor working properly. First we need to include the icons ourselves by adding:

const icona = require("tui-image-editor/dist/svg/icon-a.svg");
const iconb = require("tui-image-editor/dist/svg/icon-b.svg");
const iconc = require("tui-image-editor/dist/svg/icon-c.svg");
const icond = require("tui-image-editor/dist/svg/icon-d.svg");

This is not in the documentation so if you just follow the instructions, you won’t see the icons in the toolbar.

To change the colors of the image editor, we have:

const myTheme = {
  "menu.backgroundColor": "white",
  "common.backgroundColor": "#151515",
  "downloadButton.backgroundColor": "white",
  "downloadButton.borderColor": "white",
  "downloadButton.color": "black",
  "menu.normalIcon.path": icond,
  "menu.activeIcon.path": iconb,
  "menu.disabledIcon.path": icona,
  "menu.hoverIcon.path": iconc,
};

This is fully documented in http://nhn.github.io/tui.image-editor/latest/themeConfig. The code above just changes the image editor to a black background and change the color of the download button to black with a white background.

Next we changed the size of the image editor by adding:

cssMaxHeight={window.innerHeight}
cssMaxWidth={window.innerWidth}

and we added the toolbar functionality by adding:

menu: ["crop", "flip", "rotate", "draw", "shape", "text", "filter"]

We set initMenu to an empty string so that it won’t show any dialog when user load the image.

To let user save the image to disk, we add a button with a handler to do this. We have:

<Button className='button' onClick={saveImageToDisk}>Save Image to Disk</Button>

The saveImageToDisk handler saves the image to disk and we get the image’s base64 text by adding:

const imageEditorInst = imageEditor.current.imageEditorInst;
const data = imageEditorInst.toDataURL();

into the saveImageToDisk function.

Since we set the ref prop in the ImageEditor component by adding const imageEditor = React.createRef();, we can get the image with those 2 lines above.

If data is defined, then we can download the image. We add:

const mimeType = data.split(";")[0];
const extension = data.split(";")[0].split("/")[1];
download(data, `image.${extension}`, mimeType);

to get the file type and the extension of the image.

Base64 data is string that starts with some file type metadata, for example:

data:image/png;base64,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

Notice that we have data:image/png at the beginning. That tells us that the image is in png format, so we can extract those with:

const mimeType = data.split(";")[0];
const extension = data.split(";")[0].split("/")[1];

and pass them as arguments to the download function.

Then create a file called HomePage.css , and add:

.button {
    margin-bottom: 10px;
}

to add some margin to the ‘Save file to disk’ button.

Next we build the top bar by creating TopBar.js in the src folder and add the following code:

import React from "react";
import Navbar from "react-bootstrap/Navbar";
import Nav from "react-bootstrap/Nav";
import "./TopBar.css";
import { withRouter } from "react-router-dom";

function TopBar({ location }) {
  const { pathname } = location;

  return (
    <Navbar expand="lg" variant="dark">
      <Navbar.Brand href="#home">Photo Editor App</Navbar.Brand>
      <Navbar.Toggle aria-controls="basic-navbar-nav" />
      <Navbar.Collapse id="basic-navbar-nav">
        <Nav className="mr-auto">
          <Nav.Link href="/" active={pathname == "/"}>
            Home
          </Nav.Link>
        </Nav>
      </Navbar.Collapse>
    </Navbar>
  );
}

export default withRouter(TopBar);

The Navbar component is provided by React Boostrap. We wrap the TopBar component with the withRouter function so that we get the location prop passed in, which has the pathname property. We use pathname to check for the path and see if we set the active propr of Nav.Link to true by seeing the path match the URL of the link.

Next create a file called TopBar.css and add:

nav {
    background-color: green!important;
}

to change the color of the Navbar .

Finally, in index.html , we replace the existing code with:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="theme-color" content="#000000" />
    <meta
      name="description"
      content="Web site created using create-react-app"
    />
    <link rel="apple-touch-icon" href="logo192.png" />
    <!--
      manifest.json provides metadata used when your web app is installed on a
      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
    -->
    <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
    <!--
      Notice the use of %PUBLIC_URL% in the tags above.
      It will be replaced with the URL of the `public` folder during the build.
      Only files inside the `public` folder can be referenced from the HTML.

      Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
      work correctly both with client-side routing and a non-root public URL.
      Learn how to configure a non-root public URL by running `npm run build`.
    -->
    <title>Photo Editor App</title>
    <link
      rel="stylesheet"
      href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
      integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
      crossorigin="anonymous"
    />
  </head>
  <body>
    <noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="root"></div>
    <!--
      This HTML file is a template.
      If you open it directly in the browser, you will see an empty page.

      You can add webfonts, meta tags, or analytics to this file.
      The build step will place the bundled scripts into the <body> tag.

      To begin the development, run `npm start` or `yarn start`.
      To create a production bundle, use `npm run build` or `yarn build`.
    -->
  </body>
</html>

We changed the title of the app and added the Bootstrap CSS to the head tag.

Categories
Vue Answers

How ow to Download a File in the Browser with Vue.js?

Sometimes, we want to download a file in the browser with Vue.js.

In this article, we’ll look at how to download a file in the browser with Vue.js.

Download a File in the Browser with Vue.js

To download a file in the browser with Vue.js, we can make a GET request to get the file response data.

Then we can create a link from it and click on it programmatically to download the file.

For instance, we can write:

<template>
  <div id="app">
    <a
      href="#"
      @click.prevent="
        downloadItem({
          url:
            'https://test.cors.workers.dev/?https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf',
          label: 'example.pdf',
        })
      "
    >
      download
    </a>
  </div>
</template>
<script>
import axios from "axios";

export default {
  name: "App",
  methods: {
    async downloadItem({ url, label }) {
      const response = await axios.get(url, { responseType: "blob" });
      const blob = new Blob([response.data], { type: "application/pdf" });
      const link = document.createElement("a");
      link.href = URL.createObjectURL(blob);
      link.download = label;
      link.click();
      URL.revokeObjectURL(link.href);
    },
  },
};
</script>

We have the downloadItem method that takes an object with the file url to download, and the label property which has the file name.

In the method, we call axios.get to get the data from the url .

We set responseType to 'blob' to let us download the data.

Next, we create a Blob instance with the response.data which has the file contents.

type is set to the MIME type of the file.

Next, we use document.createElement to create the a element which we click to download the file.

We set its href to the URL created by URL.createObjectURL with the blob .

And then we set the download property to the label file name.

Then we call click to click on the a element to do the download.

And finally, we call URL.revokeObjectURL to clear the URL resources.

Conclusion

To download a file in the browser with Vue.js, we can make a GET request to get the file response data.

Categories
Vue Answers

How to Listen for Right Clicks with Vue.js?

Sometimes, we want to listen for right clicks and do something when the user right-clicks on an element with Vue.js.

In this article, we’ll look at how to listen for right clicks and do something when the user right-clicks on an element with Vue.js.

Listen for Right Clicks with Vue.js

To listen for right clicks and do something when the user right-clicks on an element with Vue.js, we can use the @contextmenu directive to listen for contextmenu events, which are emitted on right-click.

For instance, we can write:

<template>  
  <div id="app">  
    <button @contextmenu.prevent="onRightClick">right click me</button>  
  </div>  
</template>  
<script>  
export default {  
  name: "App",  
  methods: {  
    onRightClick() {  
      console.log("right clicked");  
    },  
  },  
};  
</script>

We add the prevent modifier to prevent the default right-click menu from showing, and instead the onRightClick method will be run when we right click on the button.

Now when we right-click on the button, we see 'right clicked' logged.

Conclusion

To listen for right clicks and do something when the user right-clicks on an element with Vue.js, we can use the @contextmenu directive to listen for contextmenu events, which are emitted on right-click.

Categories
Vue Answers

How to Get an Element’s Height with Vue.js?

Sometimes, we want to get an element’s height with Vue.js.

In this article, we’ll look at how to get an element’s height with Vue.js.

Get an Element’s Height with Vue.js

To get an element’s height with Vue.js, we can assign a ref to the element we want to get the height for.

Then we can get the height with the clientHeight property of the element that’s been assigned the ref.

For instance, we can write:

<template>  
  <div id="app">  
    <div ref="infoBox">hello world</div>  
  </div>  
</template>  
<script>  
export default {  
  name: "App",  
  mounted() {  
    console.log(this.$refs.infoBox.clientHeight);  
  },  
};  
</script>

We assigned the ref with the ref prop set to a name.

Then we can use the this.$refs property to get the element with thos.$refs.infoBox which returns the div element.

And then we can use clientHeight to get the div’s height.

Conclusion

To get an element’s height with Vue.js, we can assign a ref to the element we want to get the height for.

Categories
Vue Answers

How to Output a Comma-Separated Array with Vue.js?

Sometimes, we want to output a comma-separated array with Vue.js.

In this article, we’ll look at how to output a comma-separated array with Vue.js.

Output a Comma-Separated Array with Vue.js

To output a comma-separated array with Vue.js, we can use the v-for directive.

For instance, we can write:

<template>
  <div id="app">
    <span v-for="(list, index) in lists" :key="list">
      <span>{{ list }}</span>
      <span v-if="index + 1 < lists.length">, </span>
    </span>
  </div>
</template>
<script>
export default {
  name: "App",
  data() {
    return {
      lists: ["Vue", "Angular", "React"],
    };
  },
};
</script>

We use the v-for directive to render the list array into a comma-separated list.

We add a comma only when index + 1 < lists.length so we only add the commas between the words.

A shorter way to render the words in the array into a comma-separated list is to use the array join method.

For example, we can write:

<template>
  <div id="app">
    <span>{{ lists.join(", ") }}</span>
  </div>
</template>
<script>
export default {
  name: "App",
  data() {
    return {
      lists: ["Vue", "Angular", "React"],
    };
  },
};
</script>

to combine the words with the join method in the template.

Either way, we get:

Vue, Angular, React

rendered on the screen.

Conclusion

To output a comma-separated array with Vue.js, we can use the v-for directive.

A shorter way to render the words in the array into a comma-separated list is to use the array join method.