search
HomeWeb Front-endVue.jsHow to create realistic oil painting effects using Vue and Canvas
How to create realistic oil painting effects using Vue and CanvasJul 18, 2023 pm 10:53 PM
vue canvas oil painting effectUse vue to achieve oil painting effects

How to use Vue and Canvas to create realistic oil painting effects

Introduction:
Oil paintings are world-famous for their rich textures and delicate effects. Nowadays, with the powerful functions of Vue and Canvas, we can simulate the realistic effects of oil paintings through programming. This article will introduce you how to use Vue and Canvas to create realistic oil painting effects, and attach corresponding code examples.

1. Preparation
First, we need to introduce the Canvas element into the Vue project. Add a canvas tag to the template in the Vue component and give it a unique ID, for example:

<template>
  <canvas id="oil-painting-canvas"></canvas>
</template>

Next, get the canvas element in the calculated property of the Vue component for subsequent operations:

computed: {
  canvasElement() {
    return document.getElementById('oil-painting-canvas')
  }
}

At the same time, we need to obtain the drawing context:

computed: {
  canvasContext() {
    return this.canvasElement.getContext('2d')
  }
}

2. Draw the basic image
Before starting to create the effect of oil painting, we need to draw a basic image on Canvas as the bottom layer. This can be any picture. In the life cycle hook function mounted() of the Vue component, draw the image onto the Canvas:

mounted() {
  const image = new Image()
  image.src = require('@/assets/base-image.jpg')
  image.onload = () => {
    this.canvasContext.drawImage(image, 0, 0)
  }
}

In this way, we successfully draw a basic image on the Canvas.

3. Create oil painting effect
Next, we will add oil painting effect to Canvas. In the calculated properties of the Vue component, define a method to simulate the effect of oil painting:

computed: {
  oilPaintingEffect() {
    const imageData = this.canvasContext.getImageData(0, 0, this.canvasElement.width, this.canvasElement.height)
    const data = imageData.data

    for (let i = 0; i < data.length; i += 4) {
      const r = data[i]
      const g = data[i + 1]
      const b = data[i + 2]

      const gray = 0.2989 * r + 0.587 * g + 0.114 * b // 将像素点转化为灰度值

      data[i] = data[i + 1] = data[i + 2] = gray // 将RGB值设置为灰度值,使图片变成黑白色调
    }

    this.canvasContext.putImageData(imageData, 0, 0)
  }
}

In the above code, we use the getImageData() method to obtain the data of each pixel on the Canvas , and then use the average of the RGB values ​​as the grayscale value to convert the pixels into black and white tones, simulating the effect of an oil painting. Finally, the processed image data is redrawn to the Canvas through the putImageData() method.

4. Add interactivity
We can enable users to interact with the oil painting effect by adding interactivity. In the method of the Vue component, add a mouse event listener to achieve interactive effects:

methods: {
  handleMousemove(event) {
    const x = event.offsetX
    const y = event.offsetY

    const imageData = this.canvasContext.getImageData(0, 0, this.canvasElement.width, this.canvasElement.height)
    const data = imageData.data

    for (let i = 0; i < data.length; i += 4) {
      const distance = Math.sqrt((x - i / 4 % this.canvasElement.width) ** 2 + (y - Math.floor(i / 4 / this.canvasElement.width)) ** 2)
      const opacity = Math.max(0, 0.8 - distance / 100) // 控制透明度,距离鼠标越远,透明度越低

      data[i + 3] = opacity * 255 // 将透明度应用到像素点上
    }

    this.canvasContext.putImageData(imageData, 0, 0)
  }
}

In this code, we listen to the mouse movement event and calculate the coordinates of the mouse. By calculating the distance of the mouse relative to the pixels, the transparency changes are controlled to achieve the interactivity of the oil painting effect.

5. Event binding
In order for the above interactive effect to take effect, we need to bind the mouse event to the Canvas element. In the template of the Vue component, bind the handleMousemove method to the mousemove event of Canvas:

<template>
  <canvas id="oil-painting-canvas" @mousemove="handleMousemove"></canvas>
</template>

Conclusion:
By combining Vue and Canvas, we can use code to Simulate the realistic effect of oil painting and achieve interactivity. This article shows you how to create realistic oil painting effects in a Vue project, with corresponding code examples. Hope this article helps you!

The above is the detailed content of How to create realistic oil painting effects using Vue and Canvas. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
How to configure the lifecycle hooks of the component in VueHow to configure the lifecycle hooks of the component in VueMar 04, 2025 pm 03:29 PM

This article clarifies the role of export default in Vue.js components, emphasizing that it's solely for exporting, not configuring lifecycle hooks. Lifecycle hooks are defined as methods within the component's options object, their functionality un

How to configure the watch of the component in Vue export defaultHow to configure the watch of the component in Vue export defaultMar 04, 2025 pm 03:30 PM

This article clarifies Vue.js component watch functionality when using export default. It emphasizes efficient watch usage through property-specific watching, judicious deep and immediate option use, and optimized handler functions. Best practices

How do I create and use custom plugins in Vue.js?How do I create and use custom plugins in Vue.js?Mar 14, 2025 pm 07:07 PM

Article discusses creating and using custom Vue.js plugins, including development, integration, and maintenance best practices.

What is Vuex and how do I use it for state management in Vue applications?What is Vuex and how do I use it for state management in Vue applications?Mar 11, 2025 pm 07:23 PM

This article explains Vuex, a state management library for Vue.js. It details core concepts (state, getters, mutations, actions) and demonstrates usage, emphasizing its benefits for larger projects over simpler alternatives. Debugging and structuri

What are the key features of Vue.js (Component-Based Architecture, Virtual DOM, Reactive Data Binding)?What are the key features of Vue.js (Component-Based Architecture, Virtual DOM, Reactive Data Binding)?Mar 14, 2025 pm 07:05 PM

Vue.js enhances web development with its Component-Based Architecture, Virtual DOM for performance, and Reactive Data Binding for real-time UI updates.

How do I implement advanced routing techniques with Vue Router (dynamic routes, nested routes, route guards)?How do I implement advanced routing techniques with Vue Router (dynamic routes, nested routes, route guards)?Mar 11, 2025 pm 07:22 PM

This article explores advanced Vue Router techniques. It covers dynamic routing (using parameters), nested routes for hierarchical navigation, and route guards for controlling access and data fetching. Best practices for managing complex route conf

How do I configure Vue CLI to use different build targets (development, production)?How do I configure Vue CLI to use different build targets (development, production)?Mar 18, 2025 pm 12:34 PM

The article explains how to configure Vue CLI for different build targets, switch environments, optimize production builds, and ensure source maps in development for debugging.

How do I use Vue with Docker for containerized deployment?How do I use Vue with Docker for containerized deployment?Mar 14, 2025 pm 07:00 PM

The article discusses using Vue with Docker for deployment, focusing on setup, optimization, management, and performance monitoring of Vue applications in containers.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools