WP_Image_Editor_Imagick::load()publicWP 3.5.0

Loads image from $this->file into new Imagick Object.

Метод класса: WP_Image_Editor_Imagick{}

Хуков нет.

Возвращает

true|WP_Error. True if loaded; WP_Error on failure.

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

$WP_Image_Editor_Imagick = new WP_Image_Editor_Imagick();
$WP_Image_Editor_Imagick->load();

Список изменений

С версии 3.5.0 Введена.

Код WP_Image_Editor_Imagick::load() WP 6.6.2

public function load() {
	if ( $this->image instanceof Imagick ) {
		return true;
	}

	if ( ! is_file( $this->file ) && ! wp_is_stream( $this->file ) ) {
		return new WP_Error( 'error_loading_image', __( 'File does not exist?' ), $this->file );
	}

	/*
	 * Even though Imagick uses less PHP memory than GD, set higher limit
	 * for users that have low PHP.ini limits.
	 */
	wp_raise_memory_limit( 'image' );

	try {
		$this->image    = new Imagick();
		$file_extension = strtolower( pathinfo( $this->file, PATHINFO_EXTENSION ) );

		if ( 'pdf' === $file_extension ) {
			$pdf_loaded = $this->pdf_load_source();

			if ( is_wp_error( $pdf_loaded ) ) {
				return $pdf_loaded;
			}
		} else {
			if ( wp_is_stream( $this->file ) ) {
				// Due to reports of issues with streams with `Imagick::readImageFile()`, uses `Imagick::readImageBlob()` instead.
				$this->image->readImageBlob( file_get_contents( $this->file ), $this->file );
			} else {
				$this->image->readImage( $this->file );
			}
		}

		if ( ! $this->image->valid() ) {
			return new WP_Error( 'invalid_image', __( 'File is not an image.' ), $this->file );
		}

		// Select the first frame to handle animated images properly.
		if ( is_callable( array( $this->image, 'setIteratorIndex' ) ) ) {
			$this->image->setIteratorIndex( 0 );
		}

		if ( 'pdf' === $file_extension ) {
			$this->remove_pdf_alpha_channel();
		}

		$this->mime_type = $this->get_mime_type( $this->image->getImageFormat() );
	} catch ( Exception $e ) {
		return new WP_Error( 'invalid_image', $e->getMessage(), $this->file );
	}

	$updated_size = $this->update_size();

	if ( is_wp_error( $updated_size ) ) {
		return $updated_size;
	}

	return $this->set_quality();
}