هذه هي مكتبة Kraken.io PHP الرسمية ، والتي يجب أن تساعد المستخدمين بسرعة كبيرة على دمج تحسين الصور لدينا في مشاريع PHP الخاصة بهم. Kraken.io Image Optimizer.
إذا كنت تستخدم الملحن ، يمكنك ببساطة إضافة تبعية على kraken-io/kraken-php إلى ملف composer.json بمشروعك. إليك مثال على التبعية على الإصدار 1.2:
{
"require" : {
"kraken-io/kraken-php" : " ^1.2 "
}
}بدلاً من ذلك ، يمكنك أيضًا تنفيذ الأمر التالي في دليل الجذر لمشروعك:
composer require kraken-io/kraken-php
إذا كان لديك بالفعل GIT ، فإن أسهل طريقة لتنزيل مكتبة Kraken-PHP هي مع أمر GIT:
git clone git://github.com/kraken-io/kraken-php.git /path/to/include/kraken
بدلاً من ذلك ، يمكنك تنزيل ملفات PHP من Github ووضعها في مشروع PHP الخاص بك:
https://github.com/kraken-io/kraken-php/archive/master.zip
تحتاج أولاً إلى الاشتراك في API Kraken.io والحصول على مفتاح API الفريد و Secret API . ستجد كلاهما تحت بيانات اعتماد API. بمجرد إعداد حسابك ، يمكنك البدء في استخدام kraken.io API في تطبيقاتك.
تذكر - لا تصل أبدًا إلى الصور المحسنة المقدمة للتنزيل. يجب عليك تنزيلها أولاً ، ثم استبدالها في مواقع الويب أو التطبيقات الخاصة بك. لأسباب أمنية تتوفر الصور المحسنة على خوادمنا لمدة ساعة واحدة فقط.
يمكنك تحسين صورك بطريقتين - من خلال توفير عنوان URL للصورة التي تريد تحسينها أو عن طريق تحميل ملف صورة مباشرة إلى Kraken.io API.
الخيار الأول (عنوان URL Image) رائع للصور الموجودة بالفعل في الإنتاج أو أي مكان آخر على الإنترنت. يعد الأمر الثاني (التحميل المباشر) مثاليًا لعملية النشر الخاصة بك ، أو إنشاء البرنامج النصي أو المعالجة أثناء التنقل لتحميل المستخدم الخاص بك حيث لا تتوفر الصور عبر الإنترنت حتى الآن.
يمنحك Kraken.io خيارين لجلب نتائج التحسين. مع تعيين خيار wait ، سيتم إرجاع النتائج فورًا في الاستجابة. باستخدام خيار callback_url ، سيتم نشر النتائج على عنوان URL المحدد في طلبك.
مع تشغيل خيار wait لكل طلب إلى واجهة برمجة التطبيقات ، سيتم فتح الاتصال حتى يتم تحسين الصورة. بمجرد الانتهاء من ذلك ، ستحصل على استجابة فورية مع كائن JSON يحتوي على نتائج التحسين الخاصة بك. لاستخدام هذا الخيار ببساطة تعيين "wait": true في طلبك.
طلب:
{
"auth" : {
"api_key" : "your-api-key" ,
"api_secret" : "your-api-secret"
} ,
"url" : "http://image-url.com/file.jpg" ,
"wait" : true
}إجابة
{
"success" : true ,
"file_name" : "file.jpg" ,
"original_size" : 324520 ,
"kraked_size" : 165358 ,
"saved_bytes" : 159162 ,
"kraked_url" : "http://dl.kraken.io/d1aacd2a2280c2ffc7b4906a09f78f46/file.jpg"
} من خلال عنوان URL للاتصال ، سيتم إنهاء اتصال HTTPS على الفور وسيتم إرجاع id فريد في هيئة الاستجابة. بعد انتهاء التحسين ، سيتم نشر رسالة إلى callback_url المحددة في طلبك. سيعكس المعرف في الاستجابة المعرف في النتائج المنشورة على عنوان URL لاستدعاءك.
نوصي طلب requestbin كوسيلة سهلة لالتقاط نتائج التحسين للاختبار الأولي.
طلب:
{
"auth" : {
"api_key" : "your-api-key" ,
"api_secret" : "your-api-secret"
} ,
"url" : "http://image-url.com/file.jpg" ,
"callback_url" : "http://awesome-website.com/kraken_results"
}إجابة:
{
"id" : "18fede37617a787649c3f60b9f1f280d"
}النتائج المنشورة في عنوان URL للاتصال:
{
"id" : "18fede37617a787649c3f60b9f1f280d"
"success" : true ,
"file_name" : "file.jpg" ,
"original_size" : 324520 ,
"kraked_size" : 165358 ,
"saved_bytes" : 159162 ,
"kraked_url" : "http://dl.kraken.io/18fede37617a787649c3f60b9f1f280d/file.jpg"
} الخطوة الأولى هي المصادقة على kraken.io API من خلال توفير مفتاح API الفريد و Secret API مع إنشاء مثيل kraken.io جديد:
<?php
require_once ( " Kraken.php " );
$ kraken = new Kraken ( " your-api-key " , " your-api-secret " ); لتحسين الصورة من خلال توفير عنوان URL للصورة ، استخدم طريقة kraken.url() . ستحتاج إلى توفير معلمتين إلزاميتين في صفيف - url للصورة wait أو callback_url :
<?php
require_once ( " Kraken.php " );
$ kraken = new Kraken ( " your-api-key " , " your-api-secret " );
$ params = array (
" url " => " http://url-to-image.com/file.jpg " ,
" wait " => true
);
$ data = $ kraken -> url ( $ params ); اعتمادًا على خيار الاستجابة المختار (عنوان URL أو الاتصال بالاتصال) في صفيف data ، ستجد إما معرف التحسين أو نتائج التحسين التي تحتوي على خاصية success واسم الملف وحجم الملف الأصلي وحجم ملف Kraked ومقدار التوفير وعنوان URL المحسّن:
array ( 6 ) {
' success ' =>
bool(true)
' file_name ' =>
string( 8 ) " file.jpg "
' original_size ' =>
int( 62422 )
' kraked_size ' =>
int( 52783 )
' saved_bytes ' =>
int( 9639 )
' kraked_url ' =>
string( 65 ) " http://dl.kraken.io/d1aacd2a2280c2ffc7b4906a09f78f46/file.jpg "
} إذا كنت ترغب في تحميل صورك مباشرة إلى Kraken.io API ، فاستخدم طريقة kraken->upload() . ستحتاج إلى توفير معلمتين إلزاميتين في صفيف - file وهو المسار المطلق للملف wait أو callback_url .
في صفيف $data ، ستجد نفس خصائص التحسين كما هو الحال مع خيار url أعلاه.
<?php
require_once ( " Kraken.php " );
$ kraken = new Kraken ( " your-api-key " , " your-api-secret " );
$ params = array (
" file " => " /path/to/image/file.jpg " ,
" wait " => true
);
$ data = $ kraken -> upload ( $ params );عندما تقرر التضحية بقدر صغير من جودة الصورة (عادةً غير ملحوظ للعين البشرية) ، ستتمكن من توفير ما يصل إلى 90 ٪ من وزن الملف الأولي. سوف يمنحك التحسين المفقود نتائج رائعة مع وجود جزء صغير من فقدان جودة الصورة.
لاستخدام التحسينات المفقودة ببساطة قم بتعيين "lossy" => true في طلبك:
<?php
require_once ( " Kraken.php " );
$ kraken = new Kraken ( " your-api-key " , " your-api-secret " );
$ params = array (
" file " => " /path/to/image/file.jpg " ,
" wait " => true ,
" lossy " => true
);
$ data = $ kraken -> upload ( $ params );سيتم تحويل صور PNG من 24 بت إلى 8 بت مع قناة ألفا كاملة. تسمى هذه العملية تقدير PNG بتنسيق RGBA وتعني أن يتم تخفيض كمية الألوان المستخدمة في الصورة إلى 256 مع الحفاظ على جميع المعلومات حول شفافية ألفا.
من أجل تحسينات JPEG Lossy ، ستقوم Kraken.io بإنشاء نسخ متعددة من صورة الإدخال مع إعدادات جودة مختلفة. سيختار ذلك بذكاء بأفضل جودة لتنفيذ الحصة. هذا يضمن أن تكون صورة JPEG الخاصة بك في أصغر حجم بأعلى جودة ممكنة ، دون الحاجة إلى اختيار الإنسان الصورة المثلى.
يعد خيار تغيير حجم الصور رائعًا لإنشاء الصور المصغرة أو معاينة الصور في تطبيقاتك. ستقوم Kraken.io أولاً بتغيير حجم الصورة المحددة ثم تحسينها مع صفيفها الواسع من خوارزميات التحسين. يحتاج خيار resize إلى عدد قليل من المعلمات ليتم تمريرها مثل width المطلوب و/أو height وخاصية strategy الإلزامية. على سبيل المثال:
<?php
require_once ( " Kraken.php " );
$ kraken = new Kraken ( " your-api-key " , " your-api-secret " );
$ params = array (
" file " => " /path/to/image/file.jpg " ,
" wait " => true ,
" resize " => array (
" width " => 100 ,
" height " => 75 ,
" strategy " => " crop "
)
);
$ data = $ kraken -> upload ( $ params ); يمكن أن تحتوي خاصية strategy على واحدة من القيم التالية:
exact - تغيير الحجم حسب العرض/الارتفاع الدقيق. لن يتم الحفاظ على نسبة العرض إلى الارتفاع.portrait - سيتم تعيين العرض الدقيق ، وسيتم تعديل الارتفاع وفقًا لنسبة العرض إلى الارتفاع.landscape - سيتم تعيين الارتفاع الدقيق ، وسيتم تعديل العرض وفقًا لنسبة العرض إلى الارتفاع.auto - سيتم اختيار أفضل استراتيجية (صورة أو مشهد) لصورة معينة وفقًا لنسبة العرض إلى الارتفاع.fit - سيقوم هذا الخيار بتقديم وتغيير حجم صورك لتناسب العرض والارتفاع المطلوب.square - ستقوم هذه الاستراتيجية أولاً بتقديم الصورة ببعدها الأقصر لجعلها مربعًا ، ثم تغيير حجمها إلى الحجم المحدد.crop - سيؤدي هذا الخيار إلى تقطيع صورتك إلى الحجم الدقيق الذي تحدده دون تشويه.fill - تتيح لك هذه الاستراتيجية تغيير حجم الصورة لتناسب الحدود المحددة مع الحفاظ على نسبة العرض إلى الارتفاع (تمامًا مثل استراتيجية السيارات). تتيح لك خاصية الخلفية الاختيارية تحديد لون سيتم استخدامه لملء الأجزاء غير المستخدمة من الحدود المحددة مسبقًا. يمكن تنسيق خاصية الخلفية في ترميز HEX #f60 أو #ff6600 ، RGB rgb(255, 0, 0) أو RGBA rgba(91, 126, 156, 0.7) . لون الخلفية الافتراضي هو أبيض.يمكن الاطلاع
WebP هو تنسيق صورة جديد قدمته Google في عام 2010 والذي يدعم كل من الضغط الخاسر وغير المفقود. وفقًا لـ Google ، تكون الصور التي لا تحتوي على خسائر على شبكة الإنترنت أصغر حجمًا بنسبة 26 ٪ مقارنةً بالـ PNGs والصور المفقودة على WebP أصغر بحجم 25-34 ٪ مقارنةً بصور JPEG.
لإعادة ضغط ملفات PNG أو JPEG في تنسيق WebP ، ببساطة قم بتعيين "webp": true Flag في طلبك JSON. يمكنك أيضًا تعيين "lossy": true Flag للاستفادة من ضغط Webp الخاص بـ WebP:
<?php
require_once ( " Kraken.php " );
$ kraken = new Kraken ( " your-api-key " , " your-api-secret " );
$ params = array (
" file " => " /path/to/image/file.jpg " ,
" wait " => true ,
" webp " => true ,
" lossy " => true
);
$ data = $ kraken -> upload ( $ params );تتيح لك kraken.io API تحويل صور مختلفة بسهولة من نوع/تنسيق إلى آخر. على سبيل المثال ، إذا كنت ترغب في تحويل ملف PNG شفاف إلى JPEG مع خلفية رمادية KRAKEN.IO API لقد قمت بتغطيتها.
من أجل التحويل بين أنواع الصور المختلفة ، تحتاج إلى إضافة كائن convert إضافي إلى طلب JSON. هذا الكائن يأخذ ثلاث خصائص:
format الذي تحدد به نوع الملف الذي تريد تحويل صورتك إليه.background اختيارية حيث يمكنك تحديد لون الخلفية عند التحويل من تنسيقات الملفات الشفافة مثل PNG و GIF في تنسيق غير شفاف تمامًا مثل JPEG.keep_extension اختيارية تتيح لك الاحتفاظ بملحق الملف الأصلي سليما بغض النظر عن تنسيق صورة الإخراج.المعلمات الإلزامية:
format - تنسيق الصورة الذي ترغب في تحويل صورتك إلى. يمكن أن يقبل هذا أحد القيم التالية: jpeg أو png أو gif .المعلمات الاختيارية:
background - صورة الخلفية عند التحويل من تنسيقات ملفات شفافة مثل PNG أو GIF إلى تنسيق غير شفاف تمامًا مثل JPEG. يمكن تمرير خاصية الخلفية في تدوين Hex "#f60" أو "#ff6600" ، RGB "rgb(255, 0, 0)" أو RGBA "rgba(91, 126, 156, 0.7)" . لون الخلفية الافتراضي هو أبيض.keep_extension - قيمة منطقية ( true أو false ) تعليمات kraken.io API ما إذا كان ينبغي الاحتفاظ بالتمديد الأصلي في اسم ملف الإخراج أم لا. على سبيل المثال ، عند تحويل "Image.jpg" إلى تنسيق PNG باستخدام هذا العلامة ، سيظل اسم صورة الإخراج "Image.jpg" على الرغم من أن الصورة قد تم تحويلها إلى PNG. القيمة الافتراضية false وهذا يعني أن الامتداد الصحيح سيتم تعيينه دائمًا. بشكل افتراضي ، ستقوم API بتجريد جميع البيانات الوصفية الموجودة في صورة لجعل ملف الصورة صغيرًا قدر الإمكان ، وفي كل من الوضعين المفقودين وغير المفقودين. سيتم تجريد إدخالات مثل علامات Exif و XMP و IPTC ومعلومات ملف تعريف اللون وما إلى ذلك تمامًا.
ومع ذلك ، هناك حالات قد ترغب في الحفاظ عليها بعض معلومات التعريف الواردة في الصورة ، على سبيل المثال ، إشعار حقوق الطبع والنشر أو الجيولوجي. من أجل الحفاظ على أهم إدخالات التعريف ، أضف صفيفًا إضافيًا preserve_meta لطلبك بواحد أو أكثر من القيم التالية:
{
"preserve_meta" : [ "date" , "copyright" , "geotag" , "orientation" , "profile" ]
}profile - سيحافظ على ملف تعريف اللون ICC. تضيف معلومات ملف تعريف اللون ICC الضخمة غير الضرورية إلى الصور. ومع ذلك ، قد يكون الحفاظ على أنه من الضروري في حالات نادرة للغاية حيث يمكن أن تؤدي إزالة هذه المعلومات إلى تغيير في السطوع و/أو تشبع الملف الناتج.date - سيحافظ على تاريخ إنشاء الصورة.copyright - سيحافظ على إدخالات حقوق الطبع والنشر.geotag - سيحافظ على المعلومات الخاصة بالموقع.orientation - سيحافظ على علامة الاتجاه (الدوران).مثال التكامل:
<?php
require_once ( " Kraken.php " );
$ kraken = new Kraken ( " your-api-key " , " your-api-secret " );
$ params = array (
" file " => " /path/to/image/file.jpg " ,
" wait " => true ,
" preserve_meta " => array ( " profile " , " geotag " )
);
$ data = $ kraken -> upload ( $ params );تتيح لك kraken.io API تخزين الصور المحسنة مباشرة في دلو S3 أو حاوية ملفات السحابة أو حاوية Azure أو حاوية تخزين كائن SoftLayer. مع وجود عدد قليل من المعلمات الإضافية ، سيتم دفع الصور المحسنة إلى التخزين الخارجي في أي وقت من الأوقات.
المعلمات الإلزامية:
key - Amazon الفريد "معرف Access Key".secret - Amazon الفريد "مفتاح الوصول السري" الخاص بك.bucket - اسم حاوية الوجهة على حساب Amazon S3 الخاص بك.region -اسم المنطقة التي يوجد فيها دلو S3. هذا الحقل إلزامي إذا كانت المنطقة مختلفة عن الحقل الافتراضي ( us-east-1 ). يمكن العثور على القائمة الكاملة لمناطق S3 هنا.المعلمات الاختيارية:
path - مسار الوجهة في دلو S3 الخاص بك (على سبيل المثال "images/layout/header.jpg" ). الإعدادات الافتراضية للجذر "/" .acl - أذونات كائن الوجهة. يمكن أن يكون هذا "public_read" أو "private" . الإعدادات الافتراضية إلى "public_read" . يجب تمرير المعلمات أعلاه في مفتاح s3_store :
<?php
require_once ( " Kraken.php " );
$ kraken = new Kraken ( " your-api-key " , " your-api-secret " );
$ params = array (
" file " => " /path/to/image/file.jpg " ,
" wait " => true ,
" s3_store " => array (
" key " => " your-amazon-access-key " ,
" secret " => " your-amazon-secret-key " ,
" bucket " => " destination-bucket "
)
);
$ data = $ kraken -> upload ( $ params ); سيحتوي صفيف $data على مفتاح kraked_url يشير مباشرة إلى الملف المحسن في حساب Amazon S3 الخاص بك:
" kraked_url " => "http: //s3.amazonaws.com/YOUR_CONTAINER/path/to/file.jpg"المعلمات الإلزامية:
user - اسم المستخدم الخاص بك.key - مفتاح API Cloud Files الفريد.container - اسم حاوية الوجهة على حساب ملفات السحابة الخاصة بك.المعلمات الاختيارية:
path - مسار الوجهة في الحاوية الخاصة بك (على سبيل المثال "images/layout/header.jpg" ). الإعدادات الافتراضية للجذر "/" .ssl - قيمة منطقية ( true أو false ) تعليمات kraken.io API لجلب إما SSL أو URL غير SSL من السحابة Rackspace. الإعدادات الافتراضية إلى false يعني أن عنوان URL غير SSL سيتم إرجاعه. يجب تمرير المعلمات أعلاه في مفتاح cf_store :
<?php
require_once ( " Kraken.php " );
$ kraken = new Kraken ( " your-api-key " , " your-api-secret " );
$ params = array (
" file " => " /path/to/image/file.jpg " ,
" wait " => true ,
" cf_store " => array (
" user " => " your-rackspace-username " ,
" key " => " your-rackspace-api-key " ,
" container " => " destination-container " ,
" ssl " => true
)
);
$ data = $ kraken -> upload ( $ params ); إذا كانت الحاوية الخاصة بك تدعم CDN ، فستتضمن نتائج التحسين kraked_url التي تشير مباشرة إلى موقع الملف المحسن في حساب ملفات السحابة الخاصة بك ، على سبيل المثال:
kraked_url => "http: //e9ffc04970a269a54eeb-cc00fdd2d4f11dffd931005c9e8de53a.r2.cf1.rackcdn.com/path/to/file.jpg" إذا لم تكن الحاوية الخاصة بك هي ملف محسّن معقد CDN في حساب CloudFiles الخاص بك على أي حال ، فسيشير kraked_url إلى عنوان URL المحسّن في تخزين kraken.io API:
kraked_url => "http: //dl.kraken.io/ecdfa5c55d5668b1b5fe9e420554c4ee/file.jpg"المعلمات الإلزامية:
account - حساب تخزين Azure الخاص بك.key - مفتاح الوصول الفريد لتخزين Azure.container - اسم حاوية الوجهة على حساب Azure الخاص بك.المعلمات الاختيارية:
path - مسار الوجهة في الحاوية الخاصة بك (على سبيل المثال "images/layout/header.jpg" ). الإعدادات الافتراضية للجذر "/" . يجب تمرير المعلمات أعلاه في مفتاح azure_store :
<?php
require_once ( " Kraken.php " );
$ kraken = new Kraken ( " your-api-key " , " your-api-secret " );
$ params = array (
" file " => " /path/to/image/file.jpg " ,
" wait " => true ,
" azure_store " => array (
" account " => " your-azure-account " ,
" key " => " your-azure-storage-access-key " ,
" container " => " destination-container "
)
);
$ data = $ kraken -> upload ( $ params );المعلمات الإلزامية:
user - اسم مستخدم SoftLayer الخاص بك.key - مفتاح API SoftLayer الخاص بك.container - اسم حاوية الوجهة على حساب SoftLayer الخاص بك.region - الاسم القصير للمنطقة الموجودة في الحاوية الخاصة بك. يمكن أن يكون هذا واحد مما يلي: syd01 lon02 mon01 dal05 tok02 tor01 hkg02 mex01 par01 fra02 mil01 sjc01 sng01 mel01 ams01المعلمات الاختيارية:
path - مسار الوجهة في الحاوية الخاصة بك (على سبيل المثال "الصور/التصميم/header.jpg"). الإعدادات الافتراضية للجذر "/".cdn_url - قيمة منطقية true أو false kraken.io API لإرجاع عنوان URL العام لـ CDN لملفك المحسن. الإعدادات الافتراضية إلى false يعني أن عنوان URL غير CDN سيتم إرجاعه. يجب تمرير المعلمات أعلاه في كائن sl_store :
<?php
require_once ( " Kraken.php " );
$ kraken = new Kraken ( " your-api-key " , " your-api-secret " );
// Minimal request, providing only the mandatory parameters */
$ params = array (
" file " => " /path/to/image/file.jpg " ,
" wait " => true ,
" sl_store " => array (
" user " => " your-softlayer-account " ,
" key " => " your-softlayer-key " ,
" container " => " destination-container " ,
" region " => " your-container-location "
)
);
$ data = $ kraken -> upload ( $ params ); يمكنك العثور أدناه على مثال على طلب JSON الكامل الذي يستخدم sl_store لدفع الصورة المحسنة إلى حاوية تخزين كائن SoftLayer. سنستخدم خيار URL لتغذية واجهة برمجة التطبيقات بعنوان URL من الصورة ليتم تحسينه:
<?php
require_once ( " Kraken.php " );
$ kraken = new Kraken ( " your-api-key " , " your-api-secret " );
$ params = array (
" url " => " http://awesome-website.com/images/header.jpg " ,
" wait " => true ,
" sl_store " => array (
" user " => " your-softlayer-account " ,
" key " => " your-softlayer-key " ,
" container " => " destination-container " ,
" region " => " your-container-location " ,
" cdn_url " => true ,
" path " => " images/layout/header.jpg "
)
);
$ data = $ kraken -> upload ( $ params ); إذا كانت حاوية SoftLayer الخاصة بك تدعم CDN وقمت بتمرير "cdn_url": true في طلب JSON الخاص بك ، فسوف تحتوي نتائج التحسين على kraked_url التي تشير مباشرة إلى موقع الملف المحسن في CDN Softlayer الخاص بك ، على سبيل المثال: على سبيل المثال:
kraked_url => "http: //1c231.http.fra02.cdn.softlayer.net/images/layout/header.jpg" إذا لم تكن الحاوية الخاصة بك هي kraked_url التي تدعم CDN ، فستشير إلى عنوان URL المحسّن في الصورة في KRAKEN.IO API:
kraked_url => "http: //dl.kraken.io/api/ecdfa5c55d5668b1b5fe9e420554c4ee/header.jpg" حقوق الطبع والنشر (C) 2013 - 2015 Nekkra ug
يتم منح الإذن بموجب هذا ، مجانًا ، لأي شخص يحصل على نسخة من هذا البرنامج وملفات الوثائق المرتبطة به ("البرنامج") ، للتعامل في البرنامج دون تقييد ، بما في ذلك على سبيل المثال لا الحصر حقوق استخدام الأشخاص ونسخها ودمجها ودمجها وتوزيعها وتوزيعها على ما يلي:
يجب إدراج إشعار حقوق الطبع والنشر أعلاه وإشعار الإذن هذا في جميع النسخ أو الأجزاء الكبيرة من البرنامج.
يتم توفير البرنامج "كما هو" ، دون أي ضمان من أي نوع ، صريح أو ضمني ، بما في ذلك على سبيل المثال لا الحصر ضمانات القابلية للتسويق واللياقة لغرض معين وعدم الانفجار. لا يجوز بأي حال من الأحوال أن يكون المؤلفون أو حاملي حقوق الطبع والنشر مسؤولاً عن أي مطالبة أو أضرار أو مسؤولية أخرى ، سواء في إجراء عقد أو ضرر أو غير ذلك ، ناشئة عن أو خارج البرنامج أو الاستخدام أو غيرها من المعاملات في البرنامج.