PluginProbe ʕ •ᴥ•ʔ
Admin and Site Enhancements (ASE) / 7.6.2
Admin and Site Enhancements (ASE) v7.6.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 1 year ago blank-comment-template.php 1 year ago bmp-to-image-object.php 1 year ago empty-class-classic-editor.php 1 year ago password-protected-login.php 1 year ago
bmp-to-image-object.php
189 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 $filename = wp_kses_post( $filename );
12
13 if (!function_exists("imagecreatetruecolor")) {
14 trigger_error("The PHP GD extension is required, but is not installed.", E_ERROR);
15 return false;
16 }
17
18 // version 1.00
19 if (!($fh = fopen($filename, 'rb'))) {
20 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
21 trigger_error('imagecreatefrombmp: Can not open ' . $filename, E_USER_WARNING);
22 return false;
23 }
24
25 $bytes_read = 0;
26
27 // read file header
28 $meta = unpack('vtype/Vfilesize/Vreserved/Voffset', fread($fh, 14));
29
30 // check for bitmap
31 if ($meta['type'] != 19778) {
32 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
33 trigger_error('imagecreatefrombmp: ' . $filename . ' is not a bitmap!', E_USER_WARNING);
34 return false;
35 }
36
37 // read image header
38 $meta += unpack('Vheadersize/Vwidth/Vheight/vplanes/vbits/Vcompression/Vimagesize/Vxres/Vyres/Vcolors/Vimportant', fread($fh, 40));
39 $bytes_read += 40;
40
41 // read additional bitfield header
42 if ($meta['compression'] == 3) {
43 $meta += unpack('VrMask/VgMask/VbMask', fread($fh, 12));
44 $bytes_read += 12;
45 }
46
47 // set bytes and padding
48 $meta['bytes'] = $meta['bits'] / 8;
49 $meta['decal'] = 4 - (4 * (($meta['width'] * $meta['bytes'] / 4) - floor($meta['width'] * $meta['bytes'] / 4)));
50 if ($meta['decal'] == 4) {
51 $meta['decal'] = 0;
52 }
53
54 // obtain imagesize
55 if ($meta['imagesize'] < 1) {
56 $meta['imagesize'] = $meta['filesize'] - $meta['offset'];
57 // in rare cases filesize is equal to offset so we need to read physical size
58 if ($meta['imagesize'] < 1) {
59 $meta['imagesize'] = @filesize($filename) - $meta['offset'];
60 if ($meta['imagesize'] < 1) {
61 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
62 trigger_error('imagecreatefrombmp: Can not obtain filesize of ' . $filename . '!', E_USER_WARNING);
63 return false;
64 }
65 }
66 }
67
68 // calculate colors
69 $meta['colors'] = !$meta['colors'] ? pow(2, $meta['bits']) : $meta['colors'];
70
71 // read color palette
72 $palette = [];
73 if ($meta['bits'] < 16) {
74 $palette = unpack('l' . $meta['colors'], fread($fh, $meta['colors'] * 4));
75 // in rare cases the color value is signed
76 if ($palette[1] < 0) {
77 foreach ($palette as $i => $color) {
78 $palette[$i] = $color + 16777216;
79 }
80 }
81 }
82
83 // ignore extra bitmap headers
84 if ($meta['headersize'] > $bytes_read) {
85 fread($fh, $meta['headersize'] - $bytes_read);
86 }
87
88 // create gd image
89 $im = imagecreatetruecolor($meta['width'], $meta['height']);
90 $data = fread($fh, $meta['imagesize']);
91
92 // uncompress data
93 switch ($meta['compression']) {
94 case 1:
95 $data = Helpers::rle8_decode($data, $meta['width']);
96 break;
97 case 2:
98 $data = Helpers::rle4_decode($data, $meta['width']);
99 break;
100 }
101
102 $p = 0;
103 $vide = chr(0);
104 $y = $meta['height'] - 1;
105 $error = 'imagecreatefrombmp: ' . $filename . ' has not enough data!';
106
107 // loop through the image data beginning with the lower left corner
108 while ($y >= 0) {
109 $x = 0;
110 while ($x < $meta['width']) {
111 switch ($meta['bits']) {
112 case 32:
113 case 24:
114 if (!($part = substr($data, $p, 3 /*$meta['bytes']*/))) {
115 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
116 trigger_error($error, E_USER_WARNING);
117 return $im;
118 }
119 $color = unpack('V', $part . $vide);
120 break;
121 case 16:
122 if (!($part = substr($data, $p, 2 /*$meta['bytes']*/))) {
123 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
124 trigger_error($error, E_USER_WARNING);
125 return $im;
126 }
127 $color = unpack('v', $part);
128
129 if (empty($meta['rMask']) || $meta['rMask'] != 0xf800) {
130 $color[1] = (($color[1] & 0x7c00) >> 7) * 65536 + (($color[1] & 0x03e0) >> 2) * 256 + (($color[1] & 0x001f) << 3); // 555
131 } else {
132 $color[1] = (($color[1] & 0xf800) >> 8) * 65536 + (($color[1] & 0x07e0) >> 3) * 256 + (($color[1] & 0x001f) << 3); // 565
133 }
134 break;
135 case 8:
136 $color = unpack('n', $vide . substr($data, $p, 1));
137 $color[1] = $palette[$color[1] + 1];
138 break;
139 case 4:
140 $color = unpack('n', $vide . substr($data, floor($p), 1));
141 $color[1] = ($p * 2) % 2 == 0 ? $color[1] >> 4 : $color[1] & 0x0F;
142 $color[1] = $palette[$color[1] + 1];
143 break;
144 case 1:
145 $color = unpack('n', $vide . substr($data, floor($p), 1));
146 switch (($p * 8) % 8) {
147 case 0:
148 $color[1] = $color[1] >> 7;
149 break;
150 case 1:
151 $color[1] = ($color[1] & 0x40) >> 6;
152 break;
153 case 2:
154 $color[1] = ($color[1] & 0x20) >> 5;
155 break;
156 case 3:
157 $color[1] = ($color[1] & 0x10) >> 4;
158 break;
159 case 4:
160 $color[1] = ($color[1] & 0x8) >> 3;
161 break;
162 case 5:
163 $color[1] = ($color[1] & 0x4) >> 2;
164 break;
165 case 6:
166 $color[1] = ($color[1] & 0x2) >> 1;
167 break;
168 case 7:
169 $color[1] = ($color[1] & 0x1);
170 break;
171 }
172 $color[1] = $palette[$color[1] + 1];
173 break;
174 default:
175 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
176 trigger_error('imagecreatefrombmp: ' . $filename . ' has ' . $meta['bits'] . ' bits and this is not supported!', E_USER_WARNING);
177 return false;
178 }
179 imagesetpixel($im, $x, $y, $color[1]);
180 $x++;
181 $p += $meta['bytes'];
182 }
183 $y--;
184 $p += $meta['decal'];
185 }
186 fclose($fh);
187 return $im;
188
189 }