wp_create_image_subsizes() – Creates image sub-sizes, adds the new data to the image meta `sizes` array, and updates the image metadata.

You appear to be a bot. Output may be restricted

Description

Creates image sub-sizes, adds the new data to the image meta sizes array, and updates the image metadata.

Intended for use after an image is uploaded. Saves/updates the image metadata after each sub-size is created. If there was an error, it is added to the returned image metadata array.

Usage

$array = wp_create_image_subsizes( $file, $attachment_id );

Parameters

$file
( string ) required – Full path to the image file.
$attachment_id
( int ) required – Attachment ID to process.

Returns

array The image attachment meta data.

Source

File name: wordpress/wp-admin/includes/image.php
Lines:

1 to 100 of 147
function wp_create_image_subsizes( $file, $attachment_id ) {
  $imagesize = wp_getimagesize( $file );

  if ( empty( $imagesize ) ) {
    // File is not an image.
    return array();
  }

  // Default image meta.
  $image_meta = array(
    'width'    => $imagesize[0],
    'height'   => $imagesize[1],
    'file'     => _wp_relative_upload_path( $file ),
    'filesize' => wp_filesize( $file ),
    'sizes'    => array(),
  );

  // Fetch additional metadata from EXIF/IPTC.
  $exif_meta = wp_read_image_metadata( $file );

  if ( $exif_meta ) {
    $image_meta['image_meta'] = $exif_meta;
  }

  // Do not scale (large) PNG images. May result in sub-sizes that have greater file size than the original. See #48736.
  if ( 'image/png' !== $imagesize['mime'] ) {

    
/**
 * Filters the "BIG image" threshold value.
 *
 * If the original image width or height is above the threshold, it will be scaled down. The threshold is
 * used as max width and max height. The scaled down image will be used as the largest available size, including
 * the `_wp_attached_file` post meta value.
 *
 * Returning `false` from the filter callback will disable the scaling.
 *
 * @since 5.3.0
 *
 * @param int    $threshold     The threshold value in pixels. Default 2560.
 * @param array  $imagesize     {
 *     Indexed array of the image width and height in pixels.
 *
 *     @type int $0 The image width.
 *     @type int $1 The image height.
 * }
 * @param string $file          Full path to the uploaded image file.
 * @param int    $attachment_id Attachment post ID.
 */
    $threshold = (int) apply_filters( 'big_image_size_threshold', 2560, $imagesize, $file, $attachment_id );

    /*
		 * If the original image's dimensions are over the threshold,
		 * scale the image and use it as the "full" size.
		 */
    if ( $threshold && ( $image_meta['width'] > $threshold || $image_meta['height'] > $threshold ) ) {
      $editor = wp_get_image_editor( $file );

      if ( is_wp_error( $editor ) ) {
        // This image cannot be edited.
        return $image_meta;
      }

      // Resize the image.
      $resized = $editor->resize( $threshold, $threshold );
      $rotated = null;

      // If there is EXIF data, rotate according to EXIF Orientation.
      if ( ! is_wp_error( $resized ) && is_array( $exif_meta ) ) {
        $resized = $editor->maybe_exif_rotate();
        $rotated = $resized;
      }

      if ( ! is_wp_error( $resized ) ) {
        /*
				 * Append "-scaled" to the image file name. It will look like "my_image-scaled.jpg".
				 * This doesn't affect the sub-sizes names as they are generated from the original image (for best quality).
				 */
        $saved = $editor->save( $editor->generate_filename( 'scaled' ) );

        if ( ! is_wp_error( $saved ) ) {
          $image_meta = _wp_image_meta_replace_original( $saved, $file, $image_meta, $attachment_id );

          // If the image was rotated update the stored EXIF data.
          if ( true === $rotated && ! empty( $image_meta['image_meta']['orientation'] ) ) {
            $image_meta['image_meta']['orientation'] = 1;
          }
        } else {
          // TODO: Log errors.
        }
      } else {
        // TODO: Log errors.
      }
    } elseif ( ! empty( $exif_meta['orientation'] ) && 1 !== (int) $exif_meta['orientation'] ) {
      // Rotate the whole original image if there is EXIF data and "orientation" is not 1.

      $editor = wp_get_image_editor( $file );

      if ( is_wp_error( $editor ) ) {
        // This image cannot be edited.
        return $image_meta;
 

 View on GitHub View on Trac