Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- from __future__ import division # Division in Python 2.7
- import matplotlib
- matplotlib.use('Agg') # So that we can render files without GUI
- import matplotlib.pyplot as plt
- from matplotlib import rc
- import numpy as np
- from matplotlib import colors
- def plot_color_gradients(gradients, names):
- # For pretty latex fonts (commented out, because it does not work on some machines)
- #rc('text', usetex=True)
- #rc('font', family='serif', serif=['Times'], size=10)
- rc('legend', fontsize=10)
- column_width_pt = 400 # Show in latex using \the\linewidth
- pt_per_inch = 72
- size = column_width_pt / pt_per_inch
- fig, axes = plt.subplots(nrows=len(gradients), sharex=True, figsize=(size, size))
- fig.subplots_adjust(top=0.95, bottom=0.05, left=0.25, right=0.95)
- for ax, gradient, name in zip(axes, gradients, names):
- print( str(ax) + str(gradient) + str(name) )
- # Create image with two lines and draw gradient on it
- img = np.zeros((2, 1024, 3))
- for i, v in enumerate(np.linspace(0, 1, 1024)):
- img[:, i] = gradient(v)
- im = ax.imshow(img, aspect='auto')
- im.set_extent([0, 1, 0, 1])
- ax.yaxis.set_visible(False)
- pos = list(ax.get_position().bounds)
- x_text = pos[0] - 0.25
- y_text = pos[1] + pos[3]/2.
- fig.text(x_text, y_text, name, va='center', ha='left', fontsize=10)
- fig.savefig('my-gradients.png')
- def hsv2rgb(h, s, v):
- h *= 360
- H = h / 60
- C = v * s
- X = C * (1 - abs(H%2 - 1))
- m = v - C
- RGB = (0, 0, 0)
- if 0 <= H < 1:
- RGB = (C, X, 0)
- elif 1 <= H < 2:
- RGB = (X, C, 0)
- elif 2 <= H < 3:
- RGB = (0, C, X)
- elif 3 <= H < 4:
- RGB = (0, X, C)
- elif 4 <= H < 5:
- RGB = (X, 0, C)
- elif 5 <= H < 6:
- RGB = (C, 0, X)
- return ((RGB[0]+m), (RGB[1]+m), (RGB[2]+m))
- def gradient_rgb_bw(v):
- return (v, v, v)
- def gradient_rgb_gbr(v):
- #TODO
- if v < 0.5:
- return (0, 1-2*v, 2*v)
- return ((v-0.5)*2, 0, (1-(v-0.5))*2)
- def gradient_rgb_gbr_full(v):
- rgb = (0, 0, 0)
- if v < 0.25:
- rgb = (0, 1, v*4)
- elif v < 0.5:
- rgb = (0, 1-((v-0.25)*4), 1)
- elif v < 0.75:
- rgb = ((v-0.5)*4, 0, 1)
- else:
- rgb = (1, 0, (1-(v-0.75)*4))
- return rgb
- def gradient_rgb_wb_custom(v):
- if v < 1/3:
- return (v*3, 0, 0)
- elif v < 2/3:
- return (1, (v-1/3)*3, 0)
- else:
- return (1, 1, (v-2/3)*3)
- def gradient_hsv_bw(v):
- return hsv2rgb(0, 0, v)
- def gradient_hsv_gbr(v):
- h = v * (26/36) + 10/36
- return hsv2rgb(h, 1, 1)
- def gradient_hsv_unknown(v):
- # 120, 50, 100
- # 60, 50, 100
- # 0, 50, 100
- return hsv2rgb((1-v)/3, 0.5, 1)
- def gradient_hsv_custom(v):
- if v < 0.5:
- v = v*2
- else:
- v = 1 - (v-0.5)*2
- return gradient_hsv_gbr(v)
- if __name__ == '__main__':
- def toname(g):
- return g.__name__.replace('gradient_', '').replace('_', '-').upper()
- gradients = (gradient_rgb_bw, gradient_rgb_gbr, gradient_rgb_gbr_full, gradient_rgb_wb_custom,
- gradient_hsv_bw, gradient_hsv_gbr, gradient_hsv_unknown, gradient_hsv_custom)
- #gradients = (gradient_rgb_bw, gradient_rgb_gbr)
- plot_color_gradients(gradients, [toname(g) for g in gradients])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement