У меня есть код, который получает информацию об изображениях значков:
$icon_data = file_get_contents ($_ARG['icon']);
$icons = [];
$offset = 4;
$icon_count = unpack ('S', substr ($icon_data, $offset, 2));
$icon_count = $icon_count[1];
$offset += 2;
for ($i = 0; $i < $icon_count; ++$i) {
$icon = [];
$val = unpack ('C', substr ($icon_data, $offset, 1));
$icon['width'] = $val[1];
$offset += 1;
$val = unpack ('C', substr ($icon_data, $offset, 1));
$icon['height'] = $val[1];
$offset += 1;
$val = unpack ('C', substr ($icon_data, $offset, 1));
$icon['colors'] = $val[1];
$offset += 2;
$val = unpack ('S', substr ($icon_data, $offset, 2));
$icon['planes'] = $val[1];
$offset += 2;
$val = unpack ('S', substr ($icon_data, $offset, 2));
$icon['bitcount'] = $val[1];
$offset += 2;
$val = unpack ('L', substr ($icon_data, $offset, 4));
$icon['size'] = $val[1];
$offset += 4;
$val = unpack ('L', substr ($icon_data, $offset, 4));
$icon['offset'] = $val[1];
$offset += 4;
$icon['data'] = substr ($icon_data, $icon['offset'], $icon['size']);
$icons[] = $icon;
}
$icon_group = pack ('S', 0);
$icon_group .= pack ('S', 1);
$icon_group .= pack ('S', $icon_count);
for ($i = 0; $i < $icon_count; ++$i) {
$icon_group .= pack ('C', $icons[$i]['width']);
$icon_group .= pack ('C', $icons[$i]['height']);
$icon_group .= pack ('C', $icons[$i]['colors']);
$icon_group .= pack ('C', 0); // RESERVED
$icon_group .= pack ('S', $icons[$i]['planes']);
$icon_group .= pack ('S', $icons[$i]['bitcount']);
$icon_group .= pack ('L', $icons[$i]['size']);
$icon_group .= pack ('S', ($i + 1));
}
Это работает как шарм. Например, это вывод $ иконки переменная выглядит
Array
(
[0] => Array
(
[width] => 48
[height] => 48
[colors] => 16
[planes] => 1
[bitcount] => 4
[size] => 1640
[offset] => 214
[data] => ( 0 ` яяя Ђ Ђ ЂЂ Ђ Ђ ЂЂЂ ААА ЂЂЂ я я яя я я яяя яяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяу“›“93?яяяяяяяяяяхяяяяя39ёwp·ё“?яяяяяяяяяц€яяяу“·{ё»‹{y3яяяяяяяяяшV†яс9·x»‹·ё··№?яяяяяяяя4e8F7{»‹ё»{»{s“яяяяяяяяBSd€»ё»{····»3яяяяяяяф$C‡»‹‹{ё{»{{‰їяяяяяяятAo9ё·ё·»{·····і?яяяяяяяяфх7{»‹»‡·»{{s?яяяяяяяяяу0»x»w»{···°{џяяяяяяяяяс‹»‹»{·{{{ °·?яяяяяяяяя;{ё····{ё°·°?яяяяяяяяуђ·»{{{{№»·° џяяяяяяяяс;{°{і37›p °?яяяяяяяяуp{p · іс» ?яяяяяяящp· °1яу7 ?яяяяO/я$ы °?яс° џяяяOяфяя яуp°° ?яяцтхтя7 і?т› џяяяхтO/B {“90°°° s?яяяяЏB ° »і{ ±яяяяяяo?O8 { °°» °°°“яяяяяяцшшы ° °°?яяяяяOя_oSp » ·іяяяяясяяVуp °°°°»1яяяяятфяяacђ °°» ‹яяяяяф%тф!FV3 °°°°°1яяяяят_яЏO(Џѓp° ° °·sяяяяц_$4уфhS7{°» »џaяяяяяшCOoRO4hЃ° °» {s/фяяяяяя„4х/A$€9 °pp·3яЏяяяяяяяe$6шцфѓѓ8і№2qфуBяяяяяяяцVAd4oЏф(€€XGvсO„яяяяяяяяшCHшBR_O‡~wO$Џяяяяяяяяяh44Џ„%$я€xяяЏяяяяяяяяяяHFR„Ce$!яфoЏяяяяяяяяяяя…hц$RVRCCHOЏяяяяяяяяяяятHefX%ad4„шoяяяяяяяяяяяяя€„ehH4cBЏ„ЏяяяяяяяяяяяяяяH†„€F„€HшЏяяяяяяяяяяяяяяя€€d€HF„†_яяяяяяяяяяяяяяяяц€„†…hXoяяяяяяяяяяяяяяяяяш€€hFgЏяяяяяяяяяяяяяяяяяяяцw€яяяяяяяяяяяяяяяяяяяяяя†_яяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяь?ш яяяшА яьяшЂ яшяр яшяр яряр яряа яряА яаяА яАяЂ яАяЂ яЂя яЂю я ь ю ш ь ш ш р ш а р Ђ а Ђ Ђ А Ђ р А ь р ш ь р ш а р А а Ђ А Ђ Ђ Ђ Ђ А Ђ а А ш а ю ш я ю яА я яр яАяь яряя яьяяА яяяяр яяяяь яяяяя яяяяяа ?яяяяяь ?яяяяяяАяяяяяяяяяя
)
[1] => Array
(
[width] => 32
[height] => 32
[colors] => 16
[planes] => 1
[bitcount] => 4
[size] => 744
[offset] => 1854
[data] => ( @ яяяя Ђ Ђ ЂЂ Ђ ЂЂ ЂЂЂЂ ЂААААЂЂЂЂ я я яя я яя яяяя я яяяяяяяяяяяяяяяяяяяяяяяяя›“—3џяяяяяяяЏяя№8{{ѓ?яяяяяя€aя—{ё»‡·“яяяяяхцVЃ{»‹·»{sяяяяятRa0ё··»{{і?яяяяяфсx»‹{··»?яяяяяя»{»{{{p»џяяяяяя;{··°·» °?яяяяяу7·»{№іp°яяяяясp°3у» ?яяяяяуpс ?яя%яOу яш ° џяяO$ч ; ?яят_$ {·°°° ?яяяшх( °sяяяяятCp ° °·1яяяяфсa °°°°{яяяях/$6[ °їяяяшяABX(° ёяяяяe$?O†— °°ёЏяяяяяцRFсc‹syѓяRяяяяяшAad4%€†яoяяяяяя†44штH‡BB_яяяяяяяHFЏ„RO%хoяяяяяяяя…hш%4ЏЏяяяяяяяятH†HF‚HЏяяяяяяяяяя€†…e$ЏяяяяяяяяяяяH†XhЏяяяяяяяяяяяяшhwOяяяяяяяяяяяяяяOяяяяяяяяяяяяяяяяяяяяяяяя‡АяЃ я я ю ь ь ш р р а А Ђ Ђ а а А Ђ Ђ Ђ А а ш ю яЂ яА яш яю яяЂяяряяяя
)
[2] => Array
(
[width] => 24
[height] => 24
[colors] => 16
[planes] => 1
[bitcount] => 4
[size] => 488
[offset] => 2598
[data] => ( 0 яяяя Ђ Ђ ЂЂ Ђ ЂЂ ЂЂЂЂ ЂААААЂЂЂЂ я я яя я яя яяяя я яяяяяяу“—‹9яяяяфЏя—·ё·sџяяяCfЃ‹ё»{ёіяяяф7{{{·»‰яяяяу‹ё»»{іяяяях·»w··°яяяяы{·»›{ ёяяяя°1° яяяс0°я‹ яфтOЂ qс ° ятAя° і; яя$ЏЂ °°·3яяяф0 °°яхя%' qяфя$Sp°°°·?яя†oa‹ЃяяяяHхцш77€яOяяяц‚_ЏB€v/яяяяхhFoЏяяяяяш…acCAoяяяяяяц†„ef_яяяяяяяшh†Xoяяяяяяяяхh€Џяяяяяяяяяяцяяь8 ь ьш ьш шр шр ра рА аЂ А Ђ Ђ Ђ Ђ Ђ Ђ А Ђр Аь ря ьяАяяряяюя
)
)
Например, если в файле значков есть три изображения. Я пытался использовать его для редактирования ресурсов с помощью функции win32std res_get (), но он ничего не делал, но содержимое раздела [data] кажется правильным (я сравнил его вручную)
Вот мой код, который сделал это:
res_set ($exe_file, 'RT_GROUP_ICON', 'MAINICON', $icon_group);
for ($i = 0; $i < $icon_count; ++$i)
res_set ($exe_file, 'RT_ICON', '#'.($i + 1), $icons[$i]['data']);
и я также поставил этот контент жестко, как
res_set ($exe_file, 'RT_ICON', '#1', substr ($image_data, 214, 1640));
но нет результата.
Любая помощь в решении этой проблемы приветствуется.
Большое спасибо!
Задача ещё не решена.
Других решений пока нет …