Resize multiple images from a single source.
public multi_resize ( array $sizes ) : array | ||
$sizes | array | { An array of image size arrays. Default sizes are 'small', 'medium', 'medium_large', 'large'. Either a height or width must be provided. If one of the two is set to null, the resize will maintain aspect ratio according to the provided dimension. @type array $size { Array of height, width values, and whether to crop. @type int $width Image width. Optional if `$height` is specified. @type int $height Image height. Optional if `$width` is specified. @type bool $crop Optional. Whether to crop the image. Default false. } } |
return | array | An array of resized images' metadata by size. |
/** * Test multi_resize with multiple sizes * * ticket 26823 */ public function test_multi_resize() { $file = DIR_TESTDATA . '/images/waffles.jpg'; $imagick_image_editor = new WP_Image_Editor_Imagick($file); $imagick_image_editor->load(); $sizes_array = array(array('width' => 10, 'height' => 10, 'crop' => false), array('width' => 75, 'height' => 50, 'crop' => true), array('width' => 9999, 'height' => 20, 'crop' => false), array('width' => 45, 'height' => 9999, 'crop' => true), array('width' => 50), array('width' => 55, 'height' => null), array('height' => 55), array('width' => null, 'height' => 60), array('width' => -9999, 'height' => 70), array('width' => 200, 'height' => -9999)); $resized = $imagick_image_editor->multi_resize($sizes_array); $expected_array = array(array('file' => 'waffles-10x7.jpg', 'width' => 10, 'height' => 7, 'mime-type' => 'image/jpeg'), array('file' => 'waffles-75x50.jpg', 'width' => 75, 'height' => 50, 'mime-type' => 'image/jpeg'), array('file' => 'waffles-30x20.jpg', 'width' => 30, 'height' => 20, 'mime-type' => 'image/jpeg'), array('file' => 'waffles-45x400.jpg', 'width' => 45, 'height' => 400, 'mime-type' => 'image/jpeg'), array('file' => 'waffles-50x33.jpg', 'width' => 50, 'height' => 33, 'mime-type' => 'image/jpeg'), array('file' => 'waffles-55x37.jpg', 'width' => 55, 'height' => 37, 'mime-type' => 'image/jpeg'), array('file' => 'waffles-83x55.jpg', 'width' => 83, 'height' => 55, 'mime-type' => 'image/jpeg'), array('file' => 'waffles-90x60.jpg', 'width' => 90, 'height' => 60, 'mime-type' => 'image/jpeg'), array('file' => 'waffles-105x70.jpg', 'width' => 105, 'height' => 70, 'mime-type' => 'image/jpeg'), array('file' => 'waffles-200x133.jpg', 'width' => 200, 'height' => 133, 'mime-type' => 'image/jpeg')); $this->assertNotNull($resized); $this->assertEquals($expected_array, $resized); foreach ($resized as $key => $image_data) { $image_path = DIR_TESTDATA . '/images/' . $image_data['file']; // Now, verify real dimensions are as expected $this->assertImageDimensions($image_path, $expected_array[$key]['width'], $expected_array[$key]['height']); } }
/** * Test multi_resize with multiple sizes * * ticket 26823 */ public function test_multi_resize() { $file = DIR_TESTDATA . '/images/waffles.jpg'; $imagick_image_editor = new WP_Image_Editor_Imagick( $file ); $imagick_image_editor->load(); $sizes_array = array( /** * #0 - 10x10 resize, no cropping. * By aspect, should be 10x6 output. */ array( 'width' => 10, 'height' => 10, 'crop' => false, ), /** * #1 - 75x50 resize, with cropping. * Output dimensions should be 75x50 */ array( 'width' => 75, 'height' => 50, 'crop' => true, ), /** * #2 - 20 pixel max height, no cropping. * By aspect, should be 30x20 output. */ array( 'width' => 9999, # Arbitrary High Value 'height' => 20, 'crop' => false, ), /** * #3 - 45 pixel max height, with cropping. * By aspect, should be 45x400 output. */ array( 'width' => 45, 'height' => 9999, # Arbitrary High Value 'crop' => true, ), /** * #4 - 50 pixel max width, no cropping. * By aspect, should be 50x33 output. */ array( 'width' => 50, ), /** * #5 - 55 pixel max width, no cropping, null height * By aspect, should be 55x36 output. */ array( 'width' => 55, 'height' => null, ), /** * #6 - 55 pixel max height, no cropping, no width specified. * By aspect, should be 82x55 output. */ array( 'height' => 55, ), /** * #7 - 60 pixel max height, no cropping, null width. * By aspect, should be 90x60 output. */ array( 'width' => null, 'height' => 60, ), /** * #8 - 70 pixel max height, no cropping, negative width. * By aspect, should be 105x70 output. */ array( 'width' => -9999, # Arbitrary Negative Value 'height' => 70, ), /** * #9 - 200 pixel max width, no cropping, negative height. * By aspect, should be 200x133 output. */ array( 'width' => 200, 'height' => -9999, # Arbitrary Negative Value ), ); $resized = $imagick_image_editor->multi_resize( $sizes_array ); $expected_array = array( // #0 array( 'file' => 'waffles-10x6.jpg', 'width' => 10, 'height' => 6, 'mime-type' => 'image/jpeg', ), // #1 array( 'file' => 'waffles-75x50.jpg', 'width' => 75, 'height' => 50, 'mime-type' => 'image/jpeg', ), // #2 array( 'file' => 'waffles-30x20.jpg', 'width' => 30, 'height' => 20, 'mime-type' => 'image/jpeg', ), // #3 array( 'file' => 'waffles-45x400.jpg', 'width' => 45, 'height' => 400, 'mime-type' => 'image/jpeg', ), // #4 array( 'file' => 'waffles-50x33.jpg', 'width' => 50, 'height' => 33, 'mime-type' => 'image/jpeg', ), // #5 array( 'file' => 'waffles-55x36.jpg', 'width' => 55, 'height' => 36, 'mime-type' => 'image/jpeg', ), // #6 array( 'file' => 'waffles-82x55.jpg', 'width' => 82, 'height' => 55, 'mime-type' => 'image/jpeg', ), // #7 array( 'file' => 'waffles-90x60.jpg', 'width' => 90, 'height' => 60, 'mime-type' => 'image/jpeg', ), // #8 array( 'file' => 'waffles-105x70.jpg', 'width' => 105, 'height' => 70, 'mime-type' => 'image/jpeg', ), // #9 array( 'file' => 'waffles-200x133.jpg', 'width' => 200, 'height' => 133, 'mime-type' => 'image/jpeg', ), ); $this->assertNotNull( $resized ); $this->assertEquals( $expected_array, $resized ); foreach( $resized as $key => $image_data ){ $image_path = DIR_TESTDATA . '/images/' . $image_data['file']; // Now, verify real dimensions are as expected $this->assertImageDimensions( $image_path, $expected_array[$key]['width'], $expected_array[$key]['height'] ); } }