我想从localdisk打开一个jpeg文件,并在Go中在其上绘制一个填充的矩形框,如果我给出两个像素点值,如pt1(0,0)和pt2(480,240)

最佳答案

看看here。您需要从JPEG解码图像,将矩形中的像素设置为黑色,然后重新编码为JPEG。

这是一个代码示例,如果映像与可执行文件位于同一文件夹中,并且您提供类似myimg.jpg的路径,则它可以工作:

package main

import (
    "fmt"
    "image"
    "image/color"
    "image/jpeg"
    "log"
    "os"
)

func main() {
    err := addBlackRectangle("myimg.jpg", 500, 500, 1000, 1000)
    if err != nil {
        log.Fatal(err)
    }
}

func addBlackRectangle(imgPath string, x1, y1, x2, y2 int) (err error) {
    r, err := os.Open(imgPath)
    if err != nil {
        return
    }
    img, err := jpeg.Decode(r)
    if err != nil {
        return
    }

    rect1 := img.Bounds()
    rect2 := image.Rect(x1, y1, x2, y2)

    if !rect2.In(rect1) {
        err = fmt.Errorf("error: rectangle outside image")
        return
    }

    rgba := image.NewRGBA(rect1)
    for x := rect1.Min.X; x <= rect1.Max.X; x++ {
        for y := rect1.Min.Y; y <= rect1.Max.Y; y++ {
            p := image.Pt(x, y)
            if p.In(rect2) {
                rgba.Set(x, y, color.Black)
            } else {
                rgba.Set(x, y, img.At(x, y))
            }
        }
    }

    outputFile := "rect-" + imgPath
    w, err := os.Create(outputFile)
    defer w.Close()

    err = jpeg.Encode(w, rgba, nil)
    return
}

关于go - 如果给定两个像素值,例如:-pt1(0,0)和pt2(480,240),如何在jpeg上绘制填充的矩形框?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58333730/

10-15 20:38