Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2014
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.10 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. from __future__ import division             # Division in Python 2.7
  4. import matplotlib
  5. matplotlib.use('Agg')                       # So that we can render files without GUI
  6. import matplotlib.pyplot as plt
  7. from matplotlib import rc
  8. import numpy as np
  9.  
  10. from matplotlib import colors
  11.  
  12. def plot_color_gradients(gradients, names):
  13.     # For pretty latex fonts (commented out, because it does not work on some machines)
  14.     #rc('text', usetex=True)
  15.     #rc('font', family='serif', serif=['Times'], size=10)
  16.     rc('legend', fontsize=10)
  17.  
  18.     column_width_pt = 400         # Show in latex using \the\linewidth
  19.     pt_per_inch = 72
  20.     size = column_width_pt / pt_per_inch
  21.  
  22.     fig, axes = plt.subplots(nrows=len(gradients), sharex=True, figsize=(size, size))
  23.     fig.subplots_adjust(top=0.95, bottom=0.05, left=0.25, right=0.95)
  24.  
  25.     for ax, gradient, name in zip(axes, gradients, names):
  26.         print( str(ax) + str(gradient) + str(name) )
  27.         # Create image with two lines and draw gradient on it
  28.         img = np.zeros((2, 1024, 3))
  29.         for i, v in enumerate(np.linspace(0, 1, 1024)):
  30.             img[:, i] = gradient(v)
  31.  
  32.         im = ax.imshow(img, aspect='auto')
  33.         im.set_extent([0, 1, 0, 1])
  34.         ax.yaxis.set_visible(False)
  35.  
  36.         pos = list(ax.get_position().bounds)
  37.         x_text = pos[0] - 0.25
  38.         y_text = pos[1] + pos[3]/2.
  39.         fig.text(x_text, y_text, name, va='center', ha='left', fontsize=10)
  40.  
  41.     fig.savefig('my-gradients.png')
  42.  
  43. def hsv2rgb(h, s, v):
  44.     h *= 360
  45.     H = h / 60
  46.     C = v * s
  47.     X = C * (1 - abs(H%2 - 1))
  48.     m = v - C
  49.     RGB = (0, 0, 0)
  50.     if 0 <= H < 1:
  51.         RGB = (C, X, 0)
  52.     elif  1 <= H < 2:
  53.         RGB = (X, C, 0)
  54.     elif 2 <= H < 3:
  55.         RGB = (0, C, X)
  56.     elif 3 <= H < 4:
  57.         RGB = (0, X, C)
  58.     elif 4 <= H < 5:
  59.         RGB = (X, 0, C)
  60.     elif 5 <= H < 6:
  61.         RGB = (C, 0, X)
  62.     return ((RGB[0]+m), (RGB[1]+m), (RGB[2]+m))
  63.  
  64. def gradient_rgb_bw(v):
  65.     return (v, v, v)
  66.  
  67.  
  68. def gradient_rgb_gbr(v):
  69.     #TODO
  70.     if v < 0.5:
  71.         return (0, 1-2*v, 2*v)
  72.     return ((v-0.5)*2, 0, (1-(v-0.5))*2)
  73.  
  74.  
  75. def gradient_rgb_gbr_full(v):
  76.     rgb = (0, 0, 0)
  77.     if v < 0.25:
  78.         rgb = (0, 1, v*4)
  79.     elif v < 0.5:
  80.         rgb = (0, 1-((v-0.25)*4), 1)
  81.     elif v < 0.75:
  82.         rgb = ((v-0.5)*4, 0, 1)
  83.     else:
  84.         rgb = (1, 0, (1-(v-0.75)*4))
  85.     return rgb
  86.    
  87.  
  88. def gradient_rgb_wb_custom(v):
  89.     if v < 1/3:
  90.         return (v*3, 0, 0)
  91.     elif v < 2/3:
  92.         return (1, (v-1/3)*3, 0)
  93.     else:
  94.         return (1, 1, (v-2/3)*3)
  95.  
  96.  
  97. def gradient_hsv_bw(v):
  98.     return hsv2rgb(0, 0, v)
  99.  
  100.  
  101. def gradient_hsv_gbr(v):
  102.     h = v * (26/36) + 10/36
  103.     return hsv2rgb(h, 1, 1)
  104.  
  105. def gradient_hsv_unknown(v):
  106.     # 120, 50, 100
  107.     # 60, 50, 100
  108.     # 0, 50, 100
  109.     return hsv2rgb((1-v)/3, 0.5, 1)
  110.  
  111.  
  112. def gradient_hsv_custom(v):
  113.     if v < 0.5:
  114.         v = v*2
  115.     else:
  116.         v = 1 - (v-0.5)*2
  117.     return gradient_hsv_gbr(v)
  118.  
  119.  
  120. if __name__ == '__main__':
  121.     def toname(g):
  122.         return g.__name__.replace('gradient_', '').replace('_', '-').upper()
  123.  
  124.     gradients = (gradient_rgb_bw, gradient_rgb_gbr, gradient_rgb_gbr_full, gradient_rgb_wb_custom,
  125.             gradient_hsv_bw, gradient_hsv_gbr, gradient_hsv_unknown, gradient_hsv_custom)
  126.     #gradients = (gradient_rgb_bw, gradient_rgb_gbr)
  127.     plot_color_gradients(gradients, [toname(g) for g in gradients])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement