登录
首页 >  Golang >  Go问答

在JPEG图片上绘制填充矩形框:给定两个像素坐标值,即pt1(0,0)和pt2(480,240),如何实现?

来源:stackoverflow

时间:2024-03-04 15:36:20 449浏览 收藏

你在学习Golang相关的知识吗?本文《在JPEG图片上绘制填充矩形框:给定两个像素坐标值,即pt1(0,0)和pt2(480,240),如何实现?》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

我想从本地磁盘打开一个 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
}

今天关于《在JPEG图片上绘制填充矩形框:给定两个像素坐标值,即pt1(0,0)和pt2(480,240),如何实现?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>