WordPress как на ладони
wordpress jino

add_image_size() WP 2.9.0 add image size

Регистрирует новый размер миниатюр.

Регистрация означает, что WordPress, при загрузке изображения, кроме базовых размеров будет создавать еще один файл - измененную копию оригинала с указанными размерами.

Чтобы для поста можно было определить картинку миниатюру, нужно активировать эту возможность функцией - add_theme_support( 'post-thumbnails' ); в файле шаблона funсtions.php.

Используется в: set_post_thumbnail_size().

Хуков нет.

Возвращает

Ничего не возвращает.

Использование

add_image_size( $name, $width, $height, $crop );
$name(строка) (обязательный)
Название нового размера картинок.
По умолчанию: нет
$width(число) (обязательный)
Ширина миниатюры (в пикселях).
$height(число) (обязательный)
Высота миниатюры (в пикселях).
$crop(логический)

Как создавать миниатюру?

  • false - мягкое кадрирование: миниатюра создается по одной из подходящих сторон: указанной ширине или высоте. Итоговая картинка не будет точно совпадать указанным размерам;

  • true - жесткое кадрирование: миниатюра создается точно по указанным размерам. Подбирается наиболее подходящая сторона, картинка уменьшается по ней, а у противоположной стороны лишняя часть, не подходящая по пропорциям обрезается;

  • array( координата_X, координата_Y ) - указание позиции кадрирования, т.е. если указать массив (array( 'right', 'top')), то изображение будет кадрированно с указанных позиций.
    По умолчанию: false

Зарезервированные названия размеров

thumb, thumbnail, medium, large, post-thumbnail

Названия "thumb" и "thumbnail" - это алиасы (синонимы) и относятся к одинаковым файлам.

Смотрите также описание функции image_downsize().

Также вы можете установить опции создаваемой миниатюры через:

update_option('thumbnail_size_w', 160);
update_option('thumbnail_size_h', 160);
update_option('thumbnail_crop', 1);

Примеры

Добавим новые размеры миниатюр

Регистрируем новые размеры миниатюр, добавив такой код в файл шаблона functions.php:

if ( function_exists( 'add_theme_support' ) ) {
	add_theme_support( 'post-thumbnails' );
		set_post_thumbnail_size( 150, 150 ); // размер миниатюры поста по умолчанию
}

if ( function_exists( 'add_image_size' ) ) {
	add_image_size( 'category-thumb', 300, 9999 ); // 300 в ширину и без ограничения в высоту
	add_image_size( 'homepage-thumb', 220, 180, true ); // Кадрирование изображения
}

Кадрирование (crop)

#1 - false (мягкое кадрирование)

Эта строка укажет WP, что при загрузке нового файла, нужно создать его уменьшенную копию. В этом случае миниатюра будет подогнана под ширину или высоту, смотря какая из сторон подходит больше, а противоположная сторона будет уменьшена пропорционально и скорее всего не будет больше указанного размера. Например, у нас оригинал картинки 2500х1800 пикселей мы делаем миниатюру 220х180 пикселей. Картинка будет уменьшена до размеров -  250х180 px, т.е. высота будет 180, как мы и указали, однако ширина получится выше указанной 250 а не 220. В этом случае картинка не кадрируется и уменьшенная копия сохраняет пропорции полностью.

add_image_size( 'homepage-thumb', 220, 180 );

#2 - true (жесткое кадрирование)

Если установить четвертый параметр в true, то миниатюра будет уменьшена и обрезана точно под указанные размеры. Например, у нас оригинал картинки 2500х1800 пикселей мы делаем миниатюру 220х180 пикселей. Оригинал будет уменьшен до высоты 180xp (тогда ширина его как бы равна 250px), а ширина будет обрезана по краям по 15px и в итоге получим уменьшенную копию: 220х180 пикселей:

add_image_size( 'homepage-thumb', 220, 180, true ); // 220 pixels wide by 180 pixels tall, hard crop mode

#3 - уменьшение по нужной стороне

Чтобы уменьшить картинку по одной из нужных нам сторон, нужно указать противоположной стороне огромное значение. Например, у нас есть картинка 2500х1800, нам нужно получить миниатюру 500х1800, тогда указываем так:

add_image_size( 'homepage-thumb', 500, 9999 );

#4 - Array( x, y ) (жесткое кадрирование с указанием позиций)

С версии 3.9 появилась возможность указывать позицию кадрирования. Давайте добавим размер миниатюры, которая будет размером 220х220 пикселей и будет фрагментом от оригинала, который будет взят с левого верхнего угла (left, top):

add_image_size( 'custom-size', 220, 220, array( 'left', 'top' ) );

Х_позиция может быть: 'left' 'center' или 'right'.
Y_позиция может быть: 'top', 'center' или 'bottom'.

Использование новых размеров

Мы зарегистрировали 3, отличных от базовых, размера: post-thumbnailscategory-thumbhomepage-thumb. Чтобы теперь использовать эти размеры (выводить картинки в шаблоне), можно использовать следующие функции:

Избранная картинка (futured image)

Чтобы использовать новый размер при выводе картинки установленной как "Избранная картинка" поста, в файле шаблона нужно использовать функцию the_post_thumbnail():

if ( has_post_thumbnail() ) {
	the_post_thumbnail( 'category-thumb' ); // category-thumb - название размера
}

Для библиотеки картинок (админ-панель)

Чтобы добавить новый размер в выбор размеров при вставке картинки в пост, нужно использовать фильтр-хук image_size_names_choose, в котором нужно добавить размер и указать для него понятное название:

add_filter( 'image_size_names_choose', 'my_custom_sizes' );

function my_custom_sizes( $sizes ) {
	return array_merge( $sizes, array(
		'category-thumb' => 'Мой размерчик',
	) );
}
razmerchik

Для основных медиафайлов (PHP/Templates)

Также можно выводить картинки (по размерам) напрямую из библиотеки WordPress по ID картинки. Для этого используйте функцию wp_get_attachment_image():

<?php
// Подразумевается, что у вас в библиотеке есть картинка с ID 42...
echo wp_get_attachment_image( 42, 'category-thumb' );
?>

Если нам нужно получить только УРЛ картинки а не готовый тег <img>, то используйте функцию wp_get_attachment_image_src().

Плагины

  1. Regenerate Thumbnails - этот плагин позволяет создать новые размеры для каждого загруженного изображения. Полезен когда вы изменили или добавили новые размеры миниатюр (через Настройки > Медиафайлы) во время когда в библиотеке уже есть загруженные изображения. Или когда вы изменили размеры "Избранного изображения" поста.

  2. Force Regenerate Thumbnails - удаляет ранее созданные размеры и создает новые, на основе текущих установок.

  3. AJAX thumbnail rebuild - позволяет пересоздать миниатюры. Полезен, если вы использовали функцию add_image_size() когда у вас уже есть загруженные изображения. (Это медленный плагин, но при этом в нем не бывает ошибок с недостатком выделенной памяти).

  4. Simple Image Sizes - позволяет создавать новые размеры миниатюр прямо из панели "Медиафайлы". Он также умеет пересоздавать миниатюры. Он добавляет новые размеры в выбор для постов, так вы можете вставлять новые размеры в посты. Вы можете выбирать какие из размеров вы бы хотели пересоздать и для каких типов постов это нужно сделать.

Код из wp-includes/media.php WP 4.7.3

<?php
function add_image_size( $name, $width = 0, $height = 0, $crop = false ) {
	global $_wp_additional_image_sizes;

	$_wp_additional_image_sizes[ $name ] = array(
		'width'  => absint( $width ),
		'height' => absint( $height ),
		'crop'   => $crop,
	);
}

Связанные Функции

Из метки: thumbnail (image картинки-миниатюры)

add_image_size 37 комментариев
Полезные 6 Вопросы 3 Все
  • qm

    А как можно сделать, чтоб размеры появились в /wp-admin/options-media.php ?

    • campusboy1381 cайт: wp-plus.ru
      @

      Именно в список нет, но после всего контента этой странице есть в коде такое:

      <?php do_settings_sections('media'); ?>

      А это значит, что можно подключиться к хуку и добавить что-нибудь. Повторюсь, отображаться будет после всех настроек этой страницы.

  • avense4 cайт: videovegas.ru

    А можно как то узнать какие все размеры зарегистрированы и удалить их, добавив только один размер?

    1
  • Привет. WP жстко подрезает картинку не коректно. Он сначало уменьшает по высоте, а потом режет длину, но если длины не хватает то получается дырка.
    Можно ли сделать что бы он выбирал подходящую сторону и резал по ней?

    Вернее, он не растягивает ширину если ее не хватает) можно растягивать картинку?

    • Kama4192

      Насколько я знаю, WP растягивать не умеет, только режет. Попробуйте мой плагин kama_thumbnail - он растягивает...

  • campusboy1381 cайт: wp-plus.ru
    @

    thumb, thumbnail, medium, large, post-thumbnail

    Названия "thumb" и "thumbnail" - это алиасы (синонимы) и относятся к одинаковым файлам.

    Судя по the_post_thumbnail есть ещё full, алиас которого post-thumbnail, если оное не перебито функцией set_post_thumbnail_size.

    • Kama4192

      full - это полный размер, оригинал картинки - это не миниатюра.

      Вот кусок внутреннего кода:

      function _wp_get_image_size_from_meta( $size_name, $image_meta ) {
      	if ( $size_name === 'full' ) {
      		return array(
      			absint( $image_meta['width'] ),
      			absint( $image_meta['height'] ),
      		);
      	} elseif ( ! empty( $image_meta['sizes'][$size_name] ) ) {
      		return array(
      			absint( $image_meta['sizes'][$size_name]['width'] ),
      			absint( $image_meta['sizes'][$size_name]['height'] ),
      		);
      	}
      
      	return false;
      }

      Т.е. если full то берутся оригинальные размеры...

      Ну и, нет смысла добавлять в промежуточный размер оригинал...

  • reFactorPro cайт: factor.pro

    Приветствую! А как возможно сделать миниатюру адаптивной? потому что ширину поставить в 100% нельзя, чтобы она растягивалась на 100% родительского блока. Или как лучше управлять адаптивностью миниатюры? через медиа-запросы?

    1
    • Kama4192

      В любом случае ставь 100%. Чтобы для разных размеров качество было приемлемым, то можно использовать атрибуты srcset wp_get_attachment_image_srcset() и есть еще атрибут sizes wp_get_attachment_image_sizes(). В описании функций все о них написано... Разумеется, для работы этих атрибутов, нужно наличие реальных картинок...

  • Как добавить к имени файлу который сжат имя функции сжатия?

    Был файл: bolshoi_stol.jpg

    Добавили функцию

    if ( function_exists( 'add_image_size' ) ) {
    	add_image_size( 'compress-size', 1024, 1024 ); // имя любое которая подойдет под нужный случай
    	add_image_size( 'compress-size-galery', 2048, 1024 );
    }

    теперь надо, чтобы файл при загрузке получил имя:

    bolshoi_stol-compress-size-1024x600.jpg
    и
    bolshoi_stol-compress-size-galery-2048x600.jpg

    Главное чтоб добавлялось нужное имя функции к имени изображения

    2
    • campusboy1381 cайт: wp-plus.ru
      @

      Очень интересный вопрос, по ночи пытался найти ответ в коде движка, но пока тщетно. Надо не забыть вернуться к вопросу и ещё раз попытать удачи smile

      • Вопрос возник когда попытался оптимизировать галерею при загрузке больших файлов-сжимать через ширину и высоту не вариант так как яндекс и гугл маленькие картинки ложит в конец.

        Нашел частично бесплатный плагин,... короче мудрил так и ничего не получилось (перезаписывались файлы и прочее) - у плагина есть возможность выбрать категории для сжатия качества среди small, large ... и собственно созданные.

        Поставил собственно созданные размеры add_image_size( 'compress-size-galery', 2048, 1024 ); , а так как картинка имела 1000 x 1000 копия файла не была создана и плагин ничего не сжимал (оригиналы очень важны их использую по ссылке скачать, для пользователя).

        -

        Работа выполнялась бы в 2 подхода:
        Нужно было чтоб плагин сжимал всегда только 'compress-size-galery', а wordpress всегда создавал копию аригинала с именем image-compress-size-galery.jpg и уже подганял размеры пропорционально когда пропорции вылазят за установленные... КОРЧЕ К ВОПРОСУ ЕЩЕ ВЕРНУСЬ когда наберусь опыта, обычно такое происходит через 1-2 года

  • Михаил

    Здравствуйте, подскажите, возможно ли настроить жесткую обрезку так, что бы не обрезала фото, то есть таким образом, что бы добавляла белые поля, что бы изображение без потерь встроилось в заданное соотношение сторон. Спасибо.

    • т.е. нарастить по определенным сторонам? Насколько мне известно -нет.

      Ответить3 месяца назад #
      1
  • Ростислав cайт: ahimenes.ru

    Добрый день, сломал уже себе голову по поводу обрезки миниатюр. Выставляю значения в Магазин-Настройки-товар- Изображение для каталога 210*210, для товара 480*480 ставлю везде галочки "Жесткая обрезка" чтобы они были квадратными - Regenerate Thumbnails запускаю, но к сожалению ничего не происходит.

    также заметил что в папке Uploads не создаются по размерам, выставленных в настройках картинки, только тот что загружается, подскажите пожалуйста в чем может проблема и где искать ее решение, может где то есть код функции который поможет все это исправить. Заранее благодарен.

    Ответить4 месяца назад #
  • Подскажите, можно ли добавить свой кастомный размер изображения, зареганый и выведенный в админке для выбора изображения. А мне нужно для редактирования этого размера, там где Редактирование -> Параметры файла -> Настройки миниатюры -> Сейчас редактируется (Все размеры, Миниатюра, Все размеры, кроме миниатюры)?

    Ответить3 месяца назад #
    1

Здравствуйте, !

Ваш комментарий