Intereting Posts
Изменение адреса электронной почты «От» Как редактировать почтовые метаданные в блоге WordPress? Связь с двумя настраиваемыми типами сообщений Отдельные сообщения и пользовательский тип сообщения в шаблоне архива пользовательской таксономии Перевод плагина wordpress Как изменить тег на основе значения метабокса в $ wp_query Я испортил функциональность поиска admin. Помогите! Элементы панели управления все перестали работать Выйти из корневой папки wp из функции function.php, используя абсолютный путь после проверки флажка в бэкэнд, не показывать социальную ссылку на frontend Идентификатор сообщения вместо заголовка как исключить сохранение в теме клипера wordpress code php set_post_format, вызванный после wp_update_post при использовании массового редактирования? Динамический виджет WordPress по местоположению? Список всех сообщений из разных пользовательских типов сообщений для зарегистрированного пользователя

Установите сжатие JPEG для определенных размеров пользовательских изображений

Я использую различные размеры пользовательских изображений (по add_image_size ), и я установил сжатие JPEG на 30% с помощью этого фильтра:

 function jpeg_quality_callback($arg) { return (int)30; } add_filter('jpeg_quality', 'jpeg_quality_callback'); 

Если я не ошибаюсь, приведенный выше код сжимает все мои собственные размеры изображений с 30%. Теперь, для двух моих пользовательских размеров изображения с именем splash1 и splash2 , я хочу установить сжатие на 80%. Как это возможно?

Или, альтернативно, исключить эти размеры изображений из 30% фильтра сжатия.

Функция 'jpeg_quality' фильтрации фильтра принимает два аргумента: $jpeg_quality и $function которая является функцией из крючка фильтра, image_resize и могут быть либо image_resize либо wp_crop_image . Таким образом, нет способа выборочно установить качество изображений .jpeg соответствии с размером изображения из этой функции фильтра фильтра.

Тем не менее, вы по-прежнему можете подключиться к более позднему шагу действия при загрузке вложений и настроить качество изображения .jpeg для загруженных изображений в этот момент в соответствии с их конкретным размером в соответствии с вашими потребностями. Сначала установите для jpeg_quality максимальный размер, чтобы сохранить исходное качество изображения, затем подключите к added_post_meta action hook (который уволен в конце вставки метаданных вложения) для настройки качества, как показано ниже:

 // set the quality to maximum add_filter('jpeg_quality', create_function('$quality', 'return 100;')); add_action('added_post_meta', 'ad_update_jpeg_quality', 10, 4); function ad_update_jpeg_quality($meta_id, $attach_id, $meta_key, $attach_meta) { if ($meta_key == '_wp_attachment_metadata') { $post = get_post($attach_id); if ($post->post_mime_type == 'image/jpeg' && is_array($attach_meta['sizes'])) { $pathinfo = pathinfo($attach_meta['file']); $uploads = wp_upload_dir(); $dir = $uploads['basedir'] . '/' . $pathinfo['dirname']; foreach ($attach_meta['sizes'] as $size => $value) { $image = $dir . '/' . $value['file']; $resource = imagecreatefromjpeg($image); if ($size == 'spalsh') { // set the jpeg quality for 'spalsh' size imagejpeg($resource, $image, 100); } elseif ($size == 'spalsh1') { // set the jpeg quality for the 'splash1' size imagejpeg($resource, $image, 30); } else { // set the jpeg quality for the rest of sizes imagejpeg($resource, $image, 10); } // or you can skip a paticular image size // and set the quality for the rest: // if ($size == 'splash') continue; imagedestroy($resource); } } } } 

Вышеприведенный код влияет только на недавно загруженные изображения. Если вы хотите обновить качество ранее загруженных изображений, вы можете использовать register_activation_hook плагинов. Создайте новый php-файл в каталоге wp-content/plugins и назовите его как хотите (например, update-jpeg-quality.php ) и добавьте к нему следующий код:

 <?php /* Plugin Name: Update JPEG Quality Plugin URI: http://wordpress.stackexchange.com/questions/74103/set-jpeg-compression-for-specific-custom-image-sizes Description: This plugin will change the jpeg image quality according to its size. Author: Ahmad M Version: 1.0 Author URI: http://wordpress.stackexchange.com/users/12961/ahmad-m */ register_activation_hook(__FILE__, 'ad_modify_jpeg_quality'); function ad_modify_jpeg_quality() { $attachments = get_posts(array( 'numberposts' => -1, 'post_type' => 'attachment', 'post_mime_type' => 'image/jpeg' )); if (empty($attachments)) return; $uploads = wp_upload_dir(); foreach ($attachments as $attachment) { $attach_meta = wp_get_attachment_metadata($attachment->ID); if (!is_array($attach_meta['sizes'])) break; $pathinfo = pathinfo($attach_meta['file']); $dir = $uploads['basedir'] . '/' . $pathinfo['dirname']; foreach ($attach_meta['sizes'] as $size => $value) { $image = $dir . '/' . $value['file']; $resource = imagecreatefromjpeg($image); if ($size == 'spalsh') { // set the jpeg quality for 'spalsh' size imagejpeg($resource, $image, 100); } elseif ($size == 'spalsh1') { // set the jpeg quality for the 'splash1' size imagejpeg($resource, $image, 30); } else { // set the jpeg quality for the rest of sizes imagejpeg($resource, $image, 10); } imagedestroy($resource); } } } ?> 

Теперь перейдите на страницу «Плагины» и нажмите « Update JPEG Quality плагин Update JPEG Quality . Это будет охватывать все ваши ранее загруженные изображения .jpeg и корректировать их качество в соответствии со значениями и условиями, указанными в плагине. Затем вы можете безопасно отключить и удалить этот плагин. Перед испытанием в тестовой среде перед применением на производственную площадку проведите тестирование .