image_resize_dimensions()
Получает размеры и координаты для изменения размера изображения так, чтобы оно поместилось в заданную ширину и высоту.
Используется при создании уменьшенных копий изображений. Функция рассчитывает, какую часть исходного изображения нужно взять и до какого размера её уменьшить или обрезать.
Если обрезка отключена, изображение масштабируется с сохранением пропорций. Если обрезка включена, изображение подгоняется под заданный размер и лишняя часть отсекается.
Функция не изменяет файл изображения сама по себе. Она только рассчитывает координаты и размеры, которые потом могут использоваться при ресайзе изображения.
Если новый размер больше исходного изображения, функция обычно вернёт false, чтобы не создавать увеличенную копию.
Хуки из функции
Возвращает
Массив|false.
array— массив с размерами и координатами в формате, подходящем дляimagecopyresampled():[dst_x, dst_y, src_x, src_y, dst_w, dst_h, src_w, src_h].false— если исходные размеры некорректны, не указан новый размер, новый размер больше исходного или новый размер практически совпадает с исходным.
Использование
image_resize_dimensions( $orig_w, $orig_h, $dest_w, $dest_h, $crop );
- $orig_w(int) (обязательный)
- Ширина исходного изображения в пикселях.
- $orig_h(int) (обязательный)
- Высота исходного изображения в пикселях.
- $dest_w(int) (обязательный)
- Новая ширина изображения в пикселях. Можно передать
0, если размер нужно рассчитать по высоте. - $dest_h(int) (обязательный)
- Новая высота изображения в пикселях. Можно передать
0, если размер нужно рассчитать по ширине. - $crop(bool|array)
Определяет, нужно ли обрезать изображение.
Если
false, изображение масштабируется с сохранением пропорций.Если
true, изображение обрезается по центру.Если передать массив, можно указать позицию обрезки:
первое значение для оси X (left,center,right),
второе — для оси Y (top,center,bottom).По умолчанию:
false
Примеры
#1 Получение размеров для обычного масштабирования
Изображение будет уменьшено так, чтобы поместиться в область 300x300 без обрезки.
$dimensions = image_resize_dimensions( 1200, 800, 300, 300 );
if ( false !== $dimensions ) {
list( $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h ) = $dimensions;
echo 'Новый размер: ' . $dst_w . 'x' . $dst_h;
} #2 Получение размеров для обрезки по центру
Изображение будет обрезано и подогнано под размер 300x300.
$dimensions = image_resize_dimensions( 1200, 800, 300, 300, true );
if ( false !== $dimensions ) {
list( $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h ) = $dimensions;
echo 'Обрезка начинается с точки: ' . $src_x . 'x' . $src_y;
} #3 Обрезка изображения от верхнего левого угла
Можно указать, откуда брать область изображения для обрезки.
$dimensions = image_resize_dimensions( 1200, 800, 300, 300, [ 'left', 'top' ] );
if ( false !== $dimensions ) {
list( $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h ) = $dimensions;
echo 'Источник: ' . $src_x . 'x' . $src_y;
} #4 Изменение результата через фильтр
Фильтр image_resize_dimensions позволяет полностью заменить стандартный расчёт размеров.
add_filter( 'image_resize_dimensions', 'my_image_resize_dimensions', 10, 6 );
function my_image_resize_dimensions( $output, $orig_w, $orig_h, $dest_w, $dest_h, $crop ) {
if ( 300 === $dest_w && 300 === $dest_h ) {
return [ 0, 0, 0, 0, 300, 300, min( 300, $orig_w ), min( 300, $orig_h ) ];
}
return $output;
}
Список изменений
| С версии 2.5.0 | Введена. |