Go (Golang) में इमेज प्रोसेसिंग: image, draw, imaging, resize

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Go (Golang) में इमेज प्रोसेसिंग: बुनियादी से लेकर उन्नत टूल्स तक

Go (Golang) रास्टर ग्राफिक्स के साथ काम करने के लिए शक्तिशाली बिल्ट-इन टूल्स और थर्ड-पार्टी लाइब्रेरीज़ का एक समृद्ध इकोसिस्टम प्रदान करता है। इस लेख में हम स्टैंडर्ड पैकेज image, image/color, image/draw और image/png के साथ-साथ लोकप्रिय लाइब्रेरीज़ imaging, resize और gg का उपयोग करके सामान्य कार्यों को हल करेंगे: इमेज लोड करना, साइज़ बदलना, ओवरले करना, ड्रॉ करना और सेव करना।

Go के स्टैंडर्ड इमेज पैकेज

Go की स्टैंडर्ड लाइब्रेरी में इमेज प्रोसेसिंग के लिए बुनियादी टाइप और फंक्शन शामिल हैं, जो 80% रोज़मर्रा की ज़रूरतों को पूरा करते हैं।

  • image — Image इंटरफ़ेस और विशिष्ट टाइप्स को परिभाषित करता है: RGBA, NRGBA, Gray, Paletted आदि।
  • image/color — रंगों और कलर मॉडल्स (Color, RGBA, NRGBA, Gray) का वर्णन करता है।
  • image/draw — इमेज ड्रॉ करने और ओवरले करने के एल्गोरिदम (Porter-Duff compositing) प्रदान करता है।
  • image/png, image/jpeg, image/gif — संबंधित फॉर्मेट को पढ़ने/लिखने के लिए कोडेक।

उदाहरण 1: ग्रेडिएंट के साथ PNG बनाना और सेव करना

package main

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

func main() {
    // 200x200 का नया RGBA इमेज बनाएँ
    width, height := 200, 200
    img := image.NewRGBA(image.Rect(0, 0, width, height))

    // पिक्सल को लाल से नीले ग्रेडिएंट से भरें
    for y := 0; y < height; y++ {
        for x := 0; x < width; x++ {
            // 0 से 1 तक का अनुपात
            ratio := float64(x) / float64(width)
            r := uint8(255 * (1 - ratio))
            b := uint8(255 * ratio)
            g := uint8(128)
            img.Set(x, y, color.RGBA{r, g, b, 255})
        }
    }

    // फ़ाइल में सेव करें
    f, _ := os.Create("gradient.png")
    defer f.Close()
    png.Encode(f, img)
}

उदाहरण 2: JPEG लोड करना और image/draw के साथ टेक्स्ट ओवरले करना

package main

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

func main() {
    // सोर्स इमेज खोलें
    srcFile, _ := os.Open("input.jpg")
    defer srcFile.Close()
    src, _, _ := image.Decode(srcFile)

    // ड्रॉ करने के लिए RGBA में कॉपी बनाएँ
    bounds := src.Bounds()
    dst := image.NewRGBA(bounds)
    draw.Draw(dst, bounds, src, bounds.Min, draw.Src)

    // ऊपरी बाएँ कोने में लाल आयत बनाएँ
    redRect := image.NewUniform(color.RGBA{255, 0, 0, 200})
    rect := image.Rect(10, 10, 150, 80)
    draw.Draw(dst, rect, redRect, image.Point{}, draw.Over)

    // परिणाम सेव करें
    outFile, _ := os.Create("output.png")
    defer outFile.Close()
    png.Encode(outFile, dst)
}

imaging लाइब्रेरी: हाई-लेवल प्रोसेसिंग

imaging (github.com/disintegration/imaging) एक लोकप्रिय लाइब्रेरी है जो सामान्य ऑपरेशनों के लिए एक आसान API प्रदान करती है: साइज़ बदलना, क्रॉप करना, घुमाना, फ़िल्टर लगाना और कन्वर्ट करना।

  • imaging.Open() — फ़ाइल से इमेज लोड करना।
  • imaging.Resize() — अनुपात बनाए रखते हुए साइज़ बदलना।
  • imaging.Fit() — दिए गए आयत में फ़िट करना।
  • imaging.Fill() — सटीक साइज़ में क्रॉप और स्केल करना।
  • imaging.Rotate() — निश्चित कोण पर घुमाना।
  • imaging.Blur(), imaging.Sharpen() — फ़िल्टर।

उदाहरण 3: imaging के साथ साइज़ बदलना

package main

import (
    "github.com/disintegration/imaging"
    "log                    

अनुशंसाएँ