/var/log/life.log
Блог программиста из солнечной Бурятии

Изображения из файла отчёта Fast Report

Понадобилось странное: достать изображения их шаблона отчёта fast report. На деле это оказался xml файл, в котором данные об изображении хранятся в тегах TfrxPictureView. На вид было похоже, что там бинарные данные в шестнадцетиричном представлении. На деле так и оказалось. Заглянув внутрь увидел TBitmap, чего и следовало ожидать, т.к. программа, что их использовала была на дельфи или си билдере, хотя я наделся увидеть сигнатуры jpeg. Какая структура у TBitmap при сериализации в файл я понятия не имею, быстрое гугление результатов не дало. Понадеявшись, что там в заголовке какая-то служебная информация типа размера файла и пр. а дальше идёт bmp побрутофорсил маленько. Получилось:

1
2
3
4
5
6
$form_name = "np.fr3";
preg_match_all('#Picture\.PropData="([0-9A-F]*)"#', file_get_contents($form_name), $matches);
$i = 0;
foreach ($matches[1] as $value) {
    file_put_contents(++$i.'.bmp',substr(pack("H*" ,$value),22));
}