1<?php 2// phpcs:ignoreFile -- deprecated and will be removed 3/** 4 * This script generates a sprite from the unprocessed pagetool icons by combining them 5 * and overlaying a color layer for the active state. 6 * 7 * This script requires a current libGD to be available. 8 * 9 * The color for the active state is read from the style.ini's __link__ replacement 10 * 11 * The final sprite is optimized with optipng if available. 12 * 13 * @author Andreas Gohr <andi@splitbrain.org> 14 * @deprecated 2018-06-15 we no longer use PNG based icons 15 * @todo Maybe add some more error checking 16 */ 17$GAMMA = 0.8; 18$OPTIPNG = '/usr/bin/optipng'; 19 20if('cli' != php_sapi_name()) die('please run from commandline'); 21 22// load input images 23$input = glob('pagetools/*.png'); 24sort($input); 25$cnt = count($input); 26if(!$cnt){ 27 die("No input images found. This script needs to be called from within the image directory!\n"); 28} 29 30// create destination image 31$DST = imagecreatetruecolor(30,$cnt*45*2); 32imagesavealpha($DST, true); 33$C_trans = imagecolorallocatealpha($DST, 0, 0, 0, 127); 34imagefill($DST, 0, 0, $C_trans); 35 36// load highlight color from style.ini 37$ini = parse_ini_file('../style.ini',true); 38$COLOR = hex2rgb($ini['replacements']['__link__']); 39$C_active = imagecolorallocate($DST, $COLOR['r'],$COLOR['g'],$COLOR['b']); 40 41// add all the icons to the sprite image 42for($i=0; $i<$cnt; $i++){ 43 $base = $i*90; 44 45 $IN = imagecreatefrompng($input[$i]); 46 imagesavealpha($IN, true); 47 imagecolorscale($IN,$GAMMA); 48 imagecopy($DST,$IN, 0,$base, 0,0, 30,30); 49 imagedestroy($IN); 50 51 $IN = imagecreatefrompng($input[$i]); 52 imagesavealpha($IN, true); 53 imagecolorscale($IN,$GAMMA); 54 imagecopy($DST,$IN, 0,$base+45, 0,0, 30,30); 55 imagedestroy($IN); 56 57 imagelayereffect($DST, IMG_EFFECT_OVERLAY); 58 imagefilledrectangle($DST, 0,$base+45, 30,$base+45+30, $C_active); 59 imagelayereffect($DST, IMG_EFFECT_NORMAL); 60} 61 62// output sprite 63imagepng($DST,'pagetools-sprite.png'); 64imagedestroy($DST); 65 66// optimize if possible 67if(is_executable($OPTIPNG)){ 68 system("$OPTIPNG -o5 'pagetools-sprite.png'"); 69} 70 71/** 72 * Convert a hex color code to an rgb array 73 */ 74function hex2rgb($hex) { 75 // strip hash 76 $hex = str_replace('#', '', $hex); 77 78 // normalize short codes 79 if(strlen($hex) == 3){ 80 $hex = substr($hex,0,1). 81 substr($hex,0,1). 82 substr($hex,1,1). 83 substr($hex,1,1). 84 substr($hex,2,1). 85 substr($hex,2,1); 86 } 87 88 // calc rgb 89 return array( 90 'r' => hexdec(substr($hex, 0, 2)), 91 'g' => hexdec(substr($hex, 2, 2)), 92 'b' => hexdec(substr($hex, 4, 2)) 93 ); 94} 95 96/** 97 * Scale (darken/lighten) a given image 98 * 99 * @param resource $img The truetype GD image to work on 100 * @param float $scale Scale the colors by this value ( <1 darkens, >1 lightens) 101 */ 102function imagecolorscale(&$img, $scale){ 103 $w = imagesx($img); 104 $h = imagesy($img); 105 106 imagealphablending($img, false); 107 for($x = 0; $x < $w; $x++){ 108 for($y = 0; $y < $h; $y++){ 109 $rgba = imagecolorat($img, $x, $y); 110 $a = ($rgba >> 24) & 0xFF; 111 $r = ($rgba >> 16) & 0xFF; 112 $g = ($rgba >> 8) & 0xFF; 113 $b = $rgba & 0xFF; 114 115 $r = max(min(round($r*$scale),255),0); 116 $g = max(min(round($g*$scale),255),0); 117 $b = max(min(round($b*$scale),255),0); 118 119 $color = imagecolorallocatealpha($img, $r, $g, $b, $a); 120 imagesetpixel($img, $x, $y, $color); 121 } 122 } 123 imagealphablending($img, true); 124} 125 126