123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- <?php
- // phpcs:ignoreFile -- deprecated and will be removed
- /**
- * This script generates a sprite from the unprocessed pagetool icons by combining them
- * and overlaying a color layer for the active state.
- *
- * This script requires a current libGD to be available.
- *
- * The color for the active state is read from the style.ini's __link__ replacement
- *
- * The final sprite is optimized with optipng if available.
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @deprecated 2018-06-15 we no longer use PNG based icons
- * @todo Maybe add some more error checking
- */
- $GAMMA = 0.8;
- $OPTIPNG = '/usr/bin/optipng';
- if('cli' != php_sapi_name()) die('please run from commandline');
- // load input images
- $input = glob('pagetools/*.png');
- sort($input);
- $cnt = count($input);
- if(!$cnt){
- die("No input images found. This script needs to be called from within the image directory!\n");
- }
- // create destination image
- $DST = imagecreatetruecolor(30,$cnt*45*2);
- imagesavealpha($DST, true);
- $C_trans = imagecolorallocatealpha($DST, 0, 0, 0, 127);
- imagefill($DST, 0, 0, $C_trans);
- // load highlight color from style.ini
- $ini = parse_ini_file('../style.ini',true);
- $COLOR = hex2rgb($ini['replacements']['__link__']);
- $C_active = imagecolorallocate($DST, $COLOR['r'],$COLOR['g'],$COLOR['b']);
- // add all the icons to the sprite image
- for($i=0; $i<$cnt; $i++){
- $base = $i*90;
- $IN = imagecreatefrompng($input[$i]);
- imagesavealpha($IN, true);
- imagecolorscale($IN,$GAMMA);
- imagecopy($DST,$IN, 0,$base, 0,0, 30,30);
- imagedestroy($IN);
- $IN = imagecreatefrompng($input[$i]);
- imagesavealpha($IN, true);
- imagecolorscale($IN,$GAMMA);
- imagecopy($DST,$IN, 0,$base+45, 0,0, 30,30);
- imagedestroy($IN);
- imagelayereffect($DST, IMG_EFFECT_OVERLAY);
- imagefilledrectangle($DST, 0,$base+45, 30,$base+45+30, $C_active);
- imagelayereffect($DST, IMG_EFFECT_NORMAL);
- }
- // output sprite
- imagepng($DST,'pagetools-sprite.png');
- imagedestroy($DST);
- // optimize if possible
- if(is_executable($OPTIPNG)){
- system("$OPTIPNG -o5 'pagetools-sprite.png'");
- }
- /**
- * Convert a hex color code to an rgb array
- */
- function hex2rgb($hex) {
- // strip hash
- $hex = str_replace('#', '', $hex);
- // normalize short codes
- if(strlen($hex) == 3){
- $hex = substr($hex,0,1).
- substr($hex,0,1).
- substr($hex,1,1).
- substr($hex,1,1).
- substr($hex,2,1).
- substr($hex,2,1);
- }
- // calc rgb
- return array(
- 'r' => hexdec(substr($hex, 0, 2)),
- 'g' => hexdec(substr($hex, 2, 2)),
- 'b' => hexdec(substr($hex, 4, 2))
- );
- }
- /**
- * Scale (darken/lighten) a given image
- *
- * @param resource $img The truetype GD image to work on
- * @param float $scale Scale the colors by this value ( <1 darkens, >1 lightens)
- */
- function imagecolorscale(&$img, $scale){
- $w = imagesx($img);
- $h = imagesy($img);
- imagealphablending($img, false);
- for($x = 0; $x < $w; $x++){
- for($y = 0; $y < $h; $y++){
- $rgba = imagecolorat($img, $x, $y);
- $a = ($rgba >> 24) & 0xFF;
- $r = ($rgba >> 16) & 0xFF;
- $g = ($rgba >> 8) & 0xFF;
- $b = $rgba & 0xFF;
- $r = max(min(round($r*$scale),255),0);
- $g = max(min(round($g*$scale),255),0);
- $b = max(min(round($b*$scale),255),0);
- $color = imagecolorallocatealpha($img, $r, $g, $b, $a);
- imagesetpixel($img, $x, $y, $color);
- }
- }
- imagealphablending($img, true);
- }
|