我想从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/