
Как то давно, искал: как сделать поддержку анимированных миниатюр wordpress. Искал различные плагины, коды, и все что я нашел, это плагин ImageMagick Engine, который и в самом деле генерировал анимированные миниатюры, но не так как мне было нужно — генерация происходил ужасно долго, на изображения разрешением 1000х1000 — генерация происходила по 5 минут, к тому же, миниатюры получались кривыми, с всяческими искажениями — артефактами(возможно это было из за нехватки оперативной памяти).
В тот момент, я не разбирался не в php, не в функциях wordpress. Но как только, я научился php программированию и начал постигать путь wp, я подумал, что сам смогу исправить этот недостаток wp.
ШАГ 1: Class для генерации миниатюр
После не очень долгого поиска по просторам интернета, я наткнулся на class под названием «GIF_eXG«, этот класс полностью разработан на библиотеке GD — библиотека, которая по умолчанию ставится почти на все сервера с поддержкой php, так сказать, этот класс подходит для всех, ведь не на всех серверах стоит ImageMagick библиотека.
Так же хочется предупредить, что библиотека GD немного глючная и иногда, на некоторых изображениях, в некоторых кадрах, gif анимаций будут появляться артефакты — это норма и с этим нечего не поделать. Но глюки с изображениями появляются очень редко, где то 1 из 20 изображений будет немного глючное(это как повезет).
Здесь вы можете скачать «GIF_eXG«: class-frm-gif-thumbnail.
Загружаем скаченный вами файл на ваш сайт, в директорию /wp-admin/includes/. Если вы скачали файл с оригинального источника, то переименуйте файл, в class-frm-gif-thumbnail.php, в конечном итоге у вас должно получится следующие: /wp-admin/includes/class-frm-gif-thumbnail.php
ШАГ 2: Кодим в /wp-admin/includes/image.php
Теперь, все что осталось, это открыть файл /wp-admin/includes/image.php и заменить следующий код, нашим.
Заменяем:
1 2 3 |
$editor = wp_get_image_editor( $file ); if ( ! is_wp_error( $editor ) ) $metadata['sizes'] = $editor->multi_resize( $sizes ); |
на:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
$isize=getimagesize( $file ); if($isize['mime']=='image/gif'){ $upload_dir=strtr($file, array('.gif'=>'')); $path_parts = pathinfo($file); require (ABSPATH."wp-admin/includes/class-frm-gif-thumbnail.php"); $nGif = new GIF_eXG($file,0); foreach($sizes as $k=>$s){ if($s['width']>=$metadata['width'] and $s['height']>=$metadata['height']){}else{ if($s['width']==0 || $s['height']==0){}else{ if($metadata['width']>=$metadata['height']){ $heightgif=floor($metadata['height']/($metadata['width']/$s['width'])); $widthgif=$s['width']; }else{ $widthgif=floor($metadata['width']/($metadata['height']/$s['height'])); $heightgif=$s['height']; } $namethumb=$upload_dir.'-'.$widthgif.'x'.$heightgif.'.gif'; $nGif->resize($namethumb,$s['width'],$s['height'],1,0); $metadata['sizes'][$k] = array('file'=>$path_parts['filename'].'-'.$widthgif.'x'.$heightgif.'.gif', 'width'=>$widthgif, 'height'=>$heightgif, 'mime-type'=>$isize['mime']); }}} }else{ $editor = wp_get_image_editor( $file ); if ( ! is_wp_error( $editor ) ) $metadata['sizes'] = $editor->multi_resize( $sizes ); } |
Настройка
Теперь некоторая настройка для оптимизации изображений.
1 |
$nGif = new GIF_eXG($file,0); |
— цифра(в данном случае — 0) — отвечает за оптимизацию структуры, если будет стаять цифра 1, то файл будет более компактен, если стоит цифра 0, то сохранится вся исходная структура.
1 |
$nGif->resize($namethumb,$s['width'],$s['height'],1,0); |
— первая цифра означает — соблюдать ли симметрию (1) или нет (0).
— вторая цифра означает — интерполировать пиксели (1) или нет (0). При интерполяции, изображение будет выглядеть более сглаженным — красивше в общем, других изменений я не заметил.
Примечание:
GIF миниатюры генерируются абсолютно так же, как и остальные png, jpeg и т.д. изображения.
Т.е., если в админ панели, в параметрах медиафайлов, поставить размеры по нулям пикселей (0px), то миниатюра генерироваться не будет.
Так же, если оригинальное изображение меньше или равно установленной миниатюре, то новая миниатюра генерироваться не будет — будет использовано оригинальное изображение.
Теперь на вашем блоге или сайте, будут доступны анимированные миниатюры.
Надеюсь вам понравилась эта статья, и Вы в какой то степени счастливы, от того, что наконец нашли как сделать поддержку анимированных миниатюр в wordpress 🙂