Skip to content

Instantly share code, notes, and snippets.

@NickBeeuwsaert
Created August 16, 2013 19:59
Show Gist options
  • Save NickBeeuwsaert/6253064 to your computer and use it in GitHub Desktop.
Save NickBeeuwsaert/6253064 to your computer and use it in GitHub Desktop.
Quic n' dirty tool to convert a gimp gradient to a HTML5 Canvas Gradient (or with a little bit of modification, any other type gradient)
#!/usr/bin/env python
import sys
def lerp(s,e,t):
return s + (e-s)*t
def printStop(gradient_name, t, rgba):
newRGBA = [int(c*255) for c in rgba]
format_args = tuple([gradient_name, t] + newRGBA)
return "%s.addColorStop(%f, \"rgba(%d, %d, %d, %d)\");\n"%format_args;
def parseGimpGradient(filename):
file = open(filename, "r");
file.readline();
name = file.readline();
num_segments = int(file.readline());
segments = [[float(x) for x in file.readline().split()] for i in range(num_segments)];
gradient_name = name[len("Name: "):-1].replace(' ', '_');
resultStr = "%s = context.createLinearGradient(0,0,100,0);\n"%(gradient_name, );
for segment in segments:
start_pos = segment[0];
mid_pos = segment[1];
end_pos = segment[2];
start_rgb = segment[3:7];
end_rgb = segment[7:11];
resultStr += printStop(gradient_name, start_pos, start_rgb);
p = (mid_pos - start_pos) / (end_pos - start_pos);
mid_rgb = [lerp(start_rgb[x], end_rgb[x], p) for x in range(4)]
resultStr += printStop(gradient_name, mid_pos, mid_rgb);
resultStr += printStop(gradient_name, end_pos, end_rgb);
return resultStr
if __name__ == "__main__":
if len(sys.argv) != 2:
sys.exit("Usage: %s path_to_gimp_gradient");
print(parseGimpGradient(sys.argv[1]));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment