Go (Golang) में छवियों के साथ कार्य: लाइब्रेरीज़ और उदाहरण

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

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

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

Go (Golang) में छवियों के साथ कार्य: लाइब्रेरीज़ का अवलोकन और व्यावहारिक उदाहरण



Go (Golang) एक कंपाइल्ड, स्टैटिकली टाइप की गई भाषा है जो वेब डेवलपमेंट, माइक्रोसर्विसेज़ और डेटा प्रोसेसिंग से संबंधित कार्यों में लोकप्रियता प्राप्त कर रही है। Python के विपरीत, जहाँ छवियों के साथ काम करने के लिए पारंपरिक रूप से OpenCV या Pillow का उपयोग किया जाता है, Go में कई हल्की और तेज़ लाइब्रेरीज़ हैं जो रास्टर ग्राफिक्स के साथ बुनियादी संचालन करने की अनुमति देती हैं: आकार बदलना, क्रॉप करना, घुमाना, फ़िल्टर लगाना और ड्राइंग करना।



इस लेख में, हम Go पर छवियों के साथ काम करने के लिए तीन सबसे लोकप्रिय लाइब्रेरीज़ पर विचार करेंगे: imaging, nfnt/resize और gg। आप सीखेंगे कि उन्हें कैसे स्थापित करें, और सामान्य कार्यों के लिए कोड उदाहरण देखेंगे।



1. imaging लाइब्रेरी



imaging छवि प्रसंस्करण के लिए एक सरल लेकिन शक्तिशाली लाइब्रेरी है। यह आकार बदलने, क्रॉप करने, घुमाने, फ़िल्टर लगाने (ब्लर, शार्पनेस, कलर इनवर्ज़न) और विभिन्न फ़ॉर्मेट (JPEG, PNG, GIF, BMP) में सेव करने के लिए सुविधाजनक फ़ंक्शन प्रदान करती है।



स्थापना

go get -u github.com/disintegration/imaging


उदाहरण: आकार बदलना और क्रॉप करना

package main

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

func main() { // छवि खोलें src, err := imaging.Open("input.jpg") if err != nil { log.Fatalf("फ़ाइल खोलने में त्रुटि: %v", err) }

// अनुपात बनाए रखते हुए आकार 800x600 करें dst := imaging.Resize(src, 800, 600, imaging.Lanczos) // केंद्रीय क्षेत्र 400x400 क्रॉप करें dst = imaging.CropCenter(dst, 400, 400)

// ब्लर फ़िल्टर लगाएँ dst = imaging.Blur(dst, 3.0)

// परिणाम सहेजें err = imaging.Save(dst, "output.jpg") if err != nil { log.Fatalf("सहेजने में त्रुटि: %v", err) } fmt.Println("छवि संसाधित हुई और output.jpg के रूप में सहेजी गई")}


लाइब्रेरी कई फ़िल्टर का समर्थन करती है: imaging.Grayscale, imaging.Invert, imaging.Contrast, imaging.Sharpen और अन्य। ये सभी 'बॉक्स से बाहर' काम करते हैं।



2. nfnt/resize लाइब्रेरी



यदि आपका कार्य केवल अधिकतम प्रदर्शन के साथ छवियों का आकार बदलना है, तो nfnt/resize सबसे अच्छा विकल्प है। यह उच्च गति प्रसंस्करण के लिए अनुकूलित है और विभिन्न इंटरपोलेशन एल्गोरिदम (NearestNeighbor, Bilinear, Bicubic, Lanczos2, Lanczos3) का समर्थन करता है।



स्थापना

go get -u github.com/nfnt/resize


उदाहरण: विभिन्न एल्गोरिदम के साथ आकार बदलना

package main

import ( "image" "image/jpeg" "log" "os" "github.com/nfnt/resize")

func main() { file, err := os.Open("input.jpg") if err != nil { log.Fatal(err) } defer file.Close()

img, _, err := image.Decode(file) if err != nil { log.Fatal(err) }

// चौड़ाई 300 पिक्सेल तक आकार बदलें, ऊँचाई स्वचालित रूप से गणना की जाती है m := resize.Resize(300, 0, img, resize.Lanczos3)

out, err := os.Create("resized.jpg") if err != nil { log.Fatal(err) } defer out.Close()

// JPEG गुणवत्ता 90% के साथ सहेजें err = jpeg.Encode(out, m, &jpeg.Options{Quality: 90}) if err != nil { log.Fatal(err) } log.Println("छवि की चौड़ाई घटाकर 300px कर दी गई")}


यह लाइब्रेरी क्रॉपिंग या फ़िल्टर के लिए फ़ंक्शन प्रदान नहीं करती है, लेकिन इसकी गति और न्यूनतमता इसे सर्वरों के लिए आदर्श बनाती है जहाँ प्रति सेकंड हजारों छवियों को संसाधित करने की आवश्यकता होती है।



3. gg लाइब्रेरी (ड्राइंग)



gg 2D ग्राफिक्स ड्राइंग के लिए एक लाइब्रेरी है, जो cairo या Pillow Draw के समान है। यह छवियाँ बनाने की अनुमति देती है

अनुशंसाएँ