العمل مع الصور في Kotlin: نظرة عامة على المكتبات وأمثلة عملية
Kotlin، كونه لغة برمجة حديثة متوافقة تمامًا مع Java، يوفر للمطورين إمكانية الوصول إلى النظام البيئي الكامل للمكتبات للعمل مع الصور. في هذه المقالة، سنستعرض الأدوات الرئيسية المتاحة في Kotlin لتحميل الصور ومعالجتها وتحويلها وحفظها. ستتعلم كيفية استخدام الإمكانيات القياسية لـ Java (AWT, Swing) والمكتبات المتخصصة لحل المهام النموذجية.
الأدوات القياسية Java AWT و Swing
الوظائف الأساسية للعمل مع الصور في Kotlin (كما في Java) توفرها الحزم java.awt و javax.imageio. الفئات الرئيسية:
java.awt.image.BufferedImage— يمثل صورة نقطية مع إمكانية الوصول إلى البكسلات.java.awt.Graphics2D— يوفر طرقًا للرسم (خطوط، أشكال، نصوص) على الصورة.javax.imageio.ImageIO— طرق ثابتة لقراءة وكتابة الصور بتنسيقات مختلفة (PNG, JPEG, BMP, GIF).java.awt.Color— العمل مع الألوان.java.awt.image.RescaleOp,java.awt.image.ConvolveOp— مرشحات لتغيير السطوع والتباين والتشويش.
مثال 1: تحميل الصورة وتغيير حجمها وحفظها
import java.awt.image.BufferedImageimport java.awt.Graphics2Dimport java.awt.RenderingHintsimport java.io.Fileimport javax.imageio.ImageIO
fun resizeImage(inputPath: String, outputPath: String, targetWidth: Int, targetHeight: Int) { // تحميل الصورة الأصلية val originalImage: BufferedImage = ImageIO.read(File(inputPath))
// إنشاء صورة جديدة بالحجم المطلوب val resizedImage = BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB) val graphics: Graphics2D = resizedImage.createGraphics()
// ضبط جودة إعادة التشكيل graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR) graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY) graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)
// رسم الصورة المقاسة graphics.drawImage(originalImage, 0, 0, targetWidth, targetHeight, null) graphics.dispose()
// حفظ النتيجة ImageIO.write(resizedImage, "jpg", File(outputPath)) println("تم حفظ الصورة: $outputPath")}
// مثال على الاستدعاءfun main() { resizeImage("input.jpg", "output_resized.jpg", 800, 600)}مكتبة Thumbnailator
Thumbnailator هي مكتبة شائعة لـ Java/Kotlin تبسط بشكل كبير إنشاء الصور المصغرة وتغيير أحجام الصور. ميزتها الرئيسية هي واجهة fluent API البسيطة.
الإضافة (Gradle):
implementation("net.coobird:thumbnailator:0.4.20")مثال 2: إنشاء صورة مصغرة باستخدام Thumbnailator
import net.coobird.thumbnailator.Thumbnailsimport java.io.File
fun createThumbnail(inputPath: String, outputPath: String, size: Int) { Thumbnails.of(File(inputPath)) .size(size, size) // صورة مصغرة مربعة .keepAspectRatio(true) // الحفاظ على النسب .outputFormat("png") .toFile(File(outputPath)) println("تم إنشاء الصورة المصغرة: $outputPath")}
fun main() { createThumbnail("photo.jpg", "thumb.png", 150)}تدعم المكتبة أيضًا الاقتصاص والتدوير وإضافة العلامات المائية والعمل مع التدفقات.
مكتبة OpenCV لـ Kotlin
لمعالجة الصور الحاسوبية المتقدمة (التعرف على الوجوه، التصفية، تحليل الحواف) يتم استخدام