Накладаємо водяні знаки на зображення в WordPress за допомогою ImageMagick

  1. Крок 1. Реєструємо необхідний розмір зображень
  2. Крок 2. зчіплюються з генерацією метаданих
  3. Крок 3. Водяний знак за допомогою ImageMagick
  4. Крок 4. Зберігаємо нове зображення
  5. висновок

Коли блогери публікують свої зображення в мережі, зазвичай вони накладають на них водяні знаки - такі невеликі, не дуже помітні логотипи (яку інформацію про авторські права) в одному з кутів зображення.

Деякі застосовують для цього графічні інструменти, накладаючи водяний знак ще до завантаження зображення, проте найефективніше робити це вже після завантаження програмними засобами.

WordPress для обробки зображень використовує бібліотеку PHP GD, проте є краща альтернатива: ImageMagick (IM). У обох бібліотек є свої плюси і свої мінуси, проте я особисто вважаю за краще використовувати IM, оскільки вона не тільки більш потужна, але і більш проста.

Перед тим, як йти далі, переконайтеся в тому, що ви встановили ImageMagick разом з його модулем на сервер з Debian / Ubuntu. Зробити це можна за допомогою такої команди:

$ Sudo apt-get install imagemagick php5-imagick

Крок 1. Реєструємо необхідний розмір зображень

Перш ніж ви зможете управляти вкладенням (зображенням), вам потрібно буде зареєструвати розмір зображень, для якого буде застосовуватися водяний знак:

function register_watermarked_size () {add_image_size ( 'watermarked', 550, 550, true); } Add_action ( 'init', 'register_watermarked_size');

У нашому випадку я задав зображення розміром 550 × 500 пікселів, яке буде обрізаним (це робиться за допомогою аргументу, встановленого в true). Ви можете вибрати інший розмір.

Крок 2. зчіплюються з генерацією метаданих

WordPress йде з фільтром wp_generate_attachment_metadata, який дозволяє нам змінювати метадані вкладення (дані про вкладення), які зберігаються в базі даних. Ось функція, яка дозволяє зробити це:

function generate_watermarked_image ($ meta) {$ time = substr ($ meta [ 'file'], 0, 7); // Extract the date in form "2015/04" $ upload_dir = wp_upload_dir ($ time); $ Filename = $ meta [ 'sizes'] [ 'watermarked'] [ 'file']; $ Meta [ 'sizes'] [ 'watermarked'] [ 'file'] = watermark_image ($ filename, $ upload_dir); return $ meta; } Add_filter ( 'wp_generate_attachment_metadata', 'generate_watermarked_image');

У цій функції ми задаємо змінну $ upload_dir, яка потрібна по одній причині (в протилежність використанню wp_upload_dir () всюди в коді): без $ time WordPress може заплутатися в тому випадку, коли ми завантажуємо вкладення до статей з минулого місяця; це призводить до того, що зображення зберігаються в кількох різних папках.

Далі ми зберігаємо вихідне назва файлу і генеруємо нове за допомогою виклику функції watermark_image. Генерувати нове ім'я файлу - опціональний крок, однак мені особисто подобається додавати рядок до назви зображення, що дає мені зрозуміти, що з зображенням проводилися які-небудь маніпуляції.

Крок 3. Водяний знак за допомогою ImageMagick

Тепер ми переходимо до самої суті цього керівництва - до маніпуляцій із зображенням.

function watermark_image ($ filename, $ upload_dir) {$ original_image_path = trailingslashit ($ upload_dir [ 'path']). $ Filename; $ Image_resource = new Imagick ($ original_image_path); $ Image_resource-> blurImage (20, 10); $ Watermark_resource = new Imagick (get_stylesheet_directory (). '/Images/logo.png'); $ Image_resource-> compositeImage ($ watermark_resource, Imagick :: COMPOSITE_DEFAULT, 100, 250); return save_watermarked_image ($ image_resource, $ original_image_path); }

Спочатку ми отримуємо шлях нашого незмінного зображення, після чого створюємо новий об'єкт Imagick. Як показано в прикладі, я вирішив розмити зображення і додати логотип до нього приблизно по центру. Ви можете розташувати логотип в іншій позиції, відповідно до своїх уподобань. Як ви, можливо, помітили, логотип - це екземпляр об'єкта Imagick, і об'єднати їх дуже просто.

В даний момент зображення не збережено, воно «нудиться» в пам'яті нашого сервера і чекає, коли ми випустимо його.

Крок 4. Зберігаємо нове зображення

Тепер, коли наше зображення змінено, ми можемо зберегти його:

function save_watermarked_image ($ image_resource, $ original_image_path) {$ image_data = pathinfo ($ original_image_path); $ New_filename = $ image_data [ 'filename']. '-Watermarked.' . $ Image_data [ 'extension']; $ Watermarked_image_path = str_replace ($ image_data [ 'basename'], $ new_filename, $ original_image_path); if (! $ image_resource-> writeImage ($ watermarked_image_path)) return $ image_data [ 'basename']; unlink ($ original_image_path); return $ new_filename; }

Перші три рядки в цій функції використовуються для того, щоб отримати назву вихідного зображення (певного розміру), після чого ми просто додаємо -watermarked до його назви. Як я вже згадував вище, це необов'язково, однак якщо зображення має таке доповнення в назві, стає простіше зрозуміти, що з ними були проведені деякі коригування.

Ми обгортали ділянку збереження (writeImage) в оператор if, щоб переконатися, що зображення було коректно записано на диск - в іншому випадку ми повертаємо назва вихідного зображення.

Нарешті, ми видаляємо вихідне зображення (через unlink), оскільки воно не повинно зберігатися в базі даних. Це марна трата дискового простору.

висновок

Як ви бачите, ImageMagick спрощує додавання водяних знаків до зображень WordPress або зміна зображень (накладення розмиття і т.д.). Щоб зберегти ваш час, я додав готовий код в gist .

Джерело: codeable.io