diff --git a/src/Plugin/ImageEffect/SetCanvasImageEffect.php b/src/Plugin/ImageEffect/SetCanvasImageEffect.php
index dc1e42b..a6dc24e 100644
--- a/src/Plugin/ImageEffect/SetCanvasImageEffect.php
+++ b/src/Plugin/ImageEffect/SetCanvasImageEffect.php
@@ -65,7 +65,7 @@ class SetCanvasImageEffect extends ConfigurableImageEffectBase {
'#data' => $data,
] + parent::getSummary();
}
-
+
/**
* {@inheritdoc}
*/
@@ -80,7 +80,7 @@ class SetCanvasImageEffect extends ConfigurableImageEffectBase {
],
'#required' => TRUE,
];
-
+
// Exact size canvas.
$form['exact'] = [
'#type' => 'details',
@@ -251,7 +251,7 @@ class SetCanvasImageEffect extends ConfigurableImageEffectBase {
*/
public function transformDimensions(array &$dimensions, $uri) {
if ($dimensions['width'] && $dimensions['height']) {
- $d = $this->getDimensions($image->getWidth(), $image->getHeight());
+ $d = $this->getDimensions($dimensions['width'], $dimensions['height']);
$dimensions['width'] = $d['width'];
$dimensions['height'] = $d['height'];
}
diff --git a/src/Tests/ImageEffectsSetCanvasTest.php b/src/Tests/ImageEffectsSetCanvasTest.php
new file mode 100644
index 0000000..54c4e06
--- /dev/null
+++ b/src/Tests/ImageEffectsSetCanvasTest.php
@@ -0,0 +1,136 @@
+toolkits = ['gd', 'imagemagick'];
+ }
+
+ /**
+ * Set canvas effect test.
+ */
+ public function testColorShiftEffect() {
+ // Test operations on toolkits.
+ $this->executeTestOnToolkits([$this, 'doTestSetCanvasOperations']);
+ }
+
+ /**
+ * Set canvas operations test.
+ */
+ public function doTestSetCanvasOperations() {
+ $image_factory = $this->container->get('image.factory');
+
+ $test_file = drupal_get_path('module', 'simpletest') . '/files/image-test.png';
+ $original_uri = file_unmanaged_copy($test_file, 'public://', FILE_EXISTS_RENAME);
+ $generated_uri = 'public://styles/image_effects_test/public/' . \Drupal::service('file_system')->basename($original_uri);
+
+ // Test EXACT size canvas.
+ $effect = [
+ 'id' => 'image_effects_set_canvas',
+ 'data' => [
+ 'canvas_mode' => 'exact',
+ 'canvas_color][container][transparent' => FALSE,
+ 'canvas_color][container][hex' => '#FF00FF',
+ 'canvas_color][container][opacity' => 100,
+ 'exact][width' => '200%',
+ 'exact][height' => '200%',
+ ],
+ ];
+ $uuid = $this->addEffectToTestStyle($effect);
+
+ // Load Image Style.
+ $image_style = ImageStyle::load('image_effects_test');
+
+ // Check that ::transformDimensions returns expected dimensions.
+ $image = $image_factory->get($original_uri);
+ $this->assertEqual(40, $image->getWidth());
+ $this->assertEqual(20, $image->getHeight());
+ $url = file_url_transform_relative($image_style->buildUrl($original_uri));
+ $variables = array(
+ '#theme' => 'image_style',
+ '#style_name' => 'image_effects_test',
+ '#uri' => $original_uri,
+ '#width' => $image->getWidth(),
+ '#height' => $image->getHeight(),
+ );
+ $this->assertEqual('
', $this->getImageTag($variables));
+
+ // Check that ::applyEffect generates image with expected canvas.
+ $image_style->createDerivative($original_uri, $image_style->buildUri($original_uri));
+ $image = $image_factory->get($generated_uri, 'gd');
+ $this->assertEqual(80, $image->getWidth());
+ $this->assertEqual(40, $image->getHeight());
+ $this->assertTrue($this->colorsAreEqual($this->fuchsia, $this->getPixelColor($image, 0, 0)));
+ $this->assertTrue($this->colorsAreEqual($this->fuchsia, $this->getPixelColor($image, 79, 0)));
+ $this->assertTrue($this->colorsAreEqual($this->fuchsia, $this->getPixelColor($image, 0, 39)));
+ $this->assertTrue($this->colorsAreEqual($this->fuchsia, $this->getPixelColor($image, 79, 39)));
+
+ // Remove effect.
+ $this->removeEffectFromTestStyle($uuid);
+
+ // Test RELATIVE size canvas.
+ $effect = [
+ 'id' => 'image_effects_set_canvas',
+ 'data' => [
+ 'canvas_mode' => 'relative',
+ 'canvas_color][container][transparent' => FALSE,
+ 'canvas_color][container][hex' => '#FFFF00',
+ 'canvas_color][container][opacity' => 100,
+ 'relative][right' => 10,
+ 'relative][left' => 20,
+ 'relative][top' => 30,
+ 'relative][bottom' => 40,
+ ],
+ ];
+ $uuid = $this->addEffectToTestStyle($effect);
+
+ // Load Image Style.
+ $image_style = ImageStyle::load('image_effects_test');
+
+ // Check that ::transformDimensions returns expected dimensions.
+ $image = $image_factory->get($original_uri);
+ $this->assertEqual(40, $image->getWidth());
+ $this->assertEqual(20, $image->getHeight());
+ $url = file_url_transform_relative($image_style->buildUrl($original_uri));
+ $variables = array(
+ '#theme' => 'image_style',
+ '#style_name' => 'image_effects_test',
+ '#uri' => $original_uri,
+ '#width' => $image->getWidth(),
+ '#height' => $image->getHeight(),
+ );
+ $this->assertEqual('
', $this->getImageTag($variables));
+
+ // Check that ::applyEffect generates image with expected canvas.
+ $image_style->createDerivative($original_uri, $image_style->buildUri($original_uri));
+ $image = $image_factory->get($generated_uri, 'gd');
+ $this->assertEqual(70, $image->getWidth());
+ $this->assertEqual(90, $image->getHeight());
+ $this->assertTrue($this->colorsAreEqual($this->yellow, $this->getPixelColor($image, 0, 0)));
+ $this->assertTrue($this->colorsAreEqual($this->yellow, $this->getPixelColor($image, 69, 0)));
+ $this->assertTrue($this->colorsAreEqual($this->yellow, $this->getPixelColor($image, 0, 89)));
+ $this->assertTrue($this->colorsAreEqual($this->yellow, $this->getPixelColor($image, 69, 89)));
+
+ // Remove effect.
+ $this->removeEffectFromTestStyle($uuid);
+ }
+
+}