PluginProbe ʕ •ᴥ•ʔ
Admin and Site Enhancements (ASE) / 6.2.2
Admin and Site Enhancements (ASE) v6.2.2
9.1.0 9.0.2 9.0.1 9.0.0 8.9.2 8.9.1 8.9.0 8.8.8 8.8.7 8.8.6 8.8.5 8.8.4 8.8.3 8.8.2 8.8.1 8.8.0 8.7.3 8.7.2 8.7.1 8.2.1 8.2.2 8.2.3 8.3.0 8.3.1 8.3.2 8.4.0 8.4.1 8.4.2 8.5.0 8.5.1 8.5.2 8.6.0 8.6.1 8.6.2 8.7.0 5.0.1 5.0.2 5.0.2.1 5.0.2.2 5.0.2.3 5.0.2.4 5.1.0 5.2.0 5.2.1 5.2.10 5.2.11 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.0 5.3.1 5.3.2 5.4.0 5.4.1 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.7.0 5.7.1 5.8.0 5.8.1 6.0.0 6.0.3 6.0.4 6.0.5 6.0.5.1 6.0.6 6.0.7 6.0.8.1 6.1.0 6.1.3 6.2.0 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.2.6 6.2.7 6.3.0 6.3.1 6.3.2 6.4.0 6.5.0 6.5.1 6.6.0 6.7.0 6.8.0 6.8.2 6.8.3 6.9.0 6.9.1 6.9.10 6.9.11 6.9.12 6.9.13.1 6.9.13.2 6.9.2 6.9.3 6.9.4 6.9.5 6.9.6 6.9.7 6.9.8 6.9.9 7.0.0 7.0.2 7.0.2.1 7.0.2.2 7.0.2.3 7.0.3 7.1.0 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2.0 7.2.1 7.3.0 7.3.1 7.3.2 7.3.3 7.4.0 7.4.2 7.4.4 7.4.5 7.4.6 7.4.7 7.4.8 7.5.0 7.5.1 7.5.2 7.5.3 7.5.4 7.6.0 7.6.1 7.6.1.1 7.6.10 7.6.11 7.6.2 7.6.3 7.6.4 7.6.5 7.6.6 7.6.7 7.6.7.1 7.6.8 7.6.9 7.7.0 7.8.0 7.8.1 7.8.10 7.8.11 7.8.12 7.8.13 7.8.14 7.8.15 7.8.16 7.8.17 7.8.18 7.8.2 7.8.3 7.8.4 7.8.5 7.8.5.1 7.8.6 7.8.7 7.8.8 7.8.9 7.9.0 7.9.1 7.9.10 7.9.11 7.9.2 7.9.3 7.9.4 7.9.5 7.9.6 7.9.7 7.9.8 7.9.9 8.0.0 8.0.1 8.0.2 8.0.3 8.0.4 8.0.5 8.0.6 8.0.7 8.0.8 8.1.0 8.1.1 8.1.2 8.1.3 8.1.4 8.2.0 trunk 1.0.0 1.1.0 1.2.0 1.3.0 1.4.0 1.5.0 1.6.0 1.7.0 1.8.0 1.9.0 2.0.0 2.1.0 2.2.0 2.3.0 2.4.0 2.5.0 2.6.0 2.7.0 2.8.0 2.8.1 2.8.2 2.8.3 2.9.0 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.2.0 3.3.0 3.4.0 3.5.0 3.6.1 3.7.0 3.8.0 3.9.0 3.9.1 3.9.2 4.0.0 4.0.1 4.1.0 4.2.0 4.2.1 4.2.2 4.3.0 4.3.1 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.8.0 4.8.1 4.8.2 4.8.3 4.9.0 4.9.1 4.9.2 4.9.3 5.0.0
admin-site-enhancements / includes / bmp-to-image-object.php
admin-site-enhancements / includes Last commit date
admin-menu-width 2 years ago blank-comment-template.php 2 years ago bmp-to-image-object.php 2 years ago password-protected-login.php 2 years ago
bmp-to-image-object.php
182 lines
1 <?php
2
3 /**
4 * Converts BMP to JPG
5 *
6 * @link https://github.com/dompdf/dompdf/blob/master/src/Helpers.php
7 * @link http://www.programmierer-forum.de/function-imagecreatefrombmp-welche-variante-laeuft-t143137.htm
8 * @since 4.3.0
9 */
10 function bmp_to_image_object( $filename, $context = null ) {
11
12 if (!function_exists("imagecreatetruecolor")) {
13 trigger_error("The PHP GD extension is required, but is not installed.", E_ERROR);
14 return false;
15 }
16
17 // version 1.00
18 if (!($fh = fopen($filename, 'rb'))) {
19 trigger_error('imagecreatefrombmp: Can not open ' . $filename, E_USER_WARNING);
20 return false;
21 }
22
23 $bytes_read = 0;
24
25 // read file header
26 $meta = unpack('vtype/Vfilesize/Vreserved/Voffset', fread($fh, 14));
27
28 // check for bitmap
29 if ($meta['type'] != 19778) {
30 trigger_error('imagecreatefrombmp: ' . $filename . ' is not a bitmap!', E_USER_WARNING);
31 return false;
32 }
33
34 // read image header
35 $meta += unpack('Vheadersize/Vwidth/Vheight/vplanes/vbits/Vcompression/Vimagesize/Vxres/Vyres/Vcolors/Vimportant', fread($fh, 40));
36 $bytes_read += 40;
37
38 // read additional bitfield header
39 if ($meta['compression'] == 3) {
40 $meta += unpack('VrMask/VgMask/VbMask', fread($fh, 12));
41 $bytes_read += 12;
42 }
43
44 // set bytes and padding
45 $meta['bytes'] = $meta['bits'] / 8;
46 $meta['decal'] = 4 - (4 * (($meta['width'] * $meta['bytes'] / 4) - floor($meta['width'] * $meta['bytes'] / 4)));
47 if ($meta['decal'] == 4) {
48 $meta['decal'] = 0;
49 }
50
51 // obtain imagesize
52 if ($meta['imagesize'] < 1) {
53 $meta['imagesize'] = $meta['filesize'] - $meta['offset'];
54 // in rare cases filesize is equal to offset so we need to read physical size
55 if ($meta['imagesize'] < 1) {
56 $meta['imagesize'] = @filesize($filename) - $meta['offset'];
57 if ($meta['imagesize'] < 1) {
58 trigger_error('imagecreatefrombmp: Can not obtain filesize of ' . $filename . '!', E_USER_WARNING);
59 return false;
60 }
61 }
62 }
63
64 // calculate colors
65 $meta['colors'] = !$meta['colors'] ? pow(2, $meta['bits']) : $meta['colors'];
66
67 // read color palette
68 $palette = [];
69 if ($meta['bits'] < 16) {
70 $palette = unpack('l' . $meta['colors'], fread($fh, $meta['colors'] * 4));
71 // in rare cases the color value is signed
72 if ($palette[1] < 0) {
73 foreach ($palette as $i => $color) {
74 $palette[$i] = $color + 16777216;
75 }
76 }
77 }
78
79 // ignore extra bitmap headers
80 if ($meta['headersize'] > $bytes_read) {
81 fread($fh, $meta['headersize'] - $bytes_read);
82 }
83
84 // create gd image
85 $im = imagecreatetruecolor($meta['width'], $meta['height']);
86 $data = fread($fh, $meta['imagesize']);
87
88 // uncompress data
89 switch ($meta['compression']) {
90 case 1:
91 $data = Helpers::rle8_decode($data, $meta['width']);
92 break;
93 case 2:
94 $data = Helpers::rle4_decode($data, $meta['width']);
95 break;
96 }
97
98 $p = 0;
99 $vide = chr(0);
100 $y = $meta['height'] - 1;
101 $error = 'imagecreatefrombmp: ' . $filename . ' has not enough data!';
102
103 // loop through the image data beginning with the lower left corner
104 while ($y >= 0) {
105 $x = 0;
106 while ($x < $meta['width']) {
107 switch ($meta['bits']) {
108 case 32:
109 case 24:
110 if (!($part = substr($data, $p, 3 /*$meta['bytes']*/))) {
111 trigger_error($error, E_USER_WARNING);
112 return $im;
113 }
114 $color = unpack('V', $part . $vide);
115 break;
116 case 16:
117 if (!($part = substr($data, $p, 2 /*$meta['bytes']*/))) {
118 trigger_error($error, E_USER_WARNING);
119 return $im;
120 }
121 $color = unpack('v', $part);
122
123 if (empty($meta['rMask']) || $meta['rMask'] != 0xf800) {
124 $color[1] = (($color[1] & 0x7c00) >> 7) * 65536 + (($color[1] & 0x03e0) >> 2) * 256 + (($color[1] & 0x001f) << 3); // 555
125 } else {
126 $color[1] = (($color[1] & 0xf800) >> 8) * 65536 + (($color[1] & 0x07e0) >> 3) * 256 + (($color[1] & 0x001f) << 3); // 565
127 }
128 break;
129 case 8:
130 $color = unpack('n', $vide . substr($data, $p, 1));
131 $color[1] = $palette[$color[1] + 1];
132 break;
133 case 4:
134 $color = unpack('n', $vide . substr($data, floor($p), 1));
135 $color[1] = ($p * 2) % 2 == 0 ? $color[1] >> 4 : $color[1] & 0x0F;
136 $color[1] = $palette[$color[1] + 1];
137 break;
138 case 1:
139 $color = unpack('n', $vide . substr($data, floor($p), 1));
140 switch (($p * 8) % 8) {
141 case 0:
142 $color[1] = $color[1] >> 7;
143 break;
144 case 1:
145 $color[1] = ($color[1] & 0x40) >> 6;
146 break;
147 case 2:
148 $color[1] = ($color[1] & 0x20) >> 5;
149 break;
150 case 3:
151 $color[1] = ($color[1] & 0x10) >> 4;
152 break;
153 case 4:
154 $color[1] = ($color[1] & 0x8) >> 3;
155 break;
156 case 5:
157 $color[1] = ($color[1] & 0x4) >> 2;
158 break;
159 case 6:
160 $color[1] = ($color[1] & 0x2) >> 1;
161 break;
162 case 7:
163 $color[1] = ($color[1] & 0x1);
164 break;
165 }
166 $color[1] = $palette[$color[1] + 1];
167 break;
168 default:
169 trigger_error('imagecreatefrombmp: ' . $filename . ' has ' . $meta['bits'] . ' bits and this is not supported!', E_USER_WARNING);
170 return false;
171 }
172 imagesetpixel($im, $x, $y, $color[1]);
173 $x++;
174 $p += $meta['bytes'];
175 }
176 $y--;
177 $p += $meta['decal'];
178 }
179 fclose($fh);
180 return $im;
181
182 }