Advertisement
fastman92

HSV Palette Creator

Apr 6th, 2012
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.30 KB | None | 0 0
  1. <?php
  2. /*
  3. HSV Palette Creator
  4.  
  5. Author: fastman92
  6. Site: fastman92.ml
  7. */
  8. function HSV_TO_RGB ($H, $S, $V)  // HSV Values:Number 0-1
  9. {                                 // RGB Results:Number 0-255
  10.     $RGB = array();
  11.  
  12.     if($S == 0)
  13.     {
  14.         $R = $G = $B = $V * 255;
  15.     }
  16.     else
  17.     {
  18.         $var_H = $H * 6;
  19.         $var_i = floor( $var_H );
  20.         $var_1 = $V * ( 1 - $S );
  21.         $var_2 = $V * ( 1 - $S * ( $var_H - $var_i ) );
  22.         $var_3 = $V * ( 1 - $S * (1 - ( $var_H - $var_i ) ) );
  23.  
  24.         if       ($var_i == 0) { $var_R = $V     ; $var_G = $var_3  ; $var_B = $var_1 ; }
  25.         else if  ($var_i == 1) { $var_R = $var_2 ; $var_G = $V      ; $var_B = $var_1 ; }
  26.         else if  ($var_i == 2) { $var_R = $var_1 ; $var_G = $V      ; $var_B = $var_3 ; }
  27.         else if  ($var_i == 3) { $var_R = $var_1 ; $var_G = $var_2  ; $var_B = $V     ; }
  28.         else if  ($var_i == 4) { $var_R = $var_3 ; $var_G = $var_1  ; $var_B = $V     ; }
  29.         else                   { $var_R = $V     ; $var_G = $var_1  ; $var_B = $var_2 ; }
  30.  
  31.         $R = $var_R * 255;
  32.         $G = $var_G * 255;
  33.         $B = $var_B * 255;
  34.     }
  35.  
  36.     $RGB['R'] = $R;
  37.     $RGB['G'] = $G;
  38.     $RGB['B'] = $B;
  39.  
  40.     return $RGB;
  41. }
  42.  
  43. function getZAngleForPoint($x, $y)
  44. {
  45. return fmod((360.0 + fmod(rad2deg(atan2($y, $x))-90.0, 360.0)), 360.0);
  46. }
  47. set_time_limit (0);
  48.  
  49. define('PALETTE_SIZE', 512);
  50. define('PALETTE_HALF', PALETTE_SIZE/2);
  51. $im = imagecreatetruecolor(PALETTE_SIZE, PALETTE_SIZE);
  52. $white = imagecolorallocate($im, 255, 255, 255);
  53. imagecolortransparent($im, $white);
  54. ImageFillToBorder($im, 0, 0, $white, $white);  
  55. // $count = 0;
  56.     for($x = 0; $x < PALETTE_SIZE; $x++)
  57.     {
  58.         for($y = 0; $y < PALETTE_SIZE; $y++)
  59.         {
  60.         $distance = sqrt(pow(($x-PALETTE_HALF), 2) + pow(($y-PALETTE_HALF), 2));
  61.             if($distance <= PALETTE_HALF)
  62.             {
  63.             $angle = fmod((90.0 + getZAngleForPoint($x - PALETTE_HALF, $y - PALETTE_HALF))/360.0, 1.0);
  64.             $distance /= PALETTE_HALF;
  65.            
  66.             $color = HSV_TO_RGB($angle, $distance, 1.0);
  67.            
  68.             $color = imagecolorallocate($im, $color['R'], $color['G'], $color['B']);
  69.             imagesetpixel($im, $x, $y, $color);
  70.             imagecolordeallocate($im, $color);
  71.            
  72.             // $count++;
  73.             }
  74.         }
  75.     }
  76. // echo $count;
  77.    
  78. header('Content-Type: image/png');
  79. imagepng($im);
  80. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement