diff options
author | Andreas Gohr <andi@splitbrain.org> | 2012-04-15 13:45:45 +0200 |
---|---|---|
committer | Andreas Gohr <andi@splitbrain.org> | 2012-04-15 13:45:45 +0200 |
commit | ae7c596cf4e6a0a09ebcf01fe8ae98789360c5be (patch) | |
tree | f156252e404e9893922cb5d984fdc646644b6c17 /lib/tpl/dokuwiki/images/pagetools-build.php | |
parent | f41c79d730286e8e8c95deb88a4c876e08e278a2 (diff) | |
parent | 026b314868ee80aca644bf4107f78d8e8052b43e (diff) | |
download | rpg-ae7c596cf4e6a0a09ebcf01fe8ae98789360c5be.tar.gz rpg-ae7c596cf4e6a0a09ebcf01fe8ae98789360c5be.tar.bz2 |
Merge branch 'master' into htmlmail
* master: (382 commits)
Romanian language update
Marathi language update
Arabic Language Update
when there's not enough space for images, make sure they stay proportional (might be FS#2480)
added minimal RTL print styles (part of FS#2185)
moved plugins' rtl.css to their style.css counterpart (part of FS#2185)
removed all browser-specific gradients as the recently (in 42ff6730) introduced svg makes them unnecessary
removed comments from accidentally commented lines in tpl_includeFile()
removed obsolete template file
added tpl_includeFile() to core
Make getTitle method in remote interface public
Changed an error code in XML-RPC interface. This error hasn't anything to do with the rest of the -32600 errors.
BG: language update
Korean language update
fixed performance issues with gradient in Firefox (which also added gradient support for IE9) (FS#2447)
deleted very old (and unused) images
added accidentally removed '<?php' back in (was in 57fc5edd)
wrapped X-UA-Compatible meta tag with conditional comments
added explanation to todo in _forms.css
removed problematic 'overflow: hidden' from lists again ('unfixes' FS#1950)
...
Conflicts:
inc/auth.php
inc/load.php
Diffstat (limited to 'lib/tpl/dokuwiki/images/pagetools-build.php')
-rw-r--r-- | lib/tpl/dokuwiki/images/pagetools-build.php | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/lib/tpl/dokuwiki/images/pagetools-build.php b/lib/tpl/dokuwiki/images/pagetools-build.php new file mode 100644 index 000000000..1b7262ad5 --- /dev/null +++ b/lib/tpl/dokuwiki/images/pagetools-build.php @@ -0,0 +1,121 @@ +<?php +/** + * 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> + * @todo Maybe add some more error checking + */ +$GAMMA = 0.8; +$OPTIPNG = '/usr/bin/optipng'; + +// 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 ressource $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); +} + |