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 के समान है। यह छवियाँ बनाने की अनुमति देती है
पुस्तकालय में भी
Swift (iOS/macOS) के लिए gRPC: लाइब्रेरीज़, सेटअप और कोड उदाहरण
C# (.NET) में Rate Limiting: System.Threading.RateLimiting लाइब्रेरी गाइड
TypeScript के लिए ts-mockito: पूर्ण गाइड उदाहरण सहित
OpenAI SDK JavaScript (Node.js): पूर्ण गाइड उदाहरणों के साथ