win32std res_set () не работает во время редактирования ресурса изображения, но содержимое корректно

У меня есть код, который получает информацию об изображениях значков:

$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));

но нет результата.

Любая помощь в решении этой проблемы приветствуется.

Большое спасибо!

1

Решение

Задача ещё не решена.

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

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

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