Home  >  Article  >  Backend Development  >  How to draw graphics and shapes on pictures using Golang

How to draw graphics and shapes on pictures using Golang

王林
王林Original
2023-08-20 10:19:471316browse

How to draw graphics and shapes on pictures using Golang

How to use Golang to draw graphics and shapes on pictures

Abstract: This article introduces how to use the Golang programming language to draw graphics and shapes on pictures. We will demonstrate through sample code how to use Golang's image processing library to create different types of graphics and shapes.

Introduction:
In many applications, we often need to draw graphics and shapes on pictures, such as drawing lines, rectangles, circles, etc. Golang provides some powerful image processing libraries that can help us easily implement these functions.

In this article, we will mainly use Golang's image and draw packages to draw graphics and shapes on pictures. First, we need to install the Go development environment and import the image and draw packages. Now let's start writing code.

Code example:

package main

import (
    "image"
    "image/color"
    "image/draw"
    "image/png"
    "log"
    "os"
)

func main() {
    // 创建一个新的图片,并设置宽高
    width := 300
    height := 200
    img := image.NewRGBA(image.Rect(0, 0, width, height))

    // 设置绘制的颜色和形状
    red := color.RGBA{255, 0, 0, 255}    // 设置为红色
    blue := color.RGBA{0, 0, 255, 255}   // 设置为蓝色
    green := color.RGBA{0, 255, 0, 255}  // 设置为绿色
    yellow := color.RGBA{255, 255, 0, 255} // 设置为黄色

    // 在图片上绘制直线
    drawLine(img, 10, 10, width-10, height-10, red)

    // 在图片上绘制矩形
    drawRectangle(img, 20, 20, width-20, height-20, blue)

    // 在图片上绘制圆形
    drawCircle(img, width/2, height/2, 50, green)

    // 在图片上绘制椭圆形
    drawEllipse(img, width/2, height/2, 100, 50, yellow)

    // 将图片保存为PNG文件
    saveToPNG(img, "shapes.png")
}

// 在图片上绘制直线
func drawLine(img *image.RGBA, x1, y1, x2, y2 int, color color.RGBA) {
    drawLine := func(img *image.RGBA, x0, y0, x1, y1 int, color color.RGBA) {
        dx := abs(x1 - x0)
        dy := abs(y1 - y0)
        sx, sy := 0, 0

        if x0 < x1 {
            sx = 1
        } else {
            sx = -1
        }

        if y0 < y1 {
            sy = 1
        } else {
            sy = -1
        }

        err := dx - dy

        for {
            img.Set(x0, y0, color)

            if x0 == x1 && y0 == y1 {
                break
            }

            e2 := 2 * err

            if e2 > -dy {
                err -= dy
                x0 += sx
            }

            if e2 < dx {
                err += dx
                y0 += sy
            }
        }
    }

    drawLine(img, x1, y1, x2, y2, color)
}

// 在图片上绘制矩形
func drawRectangle(img *image.RGBA, x1, y1, x2, y2 int, color color.RGBA) {
    draw.Draw(img, image.Rect(x1, y1, x2, y2), &image.Uniform{color}, image.ZP, draw.Src)
}

// 在图片上绘制圆形
func drawCircle(img *image.RGBA, x, y, r int, color color.RGBA) {
    for px := -r; px <= r; px++ {
        for py := -r; py <= r; py++ {
            if px*px+py*py <= r*r {
                img.Set(x+px, y+py, color)
            }
        }
    }
}

// 在图片上绘制椭圆形
func drawEllipse(img *image.RGBA, x, y, rx, ry int, color color.RGBA) {
    for px := -rx; px <= rx; px++ {
        for py := -ry; py <= ry; py++ {
            if (px*px)/(rx*rx)+(py*py)/(ry*ry) <= 1 {
                img.Set(x+px, y+py, color)
            }
        }
    }
}

// 将图片保存为PNG文件
func saveToPNG(img image.Image, filename string) {
    f, err := os.Create(filename)
    if err != nil {
        log.Fatal(err)
    }
    defer f.Close()

    err = png.Encode(f, img)
    if err != nil {
        log.Fatal(err)
    }
}

// 辅助函数:获取值的绝对值
func abs(x int) int {
    if x < 0 {
        return -x
    }
    return x
}

Code analysis:
The above code defines a main function, which is mainly used to realize the drawing of graphics and shapes. First, we create a new RGBA image object img and set its width and height. Then, we defined some color constants and used these color constants to draw lines, rectangles, circles, and ovals.

The drawLine function uses the Bresenham algorithm to draw a straight line. It accepts the coordinate parameters and color parameters of two points, and then draws a straight line connecting the two points on the image.

The drawRectangle function uses the Draw function of the draw package to draw a rectangle. It accepts four coordinate parameters and a color parameter, and then draws a rectangle on the image.

The drawCircle function uses two for loops to draw a circle. It accepts a center coordinate parameter, radius parameter and color parameter, and then draws a circle on the image.

The drawEllipse function uses two for loops to draw an ellipse. It accepts a center coordinate parameter, two radius parameters and a color parameter, and then draws an ellipse on the image.

saveToPNG function is used to save the drawn image as a PNG file.

Finally, we call these functions to draw graphics and shapes, and save the drawn images as shapes.png files.

Summary:
This article introduces how to use Golang to draw graphics and shapes on pictures. We used Golang's image and draw packages to implement graphics and shape drawing, and demonstrated through sample code how to use these functions to draw lines, rectangles, circles, and ovals. By reading this article, we can better understand how to use Golang's image processing library to achieve the function of drawing graphics and shapes on pictures.

The above is the detailed content of How to draw graphics and shapes on pictures using Golang. 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