Home >Backend Development >Golang >How Can I Combine and Rotate Images in Go?

How Can I Combine and Rotate Images in Go?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-30 11:07:10976browse

How Can I Combine and Rotate Images in Go?

Image Manipulation with Rotations Using Go

Problem

Consider the following scenario:

  • A background image (bi)
  • Image1 (i1)
  • Image2 (i2)

The goal is to position i1 and i2 over bi at specific angles and create a final image. Coordinates for i1 and i2 are provided along with their rotation angles. i1 and i2 may overlap partially, but a z-index determines which image should appear in the foreground.

The task is to achieve this functionality in Golang.

Solution

The Go image package offers image manipulation capabilities, as described in "Image Drawing in Go" (http://golang.org/doc/articles/image_draw.html).

To combine images with rotations, an auxiliary package called graphics-go is recommended. Here's a sample Go program that demonstrates the combination of two images with rotations:

package main

import (
    "fmt"
    "os"
    "image/draw"
    "image"
    "image/jpeg"
    "code.google.com/p/graphics-go/graphics"
)

func main() {
    fImg1, _ := os.Open("arrow1.jpg")
    defer fImg1.Close()
    img1, _, _ := image.Decode(fImg1)

    fImg2, _ := os.Open("arrow2.jpg")
    defer fImg2.Close()
    img2, _, _ := image.Decode(fImg2)

    m := image.NewRGBA(image.Rect(0, 0, 800, 600))
    draw.Draw(m, m.Bounds(), img1, image.Point{0,0}, draw.Src)
    //draw.Draw(m, m.Bounds(), img2, image.Point{-200,-200}, draw.Src)
    graphics.Rotate(m, img2, &graphics.RotateOptions{3.5})

    toimg, _ := os.Create("new.jpg")
    defer toimg.Close()

    jpeg.Encode(toimg, m, &jpeg.Options{jpeg.DefaultQuality})
}

In this example:

  • Two images, "arrow1.jpg" and "arrow2.jpg", are loaded into memory.
  • A new RGBA image "m" is created with the desired output dimensions.
  • The first image, "img1," is drawn onto "m" at the origin.
  • The second image, "img2," is rotated and drawn onto "m" at a specific angle and offset.
    The resulting combined image is saved as "new.jpg."

It's important to note that the graphics-go package relies on external libraries that may require installation and setup. Refer to its documentation for details.

The above is the detailed content of How Can I Combine and Rotate Images in Go?. 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