جاء تطبيق من العميل ، على الموقع القديم ، لتحديث جميع الصور ، أي لإضافة علامة مائية عليها شعار. كانت المشكلة أنه كان هناك أكثر من 10000 صورة وكانت في مجلدات مختلفة وتحت مجلدات.
قررنا كتابة نص برمجي عالمي يمكن تشغيله من وحدة التحكم أو مباشرة في المتصفح وتحديث جميع الصور على الموقع.
وهكذا فإن المهمة:
- الصور في مجلد img في جذر الموقع ؛
- إضافة علامة مائية إلى وسط الصورة ؛
- نقل جميع الصور إلى مجلد img2 ؛
في عملية حل المشكلة ، اتضح أن جميع الصور ذات أحجام مختلفة من 200 إلى 7000 بكسل عرضًا ، ويجب أن تكون العلامة المائية على شكل شعار على الإطلاق. كيف تم حل هذه المشكلة:
المرحلة 1. تجاوز جميع الملفات
تحتاج أولاً إلى معرفة ما سنعمل معه ، ولهذا قمنا بعرض جميع الملفات والمجلدات الموجودة في مجلد img على الموقع.
$path = $_SERVER['DOCUMENT_ROOT'];
ووظيفة تجاوز جميع عناصر المجلد:
function find_new($dir) { $new_dir = null; $dir_files = opendir($dir); while(false !== ($file = readdir($dir_files))) { if($file != '.' && $file != '..') $new_dir[] = $dir."/".$file; } if($new_dir) foreach($new_dir as $check ) { if(is_file($check)) { echo $check . "<br>"; } elseif(is_dir($check)) find_new($check); } } find_new($root);
كما ترى من القائمة ، تكون الوظيفة متكررة ، ونتيجة لهذا البرنامج النصي ، ستظهر على الشاشة العديد من الخطوط ذات المسارات المطلقة للملفات الموجودة على الموقع.
الشيء الوحيد الذي لم يتم تطبيقه هنا هو التحقق من الصور ، ولكنه لم يكن مفيدًا لنا.
المرحلة 2. إعادة إنشاء بنية المجلد
نظرًا لأن لدينا العديد من المجلدات ، مع مجلدات فرعية ، وما يصل إلى المستوى 10 ، من أجل التشغيل الناجح لجميع وظائف نسخ الملفات ونقلها ، فنحن بحاجة إلى بنية جاهزة.
للقيام بذلك ، نحدد اسم المجلد ، بالطبع ، وإذا لم يكن موجودًا ، نقوم بإنشاء:
$fileName = basename($check);
يتم إدراج هذا الرمز بعد: echo $ check؛ وعندما يتم تنفيذه ، فإنه ينشئ بنية مجلد جديدة على الخادم الخاص بك ، بينما يمكنك تشغيله إلى ما لا نهاية له عدة مرات ، فلن يضر الهيكل ، ولكنه ينشئ مجلد img2 مجاور.
المرحلة 3. إضافة شعار للصور
سنستخدم أربع وظائف قياسية لهذا الغرض : imagecreatefrompng و imagecreatefromjpeg و imagecopy و imagejpeg وبعض الأنواع الإضافية: imagedestroy و imagesx .
كل هذا عبارة عن مكتبة GD لـ PHP ، وهي متصلة للجميع بشكل افتراضي وهكذا:
$stamp = imagecreatefrompng('stamp.png');
وهكذا ، بعد 3-5 دقائق من البرنامج النصي ، اعتمادًا على عدد الملفات ، نحصل على نسخة من جميع الصور في مجلد img2 ، لكن الشعار في الزاوية اليمنى السفلية ، وجميع الصور ذات أحجام مختلفة. يمكنك اللعب بالأرقام في صورة تخيلية ولكن لن يكون هناك أي تأثير من ذلك. الصور مختلفة ، مما يعني أن العلامة المائية يجب أن تكون مختلفة ، لذلك ننتقل إلى المرحلة 4.
المرحلة الرابعة. تخصيص الشعار ومواءمته
للقيام بذلك ، نحتاج إلى تحويل شعار الشعار الأصلي. png إلى حجم الصورة التي سنضعها عليها ، ولصقها بالضبط في منتصفها.
متابعة:
$stamp = imagecreatefrompng('stamp.png');
إذا استخدمنا في الخطوة 3 ، في صورة تخيلية ، imagesx (ختم $) كأبعاد الصورة المدرجة ، فإننا هنا نستخدم بالفعل أبعاد صور الشعار الجديد x ($ sim).
يحتوي الشعار على مسافات بادئة 10 بكسل على اليسار واليمين ، ويتم تعيينه على التوالي بالأرقام 20 و 10 في الرمز.
الخطوة 5. أضف وظيفة التحويل إلى الحلقة لدينا:
نظرًا لأن البرنامج النصي كان على الركبة ، فمن الطبيعي أن يتم تبسيطه وتحسينه ، اقتراحاتك في التعليقات. ولكن هنا نسخة عمل:
path = $_SERVER['DOCUMENT_ROOT']; $root = $path."/img"; $stamp = imagecreatefrompng('stamp.png'); $sx = imagesx($stamp); $sy = imagesy($stamp); function find_new($dir) { global $stamp; global $sx; global $sy; $new_dir = null; $dir_files = opendir($dir); while(false !== ($file = readdir($dir_files))) { if($file != '.' && $file != '..') $new_dir[] = $dir."/".$file; } if($new_dir) foreach($new_dir as $check ) { if(is_file($check)) { $w='';$h='';$koe='';$sim='';
يكفي وضعها في المجلد الجذر للموقع ، وتعيين المجلد المصدر والوجهة مع الصور وتشغيلها إذا كان هناك الكثير من الصور. أضف أولاً:
ignore_user_abort(); set_time_limit(0);
وركض من وحدة التحكم لرؤية مراحل العمل.
من الأفضل إجراء التجارب على إدراج الشعار وتحديد درجة الشفافية في المجلد الوجهة ، لهذا ، في السطر $ root = $ path. ”/ Add / your / path / to / folder" أو وضع النص في مجلد الوجهة وتشغيله من هناك.
استخدمنا شعار شركة قياسي بشفافية 60٪.
الخلاصة
عندما يكون المجلد الذي يحتوي على الملفات الجديدة جاهزًا ، ما عليك سوى إعادة تسميته من img2 إلى img. ونتيجة لذلك ، سيحتوي موقعك على مجلد يحتوي على ملفات مصدر يمكن أرشفتها أو حذفها ، ومجلد يحتوي على صور مميزة بشعار.
هذا النص البرمجي مناسب للاستخدام في المشاريع التي تم تحميل صور منتجات أو مقالات فيها بالفعل ، ولا توجد إمكانية لتثبيت نص برمجي لإضافة علامة مائية ، أو لا يوجد على الإطلاق.
المهمة التالية هي استبدال بيانات exif على جميع صور الموقع نفسه. لما هو وكيف يتم تنفيذه ، سنخبرنا في المقالة التالية.