Кастомний модуль для конвертації 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.