123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- <?php
- declare (strict_types=1);
- namespace library\utils;
- // +----------------------------------------------------------------------
- // | [ WE CAN DO IT MORE SIMPLE ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2018-2020 rights reserved.
- // +----------------------------------------------------------------------
- // | Author: TABLE ME
- // +----------------------------------------------------------------------
- // | Date: 2020-09-21 10:16
- // +----------------------------------------------------------------------
- class Iconv
- {
- function phpmake_ico()
- {
- return true;
- }
- function GDtoICOstr(&$gd_ico_array)
- {
- foreach ($gd_ico_array as $key => $gd_image) {
- $IcoWidths[$key] = ImageSX($gd_image);
- $IcoHeights[$key] = ImageSY($gd_image);
- $bpp[$key] = ImageIsTrueColor($gd_image) ? 32 : 24;
- $totalcolors[$key] = ImageColorsTotal($gd_image);
- $icXOR[$key] = '';
- for ($y = $IcoHeights[$key] - 1; $y >= 0; $y--) {
- for ($x = 0; $x < $IcoWidths[$key]; $x++) {
- $argb = $this->gpc($gd_image, $x, $y);
- $a = round(255 * ((127 - $argb['alpha']) / 127));
- $r = $argb['red'];
- $g = $argb['green'];
- $b = $argb['blue'];
- if ($bpp[$key] == 32) {
- $icXOR[$key] .= chr($b) . chr($g) . chr($r) . chr($a);
- } elseif ($bpp[$key] == 24) {
- $icXOR[$key] .= chr($b) . chr($g) . chr($r);
- }
- if ($a < 128) {
- @$icANDmask[$key][$y] .= '1';
- } else {
- @$icANDmask[$key][$y] .= '0';
- }
- }
- while (strlen($icANDmask[$key][$y]) % 32) {
- $icANDmask[$key][$y] .= '0';
- }
- }
- $icAND[$key] = '';
- foreach ($icANDmask[$key] as $y => $scanlinemaskbits) {
- for ($i = 0; $i < strlen($scanlinemaskbits); $i += 8) {
- $icAND[$key] .= chr(bindec(str_pad(substr($scanlinemaskbits, $i, 8), 8, '0', STR_PAD_LEFT)));
- }
- }
- }
- foreach ($gd_ico_array as $key => $gd_image) {
- $biSizeImage = $IcoWidths[$key] * $IcoHeights[$key] * ($bpp[$key] / 8);
- $bfh[$key] = '';
- $bfh[$key] .= "\x28\x00\x00\x00";
- $bfh[$key] .= $this->le2s($IcoWidths[$key], 4);
- $bfh[$key] .= $this->le2s($IcoHeights[$key] * 2, 4);
- $bfh[$key] .= "\x01\x00";
- $bfh[$key] .= chr($bpp[$key]) . "\x00";
- $bfh[$key] .= "\x00\x00\x00\x00";
- $bfh[$key] .= $this->le2s($biSizeImage, 4);
- $bfh[$key] .= "\x00\x00\x00\x00";
- $bfh[$key] .= "\x00\x00\x00\x00";
- $bfh[$key] .= "\x00\x00\x00\x00";
- $bfh[$key] .= "\x00\x00\x00\x00";
- }
- $icondata = "\x00\x00";
- $icondata .= "\x01\x00";
- $icondata .= $this->le2s(count($gd_ico_array), 2);
- $dwImageOffset = 6 + (count($gd_ico_array) * 16);
- foreach ($gd_ico_array as $key => $gd_image) {
- $icondata .= chr($IcoWidths[$key]);
- $icondata .= chr($IcoHeights[$key]);
- $icondata .= chr($totalcolors[$key]);
- $icondata .= "\x00";
- $icondata .= "\x01\x00";
- $icondata .= chr($bpp[$key]) . "\x00";
- $dwBytesInRes = 40 + strlen($icXOR[$key]) + strlen($icAND[$key]);
- $icondata .= $this->le2s($dwBytesInRes, 4);
- $icondata .= $this->le2s($dwImageOffset, 4);
- $dwImageOffset += strlen($bfh[$key]);
- $dwImageOffset += strlen($icXOR[$key]);
- $dwImageOffset += strlen($icAND[$key]);
- }
- foreach ($gd_ico_array as $key => $gd_image) {
- $icondata .= $bfh[$key];
- $icondata .= $icXOR[$key];
- $icondata .= $icAND[$key];
- }
- return $icondata;
- }
- function le2s($number, $minbytes = 1)
- {
- $intstring = '';
- while ($number > 0) {
- $intstring = $intstring . chr($number & 255);
- $number >>= 8;
- }
- return str_pad($intstring, $minbytes, "\x00", STR_PAD_RIGHT);
- }
- function gpc(&$img, $x, $y)
- {
- if (!is_resource($img)) {
- return false;
- }
- return @ImageColorsForIndex($img, @ImageColorAt($img, $x, $y));
- }
- }
|