diff --git a/core/modules/image/src/Normalizer/ImageItemNormalizer.php b/core/modules/image/src/Normalizer/ImageItemNormalizer.php index 6bad572..d661a41 100644 --- a/core/modules/image/src/Normalizer/ImageItemNormalizer.php +++ b/core/modules/image/src/Normalizer/ImageItemNormalizer.php @@ -64,7 +64,13 @@ public function normalize($object, $format = NULL, array $context = array()) { $styles = ImageStyle::loadMultiple(); $data['image_styles'] = []; foreach ($styles as $id => $style) { - $data['image_styles'][$id] = file_url_transform_relative($style->buildUrl($uri)); + $dimensions = ['width' => $data['width'], 'height' => $data['height']]; + $style->transformDimensions($dimensions, $uri); + $data['image_styles'][$id] = [ + 'url' => file_url_transform_relative($style->buildUrl($uri)), + 'height' => empty($dimensions['height']) ? NULL : $dimensions['height'], + 'width' => empty($dimensions['width']) ? NULL : $dimensions['width'], + ]; $this->bubble($style); } return $data; diff --git a/core/modules/image/tests/src/Kernel/Normalizer/ImageItemNormalizerTest.php b/core/modules/image/tests/src/Kernel/Normalizer/ImageItemNormalizerTest.php index ee9fcf0..06f32f0 100644 --- a/core/modules/image/tests/src/Kernel/Normalizer/ImageItemNormalizerTest.php +++ b/core/modules/image/tests/src/Kernel/Normalizer/ImageItemNormalizerTest.php @@ -68,6 +68,17 @@ protected function setUp() { ], ])->save(); + // Change all images style scale effect to upscale. + /** @var \Drupal\image\Entity\ImageStyle $image_style */ + foreach (ImageStyle::loadMultiple() as $image_style) { + foreach ($image_style->getEffects() as $effect) { + $config = $effect->getConfiguration(); + $config['data']['upscale'] = TRUE; + $effect->setConfiguration($config); + } + $image_style->save(); + } + file_unmanaged_copy(\Drupal::root() . '/core/misc/druplicon.png', 'public://example.jpg'); $this->image = File::create([ 'uri' => 'public://example.jpg', @@ -105,9 +116,24 @@ public function testNormalize() { $expected_image_style_keys = ['large', 'medium', 'thumbnail']; $this->assertEquals($cacheability, $context->pop()); $this->assertEquals($expected_image_style_keys, $image_style_ids); - - foreach ($data['image_test'][0]['image_styles'] as $id => $url) { - $this->assertNotEmpty(strstr($url, "files/styles/$id/public/example.jpg")); + $expect_dimensions = [ + 'large' => [ + 'width' => '422', + 'height' => '480', + ], + 'medium' => [ + 'width' => '194', + 'height' => '220', + ], + 'thumbnail' => [ + 'width' => '88', + 'height' => '100', + ], + ]; + foreach ($data['image_test'][0]['image_styles'] as $id => $img_info) { + $this->assertNotEmpty(strstr($img_info['url'], "files/styles/$id/public/example.jpg")); + $this->assertEquals($expect_dimensions[$id]['height'], $img_info['height'], "Style $id matches height."); + $this->assertEquals($expect_dimensions[$id]['width'], $img_info['width'], "Style $id matches width."); } }