meta.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <?php
  2. /**
  3. * @group image
  4. * @group media
  5. * @group upload
  6. */
  7. class Tests_Image_Meta extends WP_UnitTestCase {
  8. function setUp() {
  9. if ( ! extension_loaded( 'gd' ) )
  10. $this->markTestSkipped( 'The gd PHP extension is not loaded.' );
  11. if ( ! extension_loaded( 'exif' ) )
  12. $this->markTestSkipped( 'The exif PHP extension is not loaded.' );
  13. if ( ! is_callable( 'wp_read_image_metadata' ) )
  14. $this->markTestSkipped( 'wp_read_image_metadata() is not callable.' );
  15. parent::setUp();
  16. }
  17. function test_exif_d70() {
  18. // exif from a Nikon D70
  19. $out = wp_read_image_metadata(DIR_TESTDATA.'/images/2004-07-22-DSC_0008.jpg');
  20. $this->assertEquals(6.3, $out['aperture']);
  21. $this->assertEquals('', $out['credit']);
  22. $this->assertEquals('NIKON D70', $out['camera']);
  23. $this->assertEquals('', $out['caption']);
  24. $this->assertEquals(strtotime('2004-07-22 17:14:59'), $out['created_timestamp']);
  25. $this->assertEquals('', $out['copyright']);
  26. $this->assertEquals(27, $out['focal_length']);
  27. $this->assertEquals(400, $out['iso']);
  28. $this->assertEquals(1/40, $out['shutter_speed']);
  29. $this->assertEquals('', $out['title']);
  30. }
  31. function test_exif_d70_mf() {
  32. // exif from a Nikon D70 - manual focus lens, so some data is unavailable
  33. $out = wp_read_image_metadata(DIR_TESTDATA.'/images/2007-06-17DSC_4173.JPG');
  34. $this->assertEquals(0, $out['aperture']);
  35. $this->assertEquals('', $out['credit']);
  36. $this->assertEquals('NIKON D70', $out['camera']);
  37. $this->assertEquals('', $out['caption']);
  38. $this->assertEquals(strtotime('2007-06-17 21:18:00'), $out['created_timestamp']);
  39. $this->assertEquals('', $out['copyright']);
  40. $this->assertEquals(0, $out['focal_length']);
  41. $this->assertEquals(0, $out['iso']); // interesting - a Nikon bug?
  42. $this->assertEquals(1/500, $out['shutter_speed']);
  43. $this->assertEquals('', $out['title']);
  44. #$this->assertEquals(array('Flowers'), $out['keywords']);
  45. }
  46. function test_exif_d70_iptc() {
  47. // exif from a Nikon D70 with IPTC data added later
  48. $out = wp_read_image_metadata(DIR_TESTDATA.'/images/2004-07-22-DSC_0007.jpg');
  49. $this->assertEquals(6.3, $out['aperture']);
  50. $this->assertEquals('IPTC Creator', $out['credit']);
  51. $this->assertEquals('NIKON D70', $out['camera']);
  52. $this->assertEquals('IPTC Caption', $out['caption']);
  53. $this->assertEquals(strtotime('2004-07-22 17:14:35'), $out['created_timestamp']);
  54. $this->assertEquals('IPTC Copyright', $out['copyright']);
  55. $this->assertEquals(18, $out['focal_length']);
  56. $this->assertEquals(200, $out['iso']);
  57. $this->assertEquals(1/25, $out['shutter_speed']);
  58. $this->assertEquals('IPTC Headline', $out['title']);
  59. }
  60. function test_exif_fuji() {
  61. // exif from a Fuji FinePix S5600 (thanks Mark)
  62. $out = wp_read_image_metadata(DIR_TESTDATA.'/images/a2-small.jpg');
  63. $this->assertEquals(4.5, $out['aperture']);
  64. $this->assertEquals('', $out['credit']);
  65. $this->assertEquals('FinePix S5600', $out['camera']);
  66. $this->assertEquals('', $out['caption']);
  67. $this->assertEquals(strtotime('2007-09-03 10:17:03'), $out['created_timestamp']);
  68. $this->assertEquals('', $out['copyright']);
  69. $this->assertEquals(6.3, $out['focal_length']);
  70. $this->assertEquals(64, $out['iso']);
  71. $this->assertEquals(1/320, $out['shutter_speed']);
  72. $this->assertEquals('', $out['title']);
  73. }
  74. /**
  75. * @ticket 6571
  76. */
  77. function test_exif_error() {
  78. // http://trac.wordpress.org/ticket/6571
  79. // this triggers a warning mesage when reading the exif block
  80. $out = wp_read_image_metadata(DIR_TESTDATA.'/images/waffles.jpg');
  81. $this->assertEquals(0, $out['aperture']);
  82. $this->assertEquals('', $out['credit']);
  83. $this->assertEquals('', $out['camera']);
  84. $this->assertEquals('', $out['caption']);
  85. $this->assertEquals(0, $out['created_timestamp']);
  86. $this->assertEquals('', $out['copyright']);
  87. $this->assertEquals(0, $out['focal_length']);
  88. $this->assertEquals(0, $out['iso']);
  89. $this->assertEquals(0, $out['shutter_speed']);
  90. $this->assertEquals('', $out['title']);
  91. }
  92. function test_exif_no_data() {
  93. // no exif data in this image (from burningwell.org)
  94. $out = wp_read_image_metadata(DIR_TESTDATA.'/images/canola.jpg');
  95. $this->assertEquals(0, $out['aperture']);
  96. $this->assertEquals('', $out['credit']);
  97. $this->assertEquals('', $out['camera']);
  98. $this->assertEquals('', $out['caption']);
  99. $this->assertEquals(0, $out['created_timestamp']);
  100. $this->assertEquals('', $out['copyright']);
  101. $this->assertEquals(0, $out['focal_length']);
  102. $this->assertEquals(0, $out['iso']);
  103. $this->assertEquals(0, $out['shutter_speed']);
  104. $this->assertEquals('', $out['title']);
  105. }
  106. /**
  107. * @ticket 9417
  108. */
  109. function test_utf8_iptc_tags() {
  110. // trilingual UTF-8 text in the ITPC caption-abstract field
  111. $out = wp_read_image_metadata(DIR_TESTDATA.'/images/test-image-iptc.jpg');
  112. $this->assertEquals('This is a comment. / Это комментарий. / Βλέπετε ένα σχόλιο.', $out['caption']);
  113. }
  114. /**
  115. * wp_read_image_metadata() should false if the image file doesn't exist
  116. * @return void
  117. */
  118. public function test_missing_image_file() {
  119. $out = wp_read_image_metadata(DIR_TESTDATA.'/images/404_image.png');
  120. $this->assertFalse($out);
  121. }
  122. }