Функция темы WordPress для сжатия и скрытой загрузки изображений в формат WebP с помощью ImagickPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Функция темы WordPress для сжатия и скрытой загрузки изображений в формат WebP с помощью Imagick

Сообщение Anonymous »

Я написал этот код функции для сжатия и преобразования загружаемых изображений в формат WebP с помощью Imagick, добавления их в медиатеку и удаления исходного формата загружаемого файла.
Я написал это функция в функциях темы WordPress (functions.php):

Код: Выделить всё

/*
* Compress and convert to WebP for uploading images
*/
function compress_and_convert_images_to_webp($file) {
// Check if file type is supported
$supported_types = ['image/jpeg', 'image/jpg', 'image/png'];
if (!in_array($file['type'], $supported_types)) {
return $file;
}

// Get the path to the upload directory
$wp_upload_dir = wp_upload_dir();

// Set up the file paths
$old_file_path = $file['file'];
$file_name = basename($file['file']);
$webp_file_path = $wp_upload_dir['path'] . '/' . pathinfo($file_name, PATHINFO_FILENAME) . '.webp';

// Check if file is already a WebP image
if (pathinfo($old_file_path, PATHINFO_EXTENSION) === 'webp') {
return $file;
}

// Load the image using Imagick
$image = new Imagick($old_file_path);

// Compress the image
$quality = 75; // Adjust this value to control the compression level
$image->setImageCompressionQuality($quality);
$image->stripImage(); // Remove all profiles and comments to reduce file size

// Convert the image to WebP
$image->setImageFormat('webp');
$image->setOption('webp:lossless', 'false');
$image->setOption('webp:method', '6'); // Adjust this value to control the compression level for WebP
$image->writeImage($webp_file_path);

// Allow WebP mime type
add_filter('upload_mimes', function($mimes) {
$mimes['webp'] = 'image/webp';
return $mimes;
});

// Set file permissions to 0644
chmod($webp_file_path, 0644);

// Add the new WebP image to the media library
$attachment_id = media_handle_upload(pathinfo($file_name, PATHINFO_FILENAME), 0, [
'post_mime_type' => 'image/webp',
'file' => $webp_file_path
]);

if (is_wp_error($attachment_id)) {
error_log("The Attachment ID Error is: " . $attachment_id->get_error_message());
}

// Delete the old image file
unlink($old_file_path);

// Update the attachment metadata with the WebP image URL
update_post_meta($attachment_id, '_wp_attached_file', substr($webp_file_path, strlen($wp_upload_dir['basedir']) + 1));

// Return the updated file information
return [
'file' => $webp_file_path,
'url' => wp_get_attachment_url($attachment_id),
'type' => 'image/webp',
];
}
add_filter('wp_handle_upload', 'compress_and_convert_images_to_webp');
Этот код работает нормально, сжимает и конвертирует загружаемые файлы изображений, показывает их в медиатеке и удаляет загружаемый исходный формат, но выдает предупреждения каждый раз, когда я загружаю новый файл.
Я искал предупреждения, и они касаются проблемы с переменной «$attachment_id»:
как вы можете видеть, эта переменная использует функцию «media_handle_upload» для получения нового идентификатора вложения, но он возвращает следующую ошибку (объект WP_ERROR):
"Проверка загрузки указанного файла не удалась".
предупреждающие сообщения:

Код: Выделить всё

PHP Warning:  Trying to access array offset on value of type null in wp-admin/includes/file.php on line 906

PHP Deprecated:  is_uploaded_file(): Passing null to parameter #1 ($filename) of type string is deprecated in wp-admin/includes/file.php on line 906

PHP Warning:  Object of class WP_Error could not be converted to int in wp-includes/post.php on line 6590
Что мне делать?

Подробнее здесь: https://stackoverflow.com/questions/761 ... ebp-format
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»