Kotlin में इमेज प्रोसेसिंग: ImageMagick लाइब्रेरी के साथ resize और crop

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

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

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

Kotlin में इमेज के साथ काम करना: आकार बदलना और क्रॉप करना (resize & crop)

\n\n

आधुनिक वेब डेवलपमेंट और Kotlin पर मोबाइल ऐप बनाने में अक्सर प्रोग्रामेटिक रूप से इमेज प्रोसेस करने की आवश्यकता होती है: लोडिंग ऑप्टिमाइज़ करने के लिए आकार कम करना, अतिरिक्त किनारों को क्रॉप करना या प्रीव्यू तैयार करना। इस लेख में हम ग्राफिक्स के साथ काम करने के लिए एक शक्तिशाली टूल — ImageMagick लाइब्रेरी (Java रैपर JMagick के माध्यम से) देखेंगे, जो Kotlin पर resize और crop कार्यों के लिए एकदम सही है।

\n\n

ImageMagick और JMagick क्या हैं?

\n

ImageMagick एक क्रॉस-प्लेटफ़ॉर्म ओपन-सोर्स सॉफ़्टवेयर है जो रास्टर इमेज बनाने, संपादित करने और रूपांतरित करने के लिए है। यह 200 से अधिक फ़ॉर्मेट (JPEG, PNG, GIF, WebP, TIFF और अन्य) को सपोर्ट करता है। Java/Kotlin से ImageMagick के साथ काम करने के लिए JMagick लाइब्रेरी का उपयोग किया जाता है, जो ImageMagick फ़ंक्शन के लिए Java Native Interface (JNI) प्रदान करती है।

\n\n

Kotlin में ImageMagick का उपयोग करने के लाभ:

\n
    \n
  • उच्च प्रदर्शन (नेटिव C/C++ कोड)
  • \n
  • समृद्ध कार्यक्षमता: resize, crop, rotate, फ़िल्टर, फ़ॉर्मेट रूपांतरण
  • \n
  • बड़ी इमेज की स्ट्रीमिंग प्रोसेसिंग का समर्थन
  • संपीड़न के दौरान गुणवत्ता का सटीक नियंत्रण
\n\n

स्थापना और कनेक्शन

\n

JMagick के साथ काम करने के लिए आपको अपने सिस्टम पर नेटिव ImageMagick स्थापित करना होगा। फिर build.gradle.kts (Gradle के लिए) में डिपेंडेंसी जोड़ें:

\n\n
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)

\n

Resize ऑपरेशन इमेज के आकार को अनुपात बनाए रखते हुए (या बिना) बदलता है। im4java में यह ConvertCmd क्लास के माध्यम से किया जाता है।

\n\n

उदाहरण: इमेज को 300 पिक्सेल चौड़ाई तक कम करें, अनुपात बनाए रखते हुए:

\n\n
import 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\n

Resize पैरामीटर:

\n
    \n
  • resize(width, height) — यदि एक पैरामीटर null है, तो अनुपात बनाए रखा जाता है
  • \n
  • resize(width, height, "^") — क्षेत्र का न्यूनतम भराव
  • \n
  • resize(width, height, "!") — अनुपात बनाए रखे बिना जबरन आकार बदलना
  • \n
\n\n

इमेज क्रॉप करना (Crop)

\n

Crop इमेज से एक आयताकार क्षेत्र काटता है। ऊपरी बाएँ कोने के निर्देशांक और क्षेत्र के आकार निर्दिष्ट किए जाते हैं।

\n\n

उदाहरण: 200x200 पिक्सेल आकार का केंद्रीय वर्ग काटें:

\n\n
import 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
                
    
    

अनुशंसाएँ