Go पर छवियों के साथ कार्य का परिचय
Go (Golang) एक आधुनिक कंपाइल की जाने वाली भाषा है जिसमें एक समृद्ध मानक लाइब्रेरी है, जिसमें रास्टर छवियों के साथ बुनियादी कार्य के लिए image पैकेज शामिल है। हालाँकि, स्केलिंग, फ़िल्टरिंग, फ़ॉर्मेट रूपांतरण और बैच प्रसंस्करण के कार्यों के लिए अक्सर तृतीय-पक्ष लाइब्रेरी की आवश्यकता होती है। इस लेख में, हम Go में छवियों के साथ कार्य करने के लिए सबसे लोकप्रिय टूल पर विचार करेंगे, कोड उदाहरण देंगे और उनकी क्षमताओं की तुलना करेंगे।
मानक image पैकेज
Go की मानक लाइब्रेरी से image पैकेज छवियों को डिकोड, एनकोड और हेरफेर करने के लिए बुनियादी प्रकार और फ़ंक्शन प्रदान करता है। यह PNG, JPEG और GIF (केवल डिकोडिंग) फ़ॉर्मेट का समर्थन करता है। फ़ाइल से छवि लोड करने का उदाहरण:
package main
import ( "image" "image/jpeg" "os")
func main() { file, err := os.Open("input.jpg") if err != nil { panic(err) } defer file.Close()
img, _, err := image.Decode(file) if err != nil { panic(err) }
// img.At(x, y) के माध्यम से पिक्सेल तक पहुँच _ = img}मानक पैकेज की सीमाएँ: आकार बदलने, घुमाने, फ़िल्टर करने और EXIF डेटा के साथ कार्य करने के लिए अंतर्निहित फ़ंक्शन का अभाव। इन कार्यों के लिए तृतीय-पक्ष लाइब्रेरी का उपयोग करें।
imaging लाइब्रेरी
imaging Go पर छवि प्रसंस्करण के लिए सबसे लोकप्रिय लाइब्रेरी में से एक है। यह आकार बदलने, क्रॉप करने, घुमाने, फ़िल्टर लगाने और फ़ॉर्मेट रूपांतरण के लिए एक सरल API प्रदान करता है।
स्थापना:
go get github.com/disintegration/imagingअनुपात बनाए रखते हुए आकार बदलने का उदाहरण:
package main
import ( "github.com/disintegration/imaging" "log")
func main() { src, err := imaging.Open("input.jpg") if err != nil { log.Fatalf("खोलने में त्रुटि: %v", err) }
// चौड़ाई 800px तक आकार बदलना, ऊँचाई समायोजित होती है dst := imaging.Resize(src, 800, 0, imaging.Lanczos)
err = imaging.Save(dst, "output.jpg") if err != nil { log.Fatalf("सहेजने में त्रुटि: %v", err) }}लाइब्रेरी फ़िल्टर का समर्थन करती है: धुंधलापन, तीक्ष्णता, कंट्रास्ट, चमक, ग्रेस्केल। फ़िल्टर लगाने का उदाहरण:
grayscaleImg := imaging.Grayscale(src)sharpImg := imaging.Sharpen(src, 0.5)blurImg := imaging.Blur(src, 3.0)लाभ: स्वच्छ API, GIF समर्थन (केवल पढ़ने के लिए), EXIF द्वारा स्वचालित ओरिएंटेशन, थंबनेल और बैच प्रसंस्करण के लिए अंतर्निहित फ़ंक्शन।
nfnt/resize लाइब्रेरी
nfnt/resize छवियों का आकार बदलने के लिए एक विशेष लाइब्रेरी है। यह कई इंटरपोलेशन एल्गोरिदम (NearestNeighbor, Bilinear, Bicubic, MitchellNetravali, Lanczos2, Lanczos3) प्रदान करती है।
स्थापना:
go get github.com/nfnt/resizeसटीक 200x200 पिक्सेल में आकार बदलने का उदाहरण:
package main
import ( "image/jpeg" "os" "github.com/nfnt/resize")
func main() { file, _ := os.Open("input.jpg") defer file.Close() img, _ := jpeg.Decode(file)
// 200x200 में आकार बदलना newImg := resize.Resize(200, 200, img, resize.Lanczos3)
out, _ := os.Create("resized.jpg") defer out.Close() jpeg.Encode(out, newImg, nil)}विशेषताएँ: लाइब्रेरी केवल उन छवियों के साथ काम करती है जो image.Image इंटरफ़ेस को लागू करती हैं। यह सीधे फ़ाइलों को पढ़ने/लिखने का समर्थन नहीं करती है - मैन्युअल डिकोडिंग/एनकोडिंग की आवश्यकता होती है।