1.20.x image.test ImageFieldValidateTestCase::testOrientation()

Test image rotation resulting from EXIF data. Requires a special test image, file rotate90cw.jpg.

File

modules/image/tests/image.test, line 1039
Tests for image.module.

Class

ImageFieldValidateTestCase
Test class to check for various validations.

Code

function testOrientation() {
  // Create an image field.
  $field_name = strtolower($this->randomName());
  $instance_settings = array(
    'orientate' => 1,
  );
  $this->createImageField($field_name, 'post', array(), $instance_settings);
  // Upload our test image to this field.
  $orientation_test_image = image_load(backdrop_get_path('module', 'image') . '/images/rotate90cw.jpg');
  $uri = $orientation_test_image->source;
  $img = image_load($uri);
  $this->assertTrue(is_object($img), 'Image data is available.');
  $orientation_test_image->uri = $uri;

  if (!$orientation_test_image) {
    $this->fail(t('Could not load image %file.', array('%file' => 'rotate90cw.jpg')));
  }
  $nid = $this->uploadNodeImage($orientation_test_image, $field_name, 'post');
  $this->assertText(t('The image was rotated by 90 degrees.'), 'The image was correctly re-oriented.');

  $node = node_load($nid, NULL, TRUE);
  $uri = $node->{$field_name}[LANGUAGE_NONE][0]['uri'];

  // Check orientation.
  $img = image_load($uri);
  $this->assertTrue(is_object($img), 'Image data is available.');

  // Test the aspect ratio.
  $this->assertTrue($img->info['width'] > $img->info['height'], 'The image format is landscape.');

  // Verify the rotation by color inspection.
  $rgb = imagecolorat($img->resource, 10, 10);
  $r = ($rgb >> 16) & 0xFF;
  $g = ($rgb >> 8) & 0xFF;
  $b = $rgb & 0xFF;
  // The top left corner should be red.
  $this->assertTrue(abs($r - 255) < 5, 'Red color component is close to 255.');
  $this->assertTrue($g < 5, 'Green color component is close to 0.');
  $this->assertTrue($b < 5, 'Blue color component is close to 0.');
}