image_downsize() WP 2.5.0

Отримує масив даних картинки вказаного розміру: УРЛ, ширина та висота картинки-вкладення.

Ця функція є ядром для wp_get_attachment_image_src() . Тільки їй не можна надіслати третій параметр $icon. Вона отримує УРЛ та розміри саме вкладення, яке є картинкою.

Отримує УРЛ оригінальної картинки або її зменшеної копії. Функція не створює зменшену копію картинки, а лише отримує УРЛ готової зменшеної картинки, що найбільше підходить під зазначені розміри. Якщо вказані довільні розміри в масиві, підбирає відповідну картинку та пропорційні їй розміри. Див. Приклади.

Працює на основі:
wp_get_attachment_url() ,
image_get_intermediate_size()
1 раз – 0.001024 сек
(дуже повільно) | 50000 разів – 6.16 сек
(швидко) |
PHP 7.0.8, WP 4.6

Хуки з функції

Повертає

Массив|false. Масив з даними про картинку або false, якщо не вдалося отримати картинку.

Масив повертається до наступного формату:

array(
	[0] => url // УРЛ картинки
	[1] => width // ширина картинки
	[2] => height // Висота картинки
	[3] => true // true, якщо отримано УРЛ зменшеної копії картинки, а чи не оригіналу
)

Використання

image_downsize($id, $size);
$id
(число) (обов’язковий)
ID вкладення-картинки, дані якої потрібно отримати.
$size
(рядок)

Розмір картинки, дані про яку потрібно отримати. Відрізнятиметься посилання. У цьому параметрі можна вказувати зареєстровані WP розміри, за промовчанням це:

  • thumbnail– Мініатюра (зазвичай 150х150) кадрована.
  • medium– Середній розмір, не кадрований. (За замовчуванням).
  • large– Великий розмір, не кадрований.
  • full– Оригінал картинки. Якщо створена “scaled” картинка , то буде отримана вона.

array( 32, 32 )— також можна вказати розмір у масиві у вигляді двох значень (ширина, висота). У цьому випадку буде підібрано найбільш відповідний розмір з наявних, потім картинка буде стиснута/розтягнута до вказаних розмірів.

З версії 2.5. цей параметр не впливає на розмір медіа іконок (іконок для файлів), вони завжди відображаються в оригінальному розмірі.

За замовчуванням: ‘medium’

Приклади

0

#1 Функція отримання УРЛ зображення середнього розміру

Давайте напишемо аналогічну функцію, яка буде отримувати середній (medium) розмір картинки-вкладення, ID якої ми вкажемо в параметрі $id:

function wp_get_attachment_medium_url( $id ){
	$medium_array = image_downsize($id, 'medium');
	$medium_path = $medium_array[0];

	return $medium_path;
}
0

#2 Як працює функція

Припустимо, у нас є вкладення з ID 55 – це картинка: http://wp-kama.ru/wp-content/uploads/2014/02/wix.png з розмірами 500х258 пікселів. У налаштуваннях медіафайлів у нас стоять розміри для картинок: 80х80, 300х300, 1000х1000. Значить, при завантаженні цієї картинки ВП створив 2 зменшені копії: 80х80, 300х300.

Тепер дивіться, що отримуватиме функція при вказанні різних розмірів:

$img = image_downsize(55, 'full');
/*
Array
(
	[0] => http://wp-kama.ru/wp-content/uploads/2014/02/wix.png
	[1] => 500
	[2] => 258
	[3] =>
)
*/

$img = image_downsize(55, 'thumbnail');
/*
Array
(
	[0] => http://wp-kama.ru/wp-content/uploads/2014/02/wix-80x80.png
	[1] => 80
	[2] => 80
	[3] => 1
)
*/

$img = image_downsize(55);
/*
Array
(
	[0] => http://wp-kama.ru/wp-content/uploads/2014/02/wix-300x258.png
	[1] => 300
	[2] => 258
	[3] => 1
)
*/

$img = image_downsize(55, array(100, 90));
/*
Array
(
	[0] => http://wp-kama.ru/wp-content/uploads/2014/02/wix.png
	[1] => 100
	[2] => 51
	[3] =>
)
*/

$img = image_downsize(55, array(100, 80));
/*
Array
(
	[0] => http://wp-kama.ru/wp-content/uploads/2014/02/wix-80x80.png
	[1] => 80
	[2] => 80
	[3] => 1
)
*/

список змін

З версії 2.5.0Введено.

Код image_downsize() WP 6.0.2

function image_downsize( $id, $size = 'medium' ) {
	$is_image = wp_attachment_is_image($id);

	/**
	 * Filters whether to preempt the output of image_downsize().
	 *
	 * Returning a truthy value from the filter will effectively short-circuit
	 * down-sizing the image, returning that value instead.
	 *
	 * @ Since 2.5.0
	 *
	 * @param bool|array $downsize Whether to short-circuit the image downsize.
	 * @param int $id Attachment ID для зображення.
	 * @param string|int[] $size Requested image size. Can be any registered image size name, or
	 * an array of width and height values ​​in pixels (in that order).
	 */
	$out = apply_filters('image_downsize', false, $id, $size);

	if ($out) {
		return $out;
	}

	$img_url = wp_get_attachment_url($id);
	$meta = wp_get_attachment_metadata($id);
	$ width = 0;
	$ height = 0;
	$is_intermediate = false;
	$img_url_basename = wp_basename( $img_url );

	// Якщо файл isn't an image, attempt to replace його URL з rendered image from its meta.
	/ / Інші, а не-зображення типу можна перевірити.
	if (! $is_image) {
		if ( ! empty( $meta['sizes']['full'] ) ) {
			$img_url = str_replace( $img_url_basename, $meta['sizes']['full']['file'], $img_url );
			$img_url_basename = $meta['sizes']['full']['file'];
			$width = $meta['sizes']['full']['width'];
			$height = $meta['sizes']['full']['height'];
		} else {
			return false;
		}
	}

	// Try for a new style intermediate size.
	$intermediate = image_get_intermediate_size($id, $size);

	if ($intermediate) {
		$img_url = str_replace( $img_url_basename, $intermediate['file'], $img_url );
		$width = $intermediate['width'];
		$height = $intermediate['height'];
		$is_intermediate = true;
	} elseif ( 'thumbnail' === $size ) {
		// Fall back to the old thumbnail.
		$thumb_file = wp_get_attachment_thumb_file($id);
		$ info = null;

		if ( $thumb_file ) {
			$ info = wp_getimagesize ($ thumb_file);
		}

		if ( $thumb_file && $info ) {
			$img_url = str_replace( $img_url_basename, wp_basename( $thumb_file ), $img_url );
			$ width = $ info [0];
			$height = $ info[1];
			$is_intermediate = true;
		}
	}

	if ( ! $width && ! $height && isset( $meta['width'], $meta['height'] ) ) {
		/ / Будь-який інший тип: use the real image.
		$width = $meta['width'];
		$height = $meta['height'];
	}

	if ($img_url) {
		// Ми маємо поточний image size, але м'ята потребує подальшого позбавити його, якщо content_width is narrower.
		list($width, $height) = image_constrain_size_for_editor($width, $height, $size);

		return array($img_url, $width, $height, $is_intermediate);
	}

	return false;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *