PNG несколько блоков IDAT (PHP)

Сейчас я изучаю png IDAT. Я попытался написать собственный код, чтобы прочитать их, и он работает нормально, если есть только 1 блок IDAT, но не удается, когда есть больше блоков «IDAT 78 DA». У меня такой вопрос: что я должен изменить в своем коде и как?
Спасибо за все отклики. 🙂

<?php
$in_filename = "stego15.png";

$raw_data = file_get_contents($in_filename);
$idat_chunks = explode('IDAT', substr($raw_data, 0, -4));

foreach ($idat_chunks as $idat_number=>$idat_chunk) {
if ($idat_number==0) {
continue;
}
$chunk = substr($idat_chunk, 2, -4);
$decompressed = gzinflate($chunk);

list($width, $height) = getimagesize($in_filename);
$data = str_split(bin2hex($decompressed), $width*6+2);
$grouped_data = array();
foreach ($data as $row=>$d) {
$grouped_data[$row] = str_split(substr($d, 2), 6);
}
echo '<h1>'.$idat_number.'. chunk</h1>';
var_dump($grouped_data);
}

?>

0

Решение

Что ты имеешь в виду под «IDAT 78 DA»? Маловероятно, что вы увидите эти конкретные байты, заголовок zlib, во втором или последующих блоках IDAT. Все данные изображения сжимаются один раз, и затем разбить на куски. Таким образом, вам нужно собрать все данные IDAT вместе и затем раздувать все сразу.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]