image_resize_dimensions() - WordPress 函数参考中文文档

返回介绍

image_resize_dimensions()

发布于 2017-09-11 字数5489 浏览 914 评论 0

image_resize_dimensions( int $orig_w,  int $orig_h,  int $dest_w,  int $dest_h,  bool|array $crop = false )

Retrieves calculated resize dimensions for use in WP_Image_Editor.


描述

Calculates dimensions and coordinates for a resized image that fits within a specified width and height.

Cropping behavior is dependent on the value of $crop:

  1. If false (default), images will not be cropped.
  2. If an array in the form of array( x_crop_position, y_crop_position ):
    • x_crop_position accepts ‘left’ ‘center’, or ‘right’.
    • y_crop_position accepts ‘top’, ‘center’, or ‘bottom’. Images will be cropped to the specified dimensions within the defined crop area.
  3. If true, images will be cropped to the specified dimensions using center positions.

参数

$orig_w

(int)
(Required)
Original width in pixels.

$orig_h

(int)
(Required)
Original height in pixels.

$dest_w

(int)
(Required)
New width in pixels.

$dest_h

(int)
(Required)
New height in pixels.

$crop

(bool|array)
(Optional)
Whether to crop image to specified width and height or resize. An array can specify positioning of the crop area.

Default value: false


返回值

(false|array) False on failure. Returned array matches parameters for imagecopyresampled().


源代码

File: wp-includes/media.php

function image_resize_dimensions( $orig_w, $orig_h, $dest_w, $dest_h, $crop = false ) {

	if ($orig_w <= 0 || $orig_h <= 0)
		return false;
	// at least one of dest_w or dest_h must be specific
	if ($dest_w <= 0 && $dest_h <= 0)
		return false;

	/**
	 * Filters whether to preempt calculating the image resize dimensions.
	 *
	 * Passing a non-null value to the filter will effectively short-circuit
	 * image_resize_dimensions(), returning that value instead.
	 *
	 * @since 3.4.0
	 *
	 * @param null|mixed $null   Whether to preempt output of the resize dimensions.
	 * @param int        $orig_w Original width in pixels.
	 * @param int        $orig_h Original height in pixels.
	 * @param int        $dest_w New width in pixels.
	 * @param int        $dest_h New height in pixels.
	 * @param bool|array $crop   Whether to crop image to specified width and height or resize.
	 *                           An array can specify positioning of the crop area. Default false.
	 */
	$output = apply_filters( 'image_resize_dimensions', null, $orig_w, $orig_h, $dest_w, $dest_h, $crop );
	if ( null !== $output )
		return $output;

	if ( $crop ) {
		// crop the largest possible portion of the original image that we can size to $dest_w x $dest_h
		$aspect_ratio = $orig_w / $orig_h;
		$new_w = min($dest_w, $orig_w);
		$new_h = min($dest_h, $orig_h);

		if ( ! $new_w ) {
			$new_w = (int) round( $new_h * $aspect_ratio );
		}

		if ( ! $new_h ) {
			$new_h = (int) round( $new_w / $aspect_ratio );
		}

		$size_ratio = max($new_w / $orig_w, $new_h / $orig_h);

		$crop_w = round($new_w / $size_ratio);
		$crop_h = round($new_h / $size_ratio);

		if ( ! is_array( $crop ) || count( $crop ) !== 2 ) {
			$crop = array( 'center', 'center' );
		}

		list( $x, $y ) = $crop;

		if ( 'left' === $x ) {
			$s_x = 0;
		} elseif ( 'right' === $x ) {
			$s_x = $orig_w - $crop_w;
		} else {
			$s_x = floor( ( $orig_w - $crop_w ) / 2 );
		}

		if ( 'top' === $y ) {
			$s_y = 0;
		} elseif ( 'bottom' === $y ) {
			$s_y = $orig_h - $crop_h;
		} else {
			$s_y = floor( ( $orig_h - $crop_h ) / 2 );
		}
	} else {
		// don't crop, just resize using $dest_w x $dest_h as a maximum bounding box
		$crop_w = $orig_w;
		$crop_h = $orig_h;

		$s_x = 0;
		$s_y = 0;

		list( $new_w, $new_h ) = wp_constrain_dimensions( $orig_w, $orig_h, $dest_w, $dest_h );
	}

	// if the resulting image would be the same size or larger we don't want to resize it
	if ( $new_w >= $orig_w && $new_h >= $orig_h && $dest_w != $orig_w && $dest_h != $orig_h ) {
		return false;
	}

	// the return array matches the parameters to imagecopyresampled()
	// int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h
	return array( 0, 0, (int) $s_x, (int) $s_y, (int) $new_w, (int) $new_h, (int) $crop_w, (int) $crop_h );

}

更新日志

Version 描述
2.5.0 Introduced.

相关函数

Uses

  • wp-includes/plugin.php:
    apply_filters()
  • wp-includes/media.php:
    wp_constrain_dimensions()
  • wp-includes/media.php:
    image_resize_dimensions

Used By

  • wp-includes/class-wp-image-editor-imagick.php:
    WP_Image_Editor_Imagick::resize()
  • wp-includes/class-wp-image-editor-gd.php:
    WP_Image_Editor_GD::_resize()

User Contributed Notes

上一篇:image_resize()

下一篇:WP_Image_Editor

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

目前还没有任何评论,快来抢沙发吧!