العمل مع الصور في Kotlin: المكتبات والأدوات والأمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع الصور في Kotlin: نظرة عامة على المكتبات وأمثلة عملية



Kotlin هي لغة برمجة حديثة تعمل فوق JVM. بفضل التوافق الكامل مع Java، يمكن استخدام جميع مكتبات Java القياسية لمعالجة الصور، مثل javax.imageio و java.awt و javax.swing. في هذه المقالة، سنستعرض الطرق الأساسية للعمل مع الصور بلغة Kotlin: القراءة، الكتابة، تغيير الحجم، تطبيق الفلاتر، وتحويل التنسيقات.



المكتبات المطلوبة

للعمل مع الصور في Kotlin (JVM)، لا يلزم تثبيت تبعيات إضافية - فمكتبة JDK القياسية كافية. ومع ذلك، قد تكون هناك حاجة لمكتبات خارجية للمهام الأكثر تعقيدًا (مثل معالجة الصور الكبيرة أو العمل مع البيانات الوصفية):



  • java.awt.image.BufferedImage - الفئة الأساسية لتمثيل الصورة في الذاكرة.
  • javax.imageio.ImageIO - قراءة وكتابة الصور بتنسيقات مختلفة (PNG، JPEG، BMP، GIF).
  • java.awt.Graphics2D - الرسم والتحويلات.
  • Thumbnailator (اختياري) - يبسط تغيير الحجم وإنشاء الصور المصغرة.
  • BoofCV (اختياري) - مكتبة رؤية حاسوبية تدعم Kotlin.


قراءة وكتابة الصور

أسهل طريقة لتحميل صورة هي استخدام ImageIO.read().



import java.awt.image.BufferedImageimport java.io.Fileimport javax.imageio.ImageIO

fun main() { // قراءة الصورة val inputFile = File("input.jpg") val image: BufferedImage = ImageIO.read(inputFile) ?: throw Exception("فشل تحميل الصورة")

// الكتابة بتنسيق آخر val outputFile = File("output.png") ImageIO.write(image, "png", outputFile)

println("تم حفظ الصورة: ${outputFile.absolutePath}")}


تغيير حجم الصورة

لتغيير الحجم، نستخدم Graphics2D مع إعدادات التنعيم.



import java.awt.Graphics2Dimport java.awt.RenderingHintsimport java.awt.image.BufferedImageimport javax.imageio.ImageIOimport java.io.File

fun resizeImage(inputPath: String, outputPath: String, targetWidth: Int, targetHeight: Int) { val original: BufferedImage = ImageIO.read(File(inputPath)) val resized = BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB) val g2d: Graphics2D = resized.createGraphics()

// تفعيل التنعيم للحصول على تحجيم عالي الجودة g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR) g2d.drawImage(original, 0, 0, targetWidth, targetHeight, null) g2d.dispose()

ImageIO.write(resized, "jpg", File(outputPath)) println("تم تغيير حجم الصورة: $outputPath")}

fun main() { resizeImage("input.jpg", "resized.jpg", 800, 600)}


تطبيق الفلاتر (التمويه، التباين)

للتأثيرات البسيطة، يمكن استخدام BufferedImageOp (مثل ConvolveOp للتمويه).



import java.awt.image.BufferedImageimport java.awt.image.ConvolveOpimport java.awt.image.Kernelimport javax.imageio.ImageIOimport java.io.File

fun applyBlur(inputPath: String, outputPath: String) { val image: BufferedImage = ImageIO.read(File(inputPath))

// نواة تمويه 5x5 val size = 5 val weight = 1.0f / (size * size) val kernelData = FloatArray(size * size) { weight } val kernel = Kernel(size, size, kernelData) val blurOp = ConvolveOp(kernel)

val blurred = blurOp.filter(image, null) ImageIO.write(blurred, "jpg", File(outputPath))}

fun main() { applyBlur("input.jpg", "blurred.jpg")}


تحويل التنسيقات

تحويل بسيط

توصيات