23 $ThisFileInfo[
'png'] = array();
24 $thisfile_png = &$ThisFileInfo[
'png'];
26 $ThisFileInfo[
'fileformat'] =
'png';
27 $ThisFileInfo[
'video'][
'dataformat'] =
'png';
28 $ThisFileInfo[
'video'][
'lossless'] =
false;
30 fseek($fd, $ThisFileInfo[
'avdataoffset'], SEEK_SET);
34 $PNGidentifier = substr($PNGfiledata, $offset, 8);
37 if ($PNGidentifier !=
"\x89\x50\x4E\x47\x0D\x0A\x1A\x0A") {
38 $ThisFileInfo[
'error'][] =
'First 8 bytes of file ('.getid3_lib::PrintHexBytes($PNGidentifier).
') did not match expected PNG identifier';
39 unset($ThisFileInfo[
'fileformat']);
43 while (((ftell($fd) - (strlen($PNGfiledata) - $offset)) < $ThisFileInfo[
'filesize'])) {
46 while (((strlen($PNGfiledata) - $offset) < ($chunk[
'data_length'] + 4)) && (ftell($fd) < $ThisFileInfo[
'filesize'])) {
49 $chunk[
'type_text'] = substr($PNGfiledata, $offset, 4);
52 $chunk[
'data'] = substr($PNGfiledata, $offset, $chunk[
'data_length']);
53 $offset += $chunk[
'data_length'];
57 $chunk[
'flags'][
'ancilliary'] = (bool) ($chunk[
'type_raw'] & 0x20000000);
58 $chunk[
'flags'][
'private'] = (bool) ($chunk[
'type_raw'] & 0x00200000);
59 $chunk[
'flags'][
'reserved'] = (bool) ($chunk[
'type_raw'] & 0x00002000);
60 $chunk[
'flags'][
'safe_to_copy'] = (bool) ($chunk[
'type_raw'] & 0x00000020);
63 $thisfile_png[$chunk[
'type_text']] = array();
64 $thisfile_png_chunk_type_text = &$thisfile_png[$chunk[
'type_text']];
66 switch ($chunk[
'type_text']) {
69 $thisfile_png_chunk_type_text[
'header'] = $chunk;
70 $thisfile_png_chunk_type_text[
'width'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 0, 4));
71 $thisfile_png_chunk_type_text[
'height'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 4, 4));
72 $thisfile_png_chunk_type_text[
'raw'][
'bit_depth'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 8, 1));
73 $thisfile_png_chunk_type_text[
'raw'][
'color_type'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 9, 1));
74 $thisfile_png_chunk_type_text[
'raw'][
'compression_method'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 10, 1));
75 $thisfile_png_chunk_type_text[
'raw'][
'filter_method'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 11, 1));
76 $thisfile_png_chunk_type_text[
'raw'][
'interlace_method'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 12, 1));
78 $thisfile_png_chunk_type_text[
'compression_method_text'] = $this->
PNGcompressionMethodLookup($thisfile_png_chunk_type_text[
'raw'][
'compression_method']);
79 $thisfile_png_chunk_type_text[
'color_type'][
'palette'] = (bool) ($thisfile_png_chunk_type_text[
'raw'][
'color_type'] & 0x01);
80 $thisfile_png_chunk_type_text[
'color_type'][
'true_color'] = (bool) ($thisfile_png_chunk_type_text[
'raw'][
'color_type'] & 0x02);
81 $thisfile_png_chunk_type_text[
'color_type'][
'alpha'] = (bool) ($thisfile_png_chunk_type_text[
'raw'][
'color_type'] & 0x04);
83 $ThisFileInfo[
'video'][
'resolution_x'] = $thisfile_png_chunk_type_text[
'width'];
84 $ThisFileInfo[
'video'][
'resolution_y'] = $thisfile_png_chunk_type_text[
'height'];
86 $ThisFileInfo[
'video'][
'bits_per_sample'] = $this->
IHDRcalculateBitsPerSample($thisfile_png_chunk_type_text[
'raw'][
'color_type'], $thisfile_png_chunk_type_text[
'raw'][
'bit_depth']);
91 $thisfile_png_chunk_type_text[
'header'] = $chunk;
93 for ($i = 0; $i <= 255; $i++) {
100 $thisfile_png_chunk_type_text[$i] = (($red << 16) | ($green << 8) | ($blue));
106 $thisfile_png_chunk_type_text[
'header'] = $chunk;
107 switch ($thisfile_png[
'IHDR'][
'raw'][
'color_type']) {
109 $thisfile_png_chunk_type_text[
'transparent_color_gray'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 0, 2));
113 $thisfile_png_chunk_type_text[
'transparent_color_red'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 0, 2));
114 $thisfile_png_chunk_type_text[
'transparent_color_green'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 2, 2));
115 $thisfile_png_chunk_type_text[
'transparent_color_blue'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 4, 2));
119 for ($i = 0; $i < strlen($thisfile_png_chunk_type_text[
'header'][
'data']); $i++) {
120 $thisfile_png_chunk_type_text[
'palette_opacity'][$i] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], $i, 1));
126 $ThisFileInfo[
'error'][] =
'Invalid color_type in tRNS chunk: '.$thisfile_png[
'IHDR'][
'raw'][
'color_type'];
129 $ThisFileInfo[
'warning'][] =
'Unhandled color_type in tRNS chunk: '.$thisfile_png[
'IHDR'][
'raw'][
'color_type'];
136 $thisfile_png_chunk_type_text[
'header'] = $chunk;
137 $thisfile_png_chunk_type_text[
'gamma'] =
getid3_lib::BigEndian2Int($thisfile_png_chunk_type_text[
'header'][
'data']) / 100000;
142 $thisfile_png_chunk_type_text[
'header'] = $chunk;
143 $thisfile_png_chunk_type_text[
'white_x'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 0, 4)) / 100000;
144 $thisfile_png_chunk_type_text[
'white_y'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 4, 4)) / 100000;
145 $thisfile_png_chunk_type_text[
'red_y'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 8, 4)) / 100000;
146 $thisfile_png_chunk_type_text[
'red_y'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 12, 4)) / 100000;
147 $thisfile_png_chunk_type_text[
'green_y'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 16, 4)) / 100000;
148 $thisfile_png_chunk_type_text[
'green_y'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 20, 4)) / 100000;
149 $thisfile_png_chunk_type_text[
'blue_y'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 24, 4)) / 100000;
150 $thisfile_png_chunk_type_text[
'blue_y'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 28, 4)) / 100000;
155 $thisfile_png_chunk_type_text[
'header'] = $chunk;
156 $thisfile_png_chunk_type_text[
'reindering_intent'] =
getid3_lib::BigEndian2Int($thisfile_png_chunk_type_text[
'header'][
'data']);
157 $thisfile_png_chunk_type_text[
'reindering_intent_text'] = $this->
PNGsRGBintentLookup($thisfile_png_chunk_type_text[
'reindering_intent']);
162 $thisfile_png_chunk_type_text[
'header'] = $chunk;
163 list($profilename, $compressiondata) = explode(
"\x00", $thisfile_png_chunk_type_text[
'header'][
'data'], 2);
164 $thisfile_png_chunk_type_text[
'profile_name'] = $profilename;
166 $thisfile_png_chunk_type_text[
'compression_profile'] = substr($compressiondata, 1);
168 $thisfile_png_chunk_type_text[
'compression_method_text'] = $this->
PNGcompressionMethodLookup($thisfile_png_chunk_type_text[
'compression_method']);
173 $thisfile_png_chunk_type_text[
'header'] = $chunk;
174 list($keyword, $text) = explode(
"\x00", $thisfile_png_chunk_type_text[
'header'][
'data'], 2);
175 $thisfile_png_chunk_type_text[
'keyword'] = $keyword;
176 $thisfile_png_chunk_type_text[
'text'] = $text;
178 $thisfile_png[
'comments'][$thisfile_png_chunk_type_text[
'keyword']][] = $thisfile_png_chunk_type_text[
'text'];
183 $thisfile_png_chunk_type_text[
'header'] = $chunk;
184 list($keyword, $otherdata) = explode(
"\x00", $thisfile_png_chunk_type_text[
'header'][
'data'], 2);
185 $thisfile_png_chunk_type_text[
'keyword'] = $keyword;
187 $thisfile_png_chunk_type_text[
'compressed_text'] = substr($otherdata, 1);
188 $thisfile_png_chunk_type_text[
'compression_method_text'] = $this->
PNGcompressionMethodLookup($thisfile_png_chunk_type_text[
'compression_method']);
189 switch ($thisfile_png_chunk_type_text[
'compression_method']) {
191 $thisfile_png_chunk_type_text[
'text'] = gzuncompress($thisfile_png_chunk_type_text[
'compressed_text']);
199 if (isset($thisfile_png_chunk_type_text[
'text'])) {
200 $thisfile_png[
'comments'][$thisfile_png_chunk_type_text[
'keyword']][] = $thisfile_png_chunk_type_text[
'text'];
206 $thisfile_png_chunk_type_text[
'header'] = $chunk;
207 list($keyword, $otherdata) = explode(
"\x00", $thisfile_png_chunk_type_text[
'header'][
'data'], 2);
208 $thisfile_png_chunk_type_text[
'keyword'] = $keyword;
211 $thisfile_png_chunk_type_text[
'compression_method_text'] = $this->
PNGcompressionMethodLookup($thisfile_png_chunk_type_text[
'compression_method']);
212 list($languagetag, $translatedkeyword, $text) = explode(
"\x00", substr($otherdata, 2), 3);
213 $thisfile_png_chunk_type_text[
'language_tag'] = $languagetag;
214 $thisfile_png_chunk_type_text[
'translated_keyword'] = $translatedkeyword;
216 if ($thisfile_png_chunk_type_text[
'compression']) {
218 switch ($thisfile_png_chunk_type_text[
'compression_method']) {
220 $thisfile_png_chunk_type_text[
'text'] = gzuncompress($text);
230 $thisfile_png_chunk_type_text[
'text'] = $text;
234 if (isset($thisfile_png_chunk_type_text[
'text'])) {
235 $thisfile_png[
'comments'][$thisfile_png_chunk_type_text[
'keyword']][] = $thisfile_png_chunk_type_text[
'text'];
241 $thisfile_png_chunk_type_text[
'header'] = $chunk;
242 switch ($thisfile_png[
'IHDR'][
'raw'][
'color_type']) {
245 $thisfile_png_chunk_type_text[
'background_gray'] =
getid3_lib::BigEndian2Int($thisfile_png_chunk_type_text[
'header'][
'data']);
250 $thisfile_png_chunk_type_text[
'background_red'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 0 * $thisfile_png[
'IHDR'][
'raw'][
'bit_depth'], $thisfile_png[
'IHDR'][
'raw'][
'bit_depth']));
251 $thisfile_png_chunk_type_text[
'background_green'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 1 * $thisfile_png[
'IHDR'][
'raw'][
'bit_depth'], $thisfile_png[
'IHDR'][
'raw'][
'bit_depth']));
252 $thisfile_png_chunk_type_text[
'background_blue'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 2 * $thisfile_png[
'IHDR'][
'raw'][
'bit_depth'], $thisfile_png[
'IHDR'][
'raw'][
'bit_depth']));
256 $thisfile_png_chunk_type_text[
'background_index'] =
getid3_lib::BigEndian2Int($thisfile_png_chunk_type_text[
'header'][
'data']);
266 $thisfile_png_chunk_type_text[
'header'] = $chunk;
267 $thisfile_png_chunk_type_text[
'pixels_per_unit_x'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 0, 4));
268 $thisfile_png_chunk_type_text[
'pixels_per_unit_y'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 4, 4));
269 $thisfile_png_chunk_type_text[
'unit_specifier'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 8, 1));
270 $thisfile_png_chunk_type_text[
'unit'] = $this->
PNGpHYsUnitLookup($thisfile_png_chunk_type_text[
'unit_specifier']);
275 $thisfile_png_chunk_type_text[
'header'] = $chunk;
276 switch ($thisfile_png[
'IHDR'][
'raw'][
'color_type']) {
278 $thisfile_png_chunk_type_text[
'significant_bits_gray'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 0, 1));
283 $thisfile_png_chunk_type_text[
'significant_bits_red'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 0, 1));
284 $thisfile_png_chunk_type_text[
'significant_bits_green'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 1, 1));
285 $thisfile_png_chunk_type_text[
'significant_bits_blue'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 2, 1));
289 $thisfile_png_chunk_type_text[
'significant_bits_gray'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 0, 1));
290 $thisfile_png_chunk_type_text[
'significant_bits_alpha'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 1, 1));
294 $thisfile_png_chunk_type_text[
'significant_bits_red'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 0, 1));
295 $thisfile_png_chunk_type_text[
'significant_bits_green'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 1, 1));
296 $thisfile_png_chunk_type_text[
'significant_bits_blue'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 2, 1));
297 $thisfile_png_chunk_type_text[
'significant_bits_alpha'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 3, 1));
307 $thisfile_png_chunk_type_text[
'header'] = $chunk;
308 list($palettename, $otherdata) = explode(
"\x00", $thisfile_png_chunk_type_text[
'header'][
'data'], 2);
309 $thisfile_png_chunk_type_text[
'palette_name'] = $palettename;
313 $thisfile_png_chunk_type_text[
'sample_depth_bytes'] = $thisfile_png_chunk_type_text[
'sample_depth_bits'] / 8;
315 while ($sPLToffset < strlen($otherdata)) {
316 $thisfile_png_chunk_type_text[
'red'][$paletteCounter] =
getid3_lib::BigEndian2Int(substr($otherdata, $sPLToffset, $thisfile_png_chunk_type_text[
'sample_depth_bytes']));
317 $sPLToffset += $thisfile_png_chunk_type_text[
'sample_depth_bytes'];
318 $thisfile_png_chunk_type_text[
'green'][$paletteCounter] =
getid3_lib::BigEndian2Int(substr($otherdata, $sPLToffset, $thisfile_png_chunk_type_text[
'sample_depth_bytes']));
319 $sPLToffset += $thisfile_png_chunk_type_text[
'sample_depth_bytes'];
320 $thisfile_png_chunk_type_text[
'blue'][$paletteCounter] =
getid3_lib::BigEndian2Int(substr($otherdata, $sPLToffset, $thisfile_png_chunk_type_text[
'sample_depth_bytes']));
321 $sPLToffset += $thisfile_png_chunk_type_text[
'sample_depth_bytes'];
322 $thisfile_png_chunk_type_text[
'alpha'][$paletteCounter] =
getid3_lib::BigEndian2Int(substr($otherdata, $sPLToffset, $thisfile_png_chunk_type_text[
'sample_depth_bytes']));
323 $sPLToffset += $thisfile_png_chunk_type_text[
'sample_depth_bytes'];
324 $thisfile_png_chunk_type_text[
'frequency'][$paletteCounter] =
getid3_lib::BigEndian2Int(substr($otherdata, $sPLToffset, 2));
332 $thisfile_png_chunk_type_text[
'header'] = $chunk;
334 while ($hISTcounter < strlen($thisfile_png_chunk_type_text[
'header'][
'data'])) {
335 $thisfile_png_chunk_type_text[$hISTcounter] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], $hISTcounter / 2, 2));
342 $thisfile_png_chunk_type_text[
'header'] = $chunk;
343 $thisfile_png_chunk_type_text[
'year'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 0, 2));
344 $thisfile_png_chunk_type_text[
'month'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 2, 1));
345 $thisfile_png_chunk_type_text[
'day'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 3, 1));
346 $thisfile_png_chunk_type_text[
'hour'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 4, 1));
347 $thisfile_png_chunk_type_text[
'minute'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 5, 1));
348 $thisfile_png_chunk_type_text[
'second'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 6, 1));
349 $thisfile_png_chunk_type_text[
'unix'] = gmmktime($thisfile_png_chunk_type_text[
'hour'], $thisfile_png_chunk_type_text[
'minute'], $thisfile_png_chunk_type_text[
'second'], $thisfile_png_chunk_type_text[
'month'], $thisfile_png_chunk_type_text[
'day'], $thisfile_png_chunk_type_text[
'year']);
354 $thisfile_png_chunk_type_text[
'header'] = $chunk;
355 $thisfile_png_chunk_type_text[
'position_x'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 0, 4),
false,
true);
356 $thisfile_png_chunk_type_text[
'position_y'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 4, 4),
false,
true);
357 $thisfile_png_chunk_type_text[
'unit_specifier'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 8, 1));
358 $thisfile_png_chunk_type_text[
'unit'] = $this->
PNGoFFsUnitLookup($thisfile_png_chunk_type_text[
'unit_specifier']);
363 $thisfile_png_chunk_type_text[
'header'] = $chunk;
364 list($calibrationname, $otherdata) = explode(
"\x00", $thisfile_png_chunk_type_text[
'header'][
'data'], 2);
365 $thisfile_png_chunk_type_text[
'calibration_name'] = $calibrationname;
367 $thisfile_png_chunk_type_text[
'original_zero'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], $pCALoffset, 4),
false,
true);
369 $thisfile_png_chunk_type_text[
'original_max'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], $pCALoffset, 4),
false,
true);
371 $thisfile_png_chunk_type_text[
'equation_type'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], $pCALoffset, 1));
373 $thisfile_png_chunk_type_text[
'equation_type_text'] = $this->
PNGpCALequationTypeLookup($thisfile_png_chunk_type_text[
'equation_type']);
374 $thisfile_png_chunk_type_text[
'parameter_count'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], $pCALoffset, 1));
376 $thisfile_png_chunk_type_text[
'parameters'] = explode(
"\x00", substr($thisfile_png_chunk_type_text[
'header'][
'data'], $pCALoffset));
381 $thisfile_png_chunk_type_text[
'header'] = $chunk;
382 $thisfile_png_chunk_type_text[
'unit_specifier'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 0, 1));
383 $thisfile_png_chunk_type_text[
'unit'] = $this->
PNGsCALUnitLookup($thisfile_png_chunk_type_text[
'unit_specifier']);
384 list($pixelwidth, $pixelheight) = explode(
"\x00", substr($thisfile_png_chunk_type_text[
'header'][
'data'], 1));
385 $thisfile_png_chunk_type_text[
'pixel_width'] = $pixelwidth;
386 $thisfile_png_chunk_type_text[
'pixel_height'] = $pixelheight;
392 if (isset($thisfile_png_chunk_type_text) && is_array($thisfile_png_chunk_type_text)) {
393 $gIFgCounter = count($thisfile_png_chunk_type_text);
395 $thisfile_png_chunk_type_text[$gIFgCounter][
'header'] = $chunk;
396 $thisfile_png_chunk_type_text[$gIFgCounter][
'disposal_method'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 0, 1));
397 $thisfile_png_chunk_type_text[$gIFgCounter][
'user_input_flag'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 1, 1));
398 $thisfile_png_chunk_type_text[$gIFgCounter][
'delay_time'] =
getid3_lib::BigEndian2Int(substr($thisfile_png_chunk_type_text[
'header'][
'data'], 2, 2));
404 if (isset($thisfile_png_chunk_type_text) && is_array($thisfile_png_chunk_type_text)) {
405 $gIFxCounter = count($thisfile_png_chunk_type_text);
407 $thisfile_png_chunk_type_text[$gIFxCounter][
'header'] = $chunk;
408 $thisfile_png_chunk_type_text[$gIFxCounter][
'application_identifier'] = substr($thisfile_png_chunk_type_text[
'header'][
'data'], 0, 8);
409 $thisfile_png_chunk_type_text[$gIFxCounter][
'authentication_code'] = substr($thisfile_png_chunk_type_text[
'header'][
'data'], 8, 3);
410 $thisfile_png_chunk_type_text[$gIFxCounter][
'application_data'] = substr($thisfile_png_chunk_type_text[
'header'][
'data'], 11);
415 $idatinformationfieldindex = 0;
416 if (isset($thisfile_png[
'IDAT']) && is_array($thisfile_png[
'IDAT'])) {
417 $idatinformationfieldindex = count($thisfile_png[
'IDAT']);
419 unset($chunk[
'data']);
420 $thisfile_png_chunk_type_text[$idatinformationfieldindex][
'header'] = $chunk;
425 $thisfile_png_chunk_type_text[
'header'] = $chunk;
431 $thisfile_png_chunk_type_text[
'header'] = $chunk;
432 $ThisFileInfo[
'warning'][] =
'Unhandled chunk type: '.$chunk[
'type_text'];
441 static $PNGsRGBintentLookup = array(
443 1 =>
'Relative colorimetric',
445 3 =>
'Absolute colorimetric'
447 return (isset($PNGsRGBintentLookup[$sRGB]) ? $PNGsRGBintentLookup[$sRGB] :
'invalid');
451 static $PNGcompressionMethodLookup = array(
452 0 =>
'deflate/inflate'
454 return (isset($PNGcompressionMethodLookup[$compressionmethod]) ? $PNGcompressionMethodLookup[$compressionmethod] :
'invalid');
458 static $PNGpHYsUnitLookup = array(
462 return (isset($PNGpHYsUnitLookup[$unitid]) ? $PNGpHYsUnitLookup[$unitid] :
'invalid');
466 static $PNGoFFsUnitLookup = array(
470 return (isset($PNGoFFsUnitLookup[$unitid]) ? $PNGoFFsUnitLookup[$unitid] :
'invalid');
474 static $PNGpCALequationTypeLookup = array(
475 0 =>
'Linear mapping',
476 1 =>
'Base-e exponential mapping',
477 2 =>
'Arbitrary-base exponential mapping',
478 3 =>
'Hyperbolic mapping'
480 return (isset($PNGpCALequationTypeLookup[$equationtype]) ? $PNGpCALequationTypeLookup[$equationtype] :
'invalid');
484 static $PNGsCALUnitLookup = array(
488 return (isset($PNGsCALUnitLookup[$unitid]) ? $PNGsCALUnitLookup[$unitid] :
'invalid');
492 switch ($color_type) {
498 return 3 * $bit_depth;
506 return 2 * $bit_depth;
510 return 4 * $bit_depth;