]> scripts.mit.edu Git - autoinstalls/mediawiki.git/blob - includes/media/BMP.php
MediaWiki 1.30.2-scripts2
[autoinstalls/mediawiki.git] / includes / media / BMP.php
1 <?php
2 /**
3  * Handler for Microsoft's bitmap format.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18  * http://www.gnu.org/copyleft/gpl.html
19  *
20  * @file
21  * @ingroup Media
22  */
23
24 /**
25  * Handler for Microsoft's bitmap format; getimagesize() doesn't
26  * support these files
27  *
28  * @ingroup Media
29  */
30 class BmpHandler extends BitmapHandler {
31         /**
32          * @param File $file
33          * @return bool
34          */
35         public function mustRender( $file ) {
36                 return true;
37         }
38
39         /**
40          * Render files as PNG
41          *
42          * @param string $text
43          * @param string $mime
44          * @param array $params
45          * @return array
46          */
47         function getThumbType( $text, $mime, $params = null ) {
48                 return [ 'png', 'image/png' ];
49         }
50
51         /**
52          * Get width and height from the bmp header.
53          *
54          * @param File|FSFile $image
55          * @param string $filename
56          * @return array
57          */
58         function getImageSize( $image, $filename ) {
59                 $f = fopen( $filename, 'rb' );
60                 if ( !$f ) {
61                         return false;
62                 }
63                 $header = fread( $f, 54 );
64                 fclose( $f );
65
66                 // Extract binary form of width and height from the header
67                 $w = substr( $header, 18, 4 );
68                 $h = substr( $header, 22, 4 );
69
70                 // Convert the unsigned long 32 bits (little endian):
71                 try {
72                         $w = wfUnpack( 'V', $w, 4 );
73                         $h = wfUnpack( 'V', $h, 4 );
74                 } catch ( Exception $e ) {
75                         return false;
76                 }
77
78                 return [ $w[1], $h[1] ];
79         }
80 }