$meta = new self();
$seg = JpegMetadataExtractor::segmentSplitter( $filename );
+
if ( isset( $seg['COM'] ) && isset( $seg['COM'][0] ) ) {
$meta->addMetadata( [ 'JPEGFileComment' => $seg['COM'] ], 'native' );
}
$meta->addMetadata( $array, $type );
}
}
- if ( isset( $seg['byteOrder'] ) ) {
- $meta->getExif( $filename, $seg['byteOrder'] );
- }
+
+ $meta->getExif( $filename, isset( $seg['byteOrder'] ) ? $seg['byteOrder'] : 'BE' );
return $meta->getMetadataArray();
}
}
$dimensionsMetadata = [];
- $dimensionsMetadata['width'] = $metadata['Width'];
- $dimensionsMetadata['height'] = $metadata['Height'];
+
+ if ( $this->autoRotateEnabled() && isset( $metadata['Orientation'] ) ) {
+ switch ( $metadata['Orientation'] ) {
+ case 5: // CCW flipped
+ case 6: // CCW
+ case 7: // CW flipped
+ case 8: // CW
+ $dimensionsMetadata['width'] = $metadata['Height'];
+ $dimensionsMetadata['height'] = $metadata['Width'];
+ break;
+ }
+ }
+
+ if ( !isset( $dimensionsMetadata['width'] ) ) {
+ $dimensionsMetadata['width'] = $metadata['Width'];
+ $dimensionsMetadata['height'] = $metadata['Height'];
+ }
return parent::getContentHeaders( $dimensionsMetadata );
}
--- /dev/null
+<?php
+
+/**
+ * @group Media
+ */
+class XContentDimensionsTest extends MediaWikiMediaTestCase {
+ /**
+ * @param string $filename
+ * @param string $expectedXContentDimensions
+ * @dataProvider provideGetContentHeaders
+ * @covers File::getContentHeaders
+ */
+ public function testGetContentHeaders( $filename, $expectedXContentDimensions ) {
+ $file = $this->dataFile( $filename );
+ $headers = $file->getContentHeaders();
+ $this->assertEquals( true, isset( $headers['X-Content-Dimensions'] ) );
+ $this->assertEquals( $headers['X-Content-Dimensions'], $expectedXContentDimensions );
+ }
+
+ public static function provideGetContentHeaders() {
+ return [
+ [ '80x60-2layers.xcf', '80x60:1' ],
+ [ 'animated.gif', '45x30:1' ],
+ [ 'landscape-plain.jpg', '1024x768:1' ],
+ [ 'portrait-rotated.jpg', '768x1024:1' ],
+ [ 'Wikimedia-logo.svg', '1024x1024:1' ],
+ [ 'webp_animated.webp', '300x225:1' ],
+ [ 'test.tiff', '20x20:1' ],
+ ];
+ }
+}