Kotlin में इमेज के साथ काम करना: आकार बदलना और क्रॉप करना (resize & crop)
\n\nआधुनिक वेब डेवलपमेंट और Kotlin पर मोबाइल ऐप बनाने में अक्सर प्रोग्रामेटिक रूप से इमेज प्रोसेस करने की आवश्यकता होती है: लोडिंग ऑप्टिमाइज़ करने के लिए आकार कम करना, अतिरिक्त किनारों को क्रॉप करना या प्रीव्यू तैयार करना। इस लेख में हम ग्राफिक्स के साथ काम करने के लिए एक शक्तिशाली टूल — ImageMagick लाइब्रेरी (Java रैपर JMagick के माध्यम से) देखेंगे, जो Kotlin पर resize और crop कार्यों के लिए एकदम सही है।
\n\nImageMagick और JMagick क्या हैं?
\nImageMagick एक क्रॉस-प्लेटफ़ॉर्म ओपन-सोर्स सॉफ़्टवेयर है जो रास्टर इमेज बनाने, संपादित करने और रूपांतरित करने के लिए है। यह 200 से अधिक फ़ॉर्मेट (JPEG, PNG, GIF, WebP, TIFF और अन्य) को सपोर्ट करता है। Java/Kotlin से ImageMagick के साथ काम करने के लिए JMagick लाइब्रेरी का उपयोग किया जाता है, जो ImageMagick फ़ंक्शन के लिए Java Native Interface (JNI) प्रदान करती है।
\n\nKotlin में ImageMagick का उपयोग करने के लाभ:
\n- \n
- उच्च प्रदर्शन (नेटिव C/C++ कोड) \n
- समृद्ध कार्यक्षमता: resize, crop, rotate, फ़िल्टर, फ़ॉर्मेट रूपांतरण \n
- बड़ी इमेज की स्ट्रीमिंग प्रोसेसिंग का समर्थन
- संपीड़न के दौरान गुणवत्ता का सटीक नियंत्रण
स्थापना और कनेक्शन
\nJMagick के साथ काम करने के लिए आपको अपने सिस्टम पर नेटिव ImageMagick स्थापित करना होगा। फिर build.gradle.kts (Gradle के लिए) में डिपेंडेंसी जोड़ें:
dependencies {\n implementation("org.im4java:im4java:1.4.0") // वैकल्पिक रैपर\n // या JMagick का उपयोग करें:\n implementation("org.jmagick:jmagick:6.6.9")\n}\n\nनोट: JMagick को ImageMagick संस्करण 6.x (7 नहीं) स्थापित करने की आवश्यकता है। सरलता के लिए, उदाहरणों में हम im4java का उपयोग करेंगे — एक अधिक आधुनिक रैपर जिसे JNI की आवश्यकता नहीं है।
\n\nइमेज का आकार बदलना (Resize)
\nResize ऑपरेशन इमेज के आकार को अनुपात बनाए रखते हुए (या बिना) बदलता है। im4java में यह ConvertCmd क्लास के माध्यम से किया जाता है।
उदाहरण: इमेज को 300 पिक्सेल चौड़ाई तक कम करें, अनुपात बनाए रखते हुए:
\n\nimport org.im4java.core.ConvertCmd\nimport org.im4java.core.IMOperation\n\nfun resizeImage(inputPath: String, outputPath: String, targetWidth: Int) {\n val cmd = ConvertCmd()\n val op = IMOperation()\n\n op.addImage(inputPath)\n op.resize(targetWidth, null) // null = अनुपात के अनुसार ऑटो-ऊंचाई\n op.addImage(outputPath)\n\n cmd.run(op)\n}\n\nfun main() {\n resizeImage("input.jpg", "output_resized.jpg", 300)\n println("इमेज 300px चौड़ाई तक कम की गई")\n}\n\nResize पैरामीटर:
\n- \n
resize(width, height)— यदि एक पैरामीटर null है, तो अनुपात बनाए रखा जाता है \n resize(width, height, "^")— क्षेत्र का न्यूनतम भराव \n resize(width, height, "!")— अनुपात बनाए रखे बिना जबरन आकार बदलना \n
इमेज क्रॉप करना (Crop)
\nCrop इमेज से एक आयताकार क्षेत्र काटता है। ऊपरी बाएँ कोने के निर्देशांक और क्षेत्र के आकार निर्दिष्ट किए जाते हैं।
\n\nउदाहरण: 200x200 पिक्सेल आकार का केंद्रीय वर्ग काटें:
\n\nimport org.im4java.core.ConvertCmd\nimport org.im4java.core.IMOperation\n\nfun cropImage(inputPath: String, outputPath: String, \n x: Int, y: Int, width: Int, height: Int) {\n val cmd = ConvertCmd()\n val op = IMOperation()\n\n op.addImage(inputPath)\n op.crop(width, height, x, y)\n op.addImage(outputPath)\n\n cmd.run(op)\n}\n\nfun main() {\n // क्षेत्र काटें: ऊपरी बाएँ कोना (100,50), आकार 400x300\n cropImage("input.jpg", "output_cropped.jpg", 100, 50, 400, 300)\n println("इमेज क्रॉप की गई")\n}\n\nस्वचालित केंद्रीकरण के लिए निर्देशांक की गणना की जा सकती है:
\n\n
पुस्तकालय में भी
अनुशंसाएँ