Кастомний модуль для конвертації webp зображень в jpg для Drupal 7

Сьогодні вирішуємо таку проблему - в результаті імпорту нод через feeds завантажились зображення в форматі. Проблема полягає в тому, що для Drupal 7 практично відсутні рішення щодо того, як зробити робочими наявні заповнені поля зображень у форматі webp, а за замовченням сьома версія не виводить зображення цього формату. Заміна кожного зображення вручну виключено. Для вирішення цієї проблеми ми створюємо спеціальний модуль, який під час перебудови ноди перетворює зображення у форматі webp у формат jpg.

Створюємо теку для нашого кастомного модуля  - site/all/module/webp_to_jpg. Всередині створюємо спочатку файл webp_to_jpg.info

webp_to_jpg.infoname = WebP to JPG Converter
description = Converts WebP images to JPG on node save.
core = 7.x
package = DARTHARTH

та webp_to_jpg.module

<?php

/**
 * Implements hook_node_presave().
 */
function webp_to_jpg_node_presave($node) {
  if ($node->type == 'device') {
    $field_items = field_get_items('node', $node, 'field_image');
    if (!empty($field_items)) {
      foreach ($field_items as $index => $item) {
        $file = file_load($item['fid']);
        if (pathinfo($file->uri, PATHINFO_EXTENSION) === 'webp') {
          $converted_file = webp_to_jpg_convert($file);
          if ($converted_file) {
            $node->field_image[LANGUAGE_NONE][$index] = (array) $converted_file;
          }
        }
      }
    }
  }
}

/**
 * Converts a WebP file to a JPG file.
 * 
 * @param object $file
 *   File object to convert.
 * 
 * @return object
 *   The converted file object.
 */
function webp_to_jpg_convert($file) {
  $image = imagecreatefromwebp($file->uri);
  if ($image === FALSE) {
    return NULL;
  }

  $new_uri = preg_replace('/\.webp$/', '.jpg', $file->uri);
  imagejpeg($image, $new_uri, 100);
  imagedestroy($image);

  $file_info = image_get_info($new_uri);
  $new_file = file_save_data(file_get_contents($new_uri), $new_uri, FILE_EXISTS_REPLACE);

  return $new_file;
}

Де  'device' це тип нашої потрібної ноди, а 'field_image' назва поля з зображенням, де треба конвертувати webp.

Тепер, після перезбереження ноди всі зображення в поле field_image котри мали формат webp будуть автоматично конвертовані в формат jpg.

Простий текст

  • Не дозволено жодних HTML теґів.
  • Рядки й абзаци переносяться автоматично.
  • Адреси вебсторінок та адреси електронної пошти автоматично перетворюються у посилання.
Код мови коментаря.