تغيير قيم المستوى في صورة باستخدام سكربت بايثون
في عالم التصميم والفن الرقمي، تتطلب العديد من المشاريع تحويلات دقيقة للصور، ويأتي هنا أهمية استخدام برمجة بايثون لتحقيق نتائج دقيقة وسريعة. إن تغيير قيم المستويات لصورة معينة أصبح أمرًا ممكنًا وسهلاً عبر استخدام سكريبت بايثون. يتمكن الفنانون ومصممو الجرافيك الآن من أتمتة العمليات المعقدة وتحسين سير العمل بشكل ملحوظ.
لماذا نحتاج لتغيير قيم المستويات؟
تستخدم تقنية تغيير قيم المستويات لضبط تباين الألوان وإخراج تفاصيل الصورة بشكل أفضل. فمثلاً، في السياق الفني، قد يساعد تغيير قيم القناة ألفا إلى نطاق محدد في تحسين مظهر الرسومات وإعطاء تأثيرات متميزة. لكن كيف نحقق ذلك باستخدام بايثون؟
استخدام بايثون لتعديل قيم المستويات
تتعامل الشيفرة التالية مع صورة بصيغة TIFF وتقوم بتعديل قناة الألفا وفقاً لمتطلبات معينة. أولاً، يجب أن يتم استيراد المكتبتين اللازمتين، التي تتيح لك العمل مع الصور، وهما نظام التشغيل وPIL (مكتبة معالجة الصور). بعد ذلك، نقوم بتحديد مجلد الإدخال والإخراج حيث سنقوم بتحميل الصور المعدلة وتحفظها.
import os
from PIL import Image
# تحديد مجلدات الإدخال والإخراج
input_folder = r"C:\Users\CmdNomad\Desktop\Import\MWimport\!input"
output_folder = r"C:\Users\CmdNomad\Desktop\Import\MWimport\!output"
الحكومة لإجراء التعديلات تحتاج لكتابة دالة لضبط قيم مستوى القناة ألفا.
def adjust_alpha_levels(alpha_channel, in_black, in_mid, in_white, out_black, out_mid, out_white):
"""
تعديل مستويات صورة (قناة ألفا في هذه الحالة).
تعمل على تحويل قيم البكسل من (in_black, in_mid, in_white) إلى (out_black, out_mid, out_white).
"""
lut = []
for pixel in range(256):
if pixel <= in_mid:
lut.append(int(out_black + (pixel - in_black) * (out_mid - out_black) / (in_mid - in_black)))
else:
lut.append(int(out_mid + (pixel - in_mid) * (out_white - out_mid) / (in_white - in_mid)))
return alpha_channel.point(lut)
في هذه الدالة، نستخدم جدول البحث (LUT) لتحديد قيم النقط المتعلقة بكل بكسل في القناة. هذا يسمح لنا بتخصيص النتيجة بدقة وتلبية احتياجات حجم الصورة المطلوبة.
تطبيق العملية على المجاميع المعقدة
من خلال الدالة التالية، نستطيع استخراج القنوات المختلفة من الصورة، ثم تعديل القناة ألفا وحفظها كصورة جديدة:
def extract_and_process_channels(input_folder, output_folder):
# التأكد من وجود مجلد الإخراج
os.makedirs(output_folder, exist_ok=True)
# اختر الملفات من مجلد الإدخال
for file_name in os.listdir(input_folder):
if file_name.endswith("MGC.tif"):
input_path = os.path.join(input_folder, file_name)
try:
with Image.open(input_path) as img:
img = img.convert("RGBA")
alpha_channel = img.getchannel("A") if "A" in img.getbands() else None
base_name = os.path.splitext(file_name)[0]
ao_output_path = os.path.join(output_folder, f"{base_name}_AO.png")
if alpha_channel:
adjust_alpha = adjust_alpha_levels(alpha_channel, 0, 1, 255, 40, 1, 255)
adjust_alpha.save(ao_output_path)
except Exception as e:
print(f"خطأ في معالجة {file_name}: {e}")
هذا الكود يقوم بفتح صورة بصيغة TIFF، وفصل القنوات المكونة لها. ثم يتم تعديل القناة ألفا باستخدام الدالة السابقة بحيث تصبح تحمل المستوى المطلوب.
ختاماً
إن عملية تغيير قيم المستويات لصورة باستخدام سكريبت بايثون يمكن أن تجعل العمل الفني أكثر دقة واحترافية. إن هذه العملية تساعد الفنانين على تسريع وتحسين سير عملهم، مما يتيح لهم التركيز على الإبداع بدلاً من المهام الروتينية. إن استخدام بايثون في التصميم والتعديل يمكن أن يكون له تأثير كبير على جودة الصورة النهائية ووقت الإنجاز.
باختصار، أصبح بإمكان الفنانين اليوم استخدام التكنولوجيا المتاحة لتبسيط العمليات المعقدة، فقط من خلال كتابة بضع أسطر من الشيفرة التي تساعدهم في تحقيق نتائج دقيقة وسريعة.