summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAndreas Gohr <andi@splitbrain.org>2012-03-11 10:48:29 +0100
committerAndreas Gohr <andi@splitbrain.org>2012-03-11 10:48:29 +0100
commitd43eb44110dd836cad0da96d1f027260c2581d89 (patch)
treefed8b9729cd39109149c5e6f07e3901e6998cdbc /lib
parent83112a8af043de8ff379b16483077b78ffe2204f (diff)
downloadrpg-d43eb44110dd836cad0da96d1f027260c2581d89.tar.gz
rpg-d43eb44110dd836cad0da96d1f027260c2581d89.tar.bz2
Another go at building the pagetool sprite with a script
This time PHP and libGD is used so it should work on Windows as well. The image quality is much better this time and the active highlight color is read directly from the template's style.ini
Diffstat (limited to 'lib')
-rw-r--r--lib/tpl/dokuwiki/images/pagetools-build.php121
-rwxr-xr-xlib/tpl/dokuwiki/images/pagetools-build.sh56
-rw-r--r--lib/tpl/dokuwiki/images/pagetools-sprite.pngbin10389 -> 8178 bytes
-rw-r--r--lib/tpl/dokuwiki/images/pagetools.xcfbin14393 -> 0 bytes
4 files changed, 121 insertions, 56 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);
+}
+
diff --git a/lib/tpl/dokuwiki/images/pagetools-build.sh b/lib/tpl/dokuwiki/images/pagetools-build.sh
deleted file mode 100755
index 202e222e9..000000000
--- a/lib/tpl/dokuwiki/images/pagetools-build.sh
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/bin/sh
-#
-# This script generates a sprite from the unprocessed toolbar icons by combining them
-# and overlaying a color layer for the active state
-#
-# The final sprite is optimized with optipng
-#
-# The script currently expects a Linux system with current versions of the imagemagick
-# and optipng binaries in the path
-#
-# @author Andreas Gohr <andi@splitbrain.org>
-
-OUT=`dirname $0`
-IN="$OUT/pagetools"
-
-if [ ! -d "$IN" ]; then
- echo "Input folder $IN not found"
- exit 1
-fi
-
-if [ -z "$TEMP" ]; then
- TEMP="/tmp"
-fi
-
-if [ ! -d "$TEMP" ]; then
- echo "No temp directory available"
- exit 1
-fi
-
-# add up all images twice
-montage `for X in $IN/*.png; do echo -n "$X $X "; done` -background transparent -tile 1x -geometry 30x45 -gravity north $TEMP/icons.png
-
-# darken the image
-convert $TEMP/icons.png \( +clone -fill '#cccccc' -colorize 100% \) -compose multiply -composite $TEMP/darkicons.png
-
-# create the mask to highlight an active icon
-convert -size 30x30 xc:'#2b73b7' -gamma 0.7 $TEMP/active.png
-
-# create the full mask
-montage `for X in $IN/*.png; do echo -n "$TEMP/active.png "; done` -background transparent -tile 1x -geometry 30x60+0+15 -gravity south $TEMP/activemask.png
-
-# apply mask
-convert $TEMP/darkicons.png $TEMP/activemask.png \
-\( -clone 0 -alpha extract \) \
-\( -clone 0 -clone 1 -compose overlay -composite \) \
--delete 0,1 +swap -alpha off -compose copy_opacity -composite $OUT/pagetools-sprite.png
-
-# optimize final sprite
-optipng -o5 $OUT/pagetools-sprite.png
-
-# remove temporary images
-rm -f $TEMP/icons.png
-rm -f $TEMP/darkicons.png
-rm -f $TEMP/active.png
-rm -f $TEMP/activemask.png
-
diff --git a/lib/tpl/dokuwiki/images/pagetools-sprite.png b/lib/tpl/dokuwiki/images/pagetools-sprite.png
index 0e8b4a9bf..bbd7fd361 100644
--- a/lib/tpl/dokuwiki/images/pagetools-sprite.png
+++ b/lib/tpl/dokuwiki/images/pagetools-sprite.png
Binary files differ
diff --git a/lib/tpl/dokuwiki/images/pagetools.xcf b/lib/tpl/dokuwiki/images/pagetools.xcf
deleted file mode 100644
index 034b39a42..000000000
--- a/lib/tpl/dokuwiki/images/pagetools.xcf
+++ /dev/null
Binary files differ