الإجراءات أو Actions في برنامج الفوتوشوب احد المميزات التي توفر الكثير من الوقت على المصممين وهي عبارة عن تسجيل لعمليات او مهام مكررة تقوم بها، وتستخدم هذا التسجيل لإستخدامه لاحقا مع تصاميم أخرى أو جزء معين في التصميم دون عمل نفس المهام مرة أخرى، الإجراءات Actions معروفة لكل من يستخدم الفوتوشوب وهذا الموضوع ليس شرح لكيفية إستخدمها! لأنها بسيطة وسهلة وتوجد الكثير من الدروس حول كيفية إستخدامها، ولكن هناك حاجة لإستخدام الكود البرمجي في عمل الإجراءات Actions، فإستخدام الإجراءات بتسجيل عدة مهام تقوم بها في الفوتوشوب ليس كافياً ومحدود من ناحية التحكم.

هذا الموضوع يعرض طريقة إستخدام لغة Javascript في عمل أوامر أو مجموعة من المهام يتم تطبيقها كإجراءات Actions، مع مثال عملي لتوضيح فائدة إستخدام هذه الطريقة (هناك لغات برمجية أخرى يمكن إستخدامها مثل AppleScript و VBScript ولكني إخترت Javascript لشهرتها ومتعة العمل فيها).

الحاجة لإستخدام البرمجة لعمل إجراءات الفوتوشوب Photoshop Actions

ما جعلني أستخدم هذه الطريقة أنني كنت أريد تصغير عدة صور مفتوحة مسبقاً وتصغيرها إلى نصف حجمها وإعادة حفظها مرة أخرى بإسم آخر أو بنفس الإسم مع إضافة حروف إلى آخر الإسم.

و كمثال على ذلك، لديك صور كبيرة الحجم وهي تمثل صور ذو دقة عالية HD وتريد تصغير جميع الصور ذو الدقة العالية إلى نصف مقاسها وتكون بمقياس أصغر مع العلم أن كل صورة مختلفة المقاس .. ماذا ستفعل؟ يمكن إستخدام Actions بتسجيل التصغير ولكن سوف تكتب رقم معين بعد حساب نصف قيمة العرض Width والإرتفاع Height، ويعني ذلك لا تستطيع تصغير جميع الصور بنفس الرقم الذي إستخدمته مع الصورة السابقة. هنا ستستخدم البرمجة في عمل إجراءات صحيحة ودقيقة.

أساسيات إستخدام البرمجة في برنامج الفوتوشوب

بإستخدام هذه الطرق Method والخصائص Properties الخاصة ببرنامج فوتوشوب يمكنك تطبيق أمر أو عدة أوامر في برنامج الفوتوشوب مثل إنشاء ملف جديد، تحديد الملف المفتوح حالياً، وحفظ الملف، وتحديد صيغته والتحكم بعدة إختيارات، والتحكم بالطبقات، وإستخدام الأرقام لعمل نتيجة حسابية وغير ذلك.

يوفر موقع Adobe وثائق مفصلة عن كيفية البرمجة في الفوتوشوب أو Adobe Photoshop Scripting ولكن يشرحها في ملفات PDF مفصلة ويمكن إيجاد ملف الوقائق في جهازك إذا كنت تملك برنامج الفوتوشوب CS النسخة 3 وما فوق (إمتداد الماك: Applications> Photoshop CSx> Presets> Scripts | إمتداد الويندوز: \C:\Program Files\Adobe\Photoshop CSx\Presets\Scripts).

إلا أن الوثائق غير منظمة (وثائق الإصدار الأخير والسابق أفضل مما كان عليه من قبل) بمعنى أنك لا تستطيع الوصول بسهولة للاوامر أو الدوال الخاصة بعمل الإجراءات المبرمجة بلغة Javascript (ليست مبسطة مثل وثائق jQuery على سبيل المثال) .. لهذا فضلت طرح أهم الدوال والطرق الموجودة في ملف PDF وطرحه هنا (بعض منها وليس كلها) وسوف أستخدمها في المثال القادم، إضافةً إلى أن الخصائص والطرق مقسمة حسب الشيء الذي تريد التحكم فيه في برنامج الفوتوشوب.

التطبيق Application

خصائص وطرق تتعلق بمهام برنامج الفوتوشوب الأساسية مثل فتح الملفات وتحميل أجزاء الملف مثل الطبقات والنصوص وغيرها، بعض من هذه الخصائص:

  • activeDocument: تحديد ملف الذي يتم العمل فيه الآن (الصورة أو التصميم الذي تعالجه في برنامج الفوتوشوب مع وجود تصاميم أخرى مهملة)
  • backgroundColor: لون خلفية الملف الإفتراضي
  • documents: الملفات المفتوحة في الفوتوشوب
  • name: إسم الملف
  • foregroundColor: لون المقدمة في قائمة الألوان في القائمة الجانبية للبرنامج
  • path: مسار الملف على الجهاز
  • windowsFileTypes: صيغ الملفات التي يمكن فتحها بواسطة الفوتوشوب
  • version: إصدار برنامج الفوتوشوب الحالي

وهذه بعض الطرق الخاصة بالتطبيق Application:

  • open: فتح ملف في برنامج الفوتوشوب
  • bringToFront: جعل برنامج الفوتوشوب هو البرنامج المفعل بين بقية البرامج
  • doAction: تنفيذ إجراء جديد

الطبقة ArtLayer

خصائص وطرق تتعلق بالطبقات الموجودة في ملف الفوتوشوب Layers، ولكن تتعلق بالطبقة الواحدة فقط الموجودة في الملف، بعض من هذه الخصائص:

  • allLocked: تقييد محتويات وإعدادات الطبقة
  • opacity: قيمة الشفافية الخاصة بالطبقة وتحسب بالنسبة المئوية (٪)
  • name: الحصول على إسم الطبقة
  • kind: نوع الطبقة (إذا كانت الطبقة فارغة) مثل أن تكون طبقة خطية/عادية
  • visible: تعطي قيمة true إذا كانت الطبقة مرئية

وهذه بعض الطرق الخاصة بالطبقة ArtLayer:

  • applyBlur: تطبيق المرشح Blur
  • applyClouds: تطبيق المرشح Clouds
  • applyGlassEffect: تطبيق المرشح Glass
  • applyWave: تطبيق المرشح Wave
  • cut: قطع الطبقة (لوضعها في مكان آخر من الترتيب)
  • copy: نسخ الطبقة
  • remove: حذف الطبقة
  • resize: إعادة قياس الطبقة إلى أبعاد محددة

الطبقات ArtLayers

خصائص وطرق تتعلق بالطبقات الموجودة في ملف الفوتوشوب Layers، ولكن تتعلق بالطبقة الواحدة، بعض من هذه الخصائص:

  • length: عدد الطبقات الموجودة في الملف

وهذه بعض الطرق الخاصة بالطبقات ArtLayers:

  • add: إضافة طبقة جديدة
  • getByName: الحصول على أول طبقة متوافقة بالإسم المحدد عبر هذه الدالة
  • removeAll: حذف جميع الطبقات الموجودة في الملف

القناة Channel

خصائص وطرق تتعلق بقائمة القنوات المستخدمة في ملف الفوتوشوب (عادة تكون بجانب قائمة الطبقات) بعض من هذه الخصائص:

  • color: الحصول على لون القناة
  • kind: الحصول على نوع القناة
  • name: الحصول على إسم القناة
  • visible: تعطي قيمة true إذا كانت الطبقة مرئية
  • opacity: قيمة الشفافية الخاصة بالقناة

وهذه بعض الطرق الخاصة بالقناة Channel:

  • duplicate: نسخ الطبقة
  • remove:حذف القناة
  • merge: توحيد القناة مع بقية القنوات

الوثيقة Document

خصائص وطرق تتعلق بمحتويات الملف من طبقات وغيرها، بعض من هذه الخصائص:

  • activeChannels: القنوات المحددة من قبل المتسخدم
  • activeLayer: الطبقة المحددة من قبل المستخدم
  • backgroundLayer: طبقة الخلفية الخاصة بالملف المفتوح
  • channels: مجموعة القنوات الموجودة في الملف
  • layers: الطبقات الغير محددة من قبل المستخدم
  • fullName: المسار الكامل لملف الفوتوشوب
  • width: قيمة عرض الملف
  • height: قيمة إرتفاع الملف
  • resolution: دقة قياس الملف (بإستخدام pixels لكل inch)
  • selection: المساحة المحددة من منطقة عمل الملف (بإستخدام أداة التحديد)
  • saved: ترحع قيمة true إذا تم حفظ الملف في آخر تغيير حصل

وهذه بعض الطرق الخاصة بالوثيقة Document:

  • duplicate: نسخ الملف مع تحديد إسمه وإختيار دمج جميع الطبقات في الملف المفتح الجديد
  • crop: تقطيع الملف بقياس معين وزاوية معينة
  • close: إغلاق الملف وتهيئته للحفظ
  • exportDocument: تصدير الملف مع تخديد مساره وصيغة التصدير وإختيارات التصدير الخاصة بصيغة التصدير
  • resizeImage: تصفير الصورة مع تحديد العرض والإرتفاع والدقة الخاصة بالتصغير
  • save: حفظ الملف

الخطوط TextFont

خصائص وطرق تتعلق بعرض الخطوط المتوفرة في الجهاز وعرض الخصائص التي بها، بعض من هذه الخصائص:

  • name: إسم الخط
  • family: نوع الخط
  • style: شكل الخط

مثال على عمل إجراء مبرمج بلغة Javascript

المثال فكرته هي تصغير مجموعة من الصور المصممة لنسخة Retina لأحد تطبيقات الآيفون إلى نصف حجمها للحصول على صور خاصة بالنسخة العادية من التطبيق (مثل iPhone 3gs وما قبله التي لا تدعم شاشة Retina)، والإختلاف بين صور شاشة Retina والصور العادية المصغرة أن صور شاشة Retina ستنتهي بإشارة -hd من إسم الملف أما صيغة الصور العادية فتكون بدون إشارة -hd.

أما مهام تطبيق الإجراء Action المبرمج بلغة Javascript في برنامج الفوتوشوب هي:

  1. فتح مجموعة من الصور في برنامج الفوتوشوب
  2. عمل إجراء جديد action وتسجيل إستيراد ملف Javascript بصيغة jsx
  3. تنفيذ الإجراء عن طريق ملف Javascript الذي قمت بعمله

وستكون النتيجة توفير الوقت بدلاً من تصغيرها بطريقة يدوية وإعادة حفظها واحدة تلو الأخرى (إفترض أن لديك 30 صورة أو أكثر تريد تصغيرها إلى نصف حجمها!)، ونتيجة تنفيذ مهام تطبيق الإجراء على فكرة المثال هي:

  1. تصغير مجموعة من الصور إلى نصف حجمها (بإعتبارها نسخة مصغرة من الصور الكبيرة)
  2. إعادة تصديرها بنفس الصيغة والإسم مع حذف جزء أخير من إسم الملف (حذف إشارة -hd من الصورة المصغرة)

برمجة مهام الإجراء Action بإستخدام لغة Javascript

لبرمجة إجراء Action بإستخدام لغة Javascript يجب إستخدام برنامج ExtendScript Toolkit الخاص بشركة Adobe والمرفق مع برنامج الفوتوشوب ويمكن البحث عنه في قائمة البرامج. مهمة برنامج ExtendScript Toolkit عمل أي إضافة وتكويد لبعض برامج شركة Adobe ومنها برنامج الفوتوشوب (لم أكن أعرف غرض وجوده مسبقاً).

هذه شفرة مهام الإجراء التي نريد إستخدامها في برنامج الفوتوشوب مع شرح أهم أجزاء الشفرة وسأشرح المتغيرات والطرق التي ذكرت في الشفرة بعد وضعها، هذه هي شفرة Javascript:

// التأكد من وجود صور مفتوحة في الفوتوشوب
if (documents.length == 0) {

    alert("There are no documents open");

} else {

    // عملية تكرار لتطبيق التعديلات على جميع الصور
    for(var i = 0; i < documents.length; i++) {

        // تحديد الملف الحالي مع العرض والإرتفاع
        var docRef = documents[i];
        app.activeDocument = docRef;
        var width = docRef.width;
        var height = docRef.height;

        // إعادة تصغير الصورة إلى نصف قياسها
        docRef.resizeImage(width/2, height/2, null, null);

        // خصائص حفظ الملف مع تحديد نوع الحفظ
        var options = new ExportOptionsSaveForWeb();
        options.format = SaveDocumentType.PNG;
        options.transparency = true;
        options.blur = 0.0;
        options.includeProfile = false;
        options.interlaced = false;
        options.optimized = true;
        options.quality = 100;
        options.PNG8 = false;

        // أخذ إسم الملف الحالي لإستخدامه فيما بعد في حفظ الملف مرة أخرى
        var docTitle = docRef.name;

        // حفظ الملف الجديد في نفس مسار الملف الحالى مع إعادة تسميته وإستخدام خصائص أو إختيارات الحفظ
        docRef.exportDocument(File(docRef.path+'/'+docTitle.substring(0, docTitle.length-7)+'.png'),ExportType.SAVEFORWEB,options);

        // إغلاق الملف
        //docRef.close();
    }

}

شرح أهم الخصائص والطرق في الشفرة:

  1. documents: متغير (كائن) يشير الملفات المفتوحة في الفوتوشوب مثل الصور والتصاميم
  2. documents.length: متغير يشير إلى عدد الملفات المفتوحة
  3. app: متغير (كائن) يشير إلى برنامج الفوتوشوب كتطبيق Application
  4. app.activeDocument: متغير يشير إلى الملف الفعال في الفوتوشوب (الذي تقوم بعمل التعديلات عليه بين بقية الملفات المفتوحة الأخرى الموجودة في الفوتوشوب)
  5. resizeImage: طريقة لتصغير قياس الملف أو الصورة ويتكون من ثلاثة قيم وهي العرض width، الإرتفاع height، الدقة resolution، قيمة أخرى لا أعرف الغرض من إستخدامها ResampleMethod
  6. ExportOptionsSaveForWeb: كائن يشير إلى تصدير التصميم أو الصورة لحفظها للويب، ومنها يتم إستخدام عدة إختيارات لتحديد المناسب للحفظ مثل quality, optimized, blur, transparency, format
  7. exportDocument: طريقة لتصدير الملف أو الصورة وتتكون من عدة قيم مثل مسار التصدير File، طريقة التصدير ExportType، إختيارات التصدير ExportOptionsSaveForWeb أو ExportOptionsIllustrator

شرح غرض بعض الأسطر في الشفرة:

  • السطر (8): عمل تكرار لعدد المرات التي سيتم تصغير الصور ويتوقف العدد على عدد الصور المفتوحة.
  • السطر (17): تصغير كل صورة إلى نصفها ويمكن تغيير قياس التصغير إذا كان لديك قياس معين أو دالة معينة لتصغير الصورة.
  • السطر (20): إنشاء كائن جديد وهو ExportOptionsSaveForWeb خاص بعملية تصدير الصور للويب في برنامج الفوتوشوب، وتحديد الإختيارات الخاصة به في السطور التي تليه.
  • السطر (31): إستخراج إسم الصورة ووضعها في متغير جديد وإستخدامها لاحقاً في حفظ صورة جديدة.
  • السطر (34): إستخدام الطريقة exportDocument في تصدير الصورة مرة أخرى، وتحديد مسار حفظ الملف عن طريق الدالة File وإستخدام طريقة متغير path في وضع المسار الحالي للملف (الذي فتحناه مسبقاً) إضافةً إلى حذف إشارة -hd الموجودة في نهاية إسم الملف عن طريق دالة substring وإضافة إمتداد .png مرة أخرى، وبعدها تحديد طريقة الحفظ وهي SaveForWeb، وأخيراً إستخدام الإختيارات التي تم إدارجها في متغير options (عبر كائن ExportOptionsSaveForWeb)
  • السطر (37): إغلاق الملف بعد عملية التصغير ويتم إغلاق جميع الملفات وقتها بسبب إستخدام طريقة close في دالة التكرار for (فضلت جعل الأمر إختياري للمستخدم وألغيت إستخدامها بجعلها مجرد تعليق).

إستخدام مهام الإجراء المبرمجة بلغة Javascript في قائمة الإجراءات Actions في برنامج الفوتوشوب

بعد الإنتهاء من برمجة مهام الإجراء يجب حفظ الملف بصيغة jsx (صيغة لغة Javascript ومخصصة لبرامج Adobe) وأنصح بحفظه في سطح المكتب Desktop لتسهيل الوصول إليه، بعدها يمكنك إستخدام الملف في برنامج الفوتوشوب وذلك بعد فتح الصور التي تريد تصغيرها في الفوتوشوب، ثم إنشاء إجراء جديد من قائمة الإجراءات (يمكن الوصول إليها عبر قائمة Windows->Actions) وتسجيل إجراء جديد بحيث تكون علامة التسجيل ظاهرة باللون الأحمر:

أما عن إستدعاء الإجراء المبرمج (ملف Javascript الذي أنشأناه عبر برنامج ExtendScript Toolkit) فيتم ذلك عبر قائمة File->Scripts->browse… :

بعد ذلك سيتم تطبيق مهام الإجراء المبرمج وهي تصغير جميع الصور المفتوحة وحفظها في نفس مكان الصور المفتوحة وبنفس الإسم (بدون إضافة -hd) (مثل أن تكون الصورة الأصلية picture-hd.png وتصغر وتحول إلى picture.png)، لا تنسى توقيف التسجيل Record لكي لا يتم تسجيل أي مهمة بعد الإجراء. قد تحتاج إلى مثل هذه الفكرة لإختصار الوقت كما ذكرت فهذا الدرس يمكن أن يكون مرجع مفيد لك.

مراجع مفيدة

هذه بعض المراجع المفيدة من عدة مواقع وإستفدت منها في البداية للبحث عن حل لتوفير الوقت على نفسي في تصغير مجموعة من الصور.

Adobe Photoshop Scripting

المرجع الرئيسي لبرمجة الإجراءات من موقع Adobe، يمكن إختيار الوثائق الخاصة بآخر إصدارات الفوتوشوب مع إختيار وثيقة اللغة المتوفرة التي يمكن برمجة الإجراءات فيها.

Scripting Photoshop (مقدمة)

درس بسيط يبين غرض برمجة الإجراءات بدلاً من الإستخدام المباشر للإجراءات عن طريق قائمة Actions، وشرح أساسيات إستخدام هذه الطريقة بشكل مبسط.

Powerful Task Automation with Photoshop Scripting

درس من موقع psd tuts+ يعرض عدة أمثلة مبسطة لبرمجة الإجراءات.

قد لا تستفيد من هذا الموضوع الآن ولكن ستحتاجه فيما بعد إن رأيت أن قائمة الإجراءات Actions الإفتراضية الموجودة في برنامج الفوتوشوب محدودة ويجب إستخدام التكويد في عمل ما لا يمكن عمله في قائمة الإجراءات.