color.php
来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHP 代码 · 共 748 行 · 第 1/2 页
PHP
748 行
<?php// +----------------------------------------------------------------------+// | PHP Version 4 |// +----------------------------------------------------------------------+// | Copyright (c) 1997-2003 The PHP Group |// +----------------------------------------------------------------------+// | This source file is subject to version 2.02 of the PHP license, |// | that is bundled with this package in the file LICENSE, and is |// | available at through the world-wide-web at |// | http://www.php.net/license/2_02.txt. |// | If you did not receive a copy of the PHP license and are unable to |// | obtain it through the world-wide-web, please send a note to |// | license@php.net so we can mail you a copy immediately. |// +----------------------------------------------------------------------+// | Authors: Jason Lotito <jason@lehighweb.com> |// | Ulf Wendel <ulf.wendel@phpdoc.de> |// | Sebastian Bergmann <sb@sebastian-bergmann.de> |// | Laurent Laville <pear@laurent-laville.org> |// +----------------------------------------------------------------------+//// $Id: Color.php,v 1.13 2004/05/06 06:15:25 sebastian Exp $/*** Color* Handles and manages color mixing.* * TODO: Eventually, I would like to expand upon this class to include other* color types, and make it handle colors in a cleaner manner, however, as of* right now, I would rather get it out rather than remain vaporware. At least* this way, other people can take a look at it, and make suggestions.* Besides, someone else might get more use out of it than I.** The class is really simple to use, and pretty much does its job fairly well.* A sample of what can be done with this class is found here: * http://www.newbienetwork.net/class.colour.php* As you can well see, it is very good at what it does, and is rather quick.* If someone has ideas or thoughts on this, please let me know. I would like* expand it to handling image colors, as well as converting to CMYK, and even* the dreaded Pantone(TM) colors! If someone knows of converting algo's or* know of anything that might be of interest to me, let me know =).* about it to.** Also, one more thing - Yes, I know, I will be try to get off the setColors()* 2 color limitation, but since this script started out as a simple function* that could _mix_ to colors together, it just kept going like that.** If you notice, the version is only 0.1. This is because I don't know of* anyone really using it, and so it hasn't been tested completely. The more* input I get back on it, the closer it goes to a 1.0 release.** @version 0.2* @author Jason Lotito <jason@lehighweb.com>*/class Image_Color{ /** * first color that the class handles for ranges and mixes. * @access private * @see setColors */ var $color1 = array(); /** * second color that the class handles for ranges and mixes. * @access private */ var $color2 = array(); /** * Boolean value for determining whether colors outputted should be websafe or not. Defaults to false. * @access private * @see setWebSafe */ var $_websafeb = false; /** * the websafe ranges we use to determine where to set each value. The key * is the websafe part, and the value is the non-websafe value. * @access private */ var $websafe = array( '00' => '00', '33' => '51', '66' => '102', '99' => '153', 'cc' => '204', 'ff' => '255'); /** * mixColors * Given two colors, this will return a mix of the two together. * * @access public * @param string(optional) $col1 The first color you want to mix * @param string(optional) $col2 The second color you want to mix * @result string The mixed color. * @author Jason Lotito <jason@lehighweb.com> */ function mixColors ( $col1=false, $col2=false ) { if ( $col1 ) { $this->_setColors($col1, $col2); } // RED $color3[0] = ( $this->color1[0] + $this->color2[0] ) / 2; // GREEN $color3[1] = ( $this->color1[1] + $this->color2[1] ) / 2; // BLUE $color3[2] = ( $this->color1[2] + $this->color2[2] ) / 2; if ( $this->_websafeb ) { array_walk( $color3, '_makeWebSafe' ); } return $this->_returnColor( $color3 ); } /** * setWebSafe * Sets whether we should output websafe colors or not. * * @access public * @param bool=true If set to true (def.), websafe is on, otherwise not. * @author Jason Lotito <jason@lehighweb.com> */ function setWebSafe( $bool=true ) { $this->_websafeb = $bool; } /** * setColors * This class primarily works with two colors, and using this function, you * can easily set both colors. * * @access public * @param string The first color in hex format * @param string The second color in hex format * @author Jason Lotito <jason@lehighweb.com> */ function setColors( $col1, $col2 ) { $this->_setColors($col1, $col2); } /** * getRange * Given a degree, you can get the range of colors between one color and * another color. * * @access public * @param string $degrees How much each 'step' between the colors we should take. * @return array Returns an array of all the colors, one element for each color. * @author Jason Lotito <jason@lehighweb.com> */ function getRange ( $degrees=2 ) { if ( $degrees == 0 ) $degrees = 1; /** The degrees give us how much we should advance each color at each phase of the loop. This way, the advance is equal throughout all the colors. TODO: Allow for degrees for individual parts of the colors. */ // RED $red_steps = ( $this->color2[0] - $this->color1[0] ) / $degrees; // GREEN $green_steps = ( $this->color2[1] - $this->color1[1] ) / $degrees; // BLUE $blue_steps = ( $this->color2[2] - $this->color1[2] ) / $degrees; $allcolors = array(); $x = 0; /** The loop stops once any color has gone beyond the end color. */ // Loop through all the degrees between the colors for ( $x = 0; $x < $degrees; $x++ ) { $col[0] = $red_steps * $x; $col[1] = $green_steps * $x; $col[2] = $blue_steps * $x; // Loop through each R, G, and B for ( $i = 0; $i < 3; $i++ ) { $partcolor = $this->color1[$i] + $col[$i]; // If the color is less than 256 if ( $partcolor < 256 ) { // Makes sure the colors is not less than 0 if ( $partcolor > -1 ) { $newcolor[$i] = $partcolor; } else { $newcolor[$i] = 0; } // Color was greater than 255 } else { $newcolor[$i] = 255; } } if ( $this->_websafeb ) { array_walk( $newcolor, '_makeWebSafe' ); } $allcolors[] = $this->_returnColor($newcolor); } return $allcolors; } /** * changeLightness * Changes the lightness of the color. * * The argument it takes determines the direction to go. If you give it a * negative number, it will make the color darker, however, if you give it * a positive number, it gets lighter. * @access public * @param int degree The degree of the change you wish to take place. * @author Jason Lotito <jason@lehighweb.com> */ function changeLightness ( $degree=10 ) { $color2 =& $this->color2; $color1 =& $this->color1; for ( $x = 0; $x < 3; $x++ ) { if ( ( $color1[$x] + $degree ) < 256 ) { if ( ( $color1[$x] + $degree ) > -1 ) { $color1[$x] += $degree; } else { $color1[$x] = 0; } } else { $color1[$x] = 255; } } for ( $x = 0; $x < 3; $x++ ) { if ( ( $color2[$x] + $degree ) < 256 ) { if ( ( $color2[$x] + $degree ) > -1 ) { $color2[$x] += $degree; } else { $color2[$x] = 0; } } else { $color2[$x] = 255; } } } /** * getTextColor * Given a color, will return whether you should use a dark font or a light font. * * You can change the dark and the light color, however by default, they are * set to be 'white' (ffffff) and 'black' (000000), which are standard text * colors. This is determined by the G(reen) value of RGB. * * @access public * @param string $color The color to analyze * @param string $light(optional) The light color value to return if we should have light text * @param string $dark(optional) The dark color value to return if we should have dark text * @author Jason Lotito <jason@lehighweb.com> */ function getTextColor ( $color, $light='FFFFFF', $dark='000000' ) { $color = Image_Color::_splitColor($color); if ( $color[1] > hexdec('66') ) { return $dark; } else { return $light; } } /** * _setColors * Internal method to correctly set the colors. * * @access private * @param string Color 1 * @param string Color 2 * @author Jason Lotito <jason@lehighweb.com> */ function _setColors ( $col1, $col2 ) { $this->color1 = Image_Color::_splitColor($col1); $this->color2 = Image_Color::_splitColor($col2); } /** * _splitColor * Given a color, it will properly split it up into a 3 element dec. array. * * @access private * @param string The color. * @return array 3 element array containing the RGB information. * @author Jason Lotito <jason@lehighweb.com> */ function _splitColor ( $color ) { $color = str_replace('#', '', $color); $c[] = hexdec( substr( $color, 0, 2 ) ); $c[] = hexdec( substr( $color, 2, 2 ) ); $c[] = hexdec( substr( $color, 4, 2 ) ); return $c; } /** * _returnColor * Given an array of 3 elements containing RGB decimal information, it will * return an HTML compatible HEX color. * * @access private * @author Jason Lotito <jason@lehighweb.com> */ function _returnColor ( $color ) { return sprintf('%02X%02X%02X',$color[0],$color[1],$color[2]); } /** * rgb2hex * Given an array of 3 elements containing RGB information, it will return * a string of the HEX color. * * @access public * @param array 3 element array. * @return string * @author Jason Lotito <jason@lehighweb.com> */ function rgb2hex ( $color ) { return Image_Color::_returnColor( $color ); } /** * hex2rgb * Given a hex color, returns a 4 element array, with keys 0-2 containing * the RGB values appropriately and with key 3 containing the original * color. * * @access public * @param string The HEX string of the color. * @return array 4 element array. * @author Jason Lotito <jason@lehighweb.com> */ function hex2rgb ( $hex ) { $return = Image_Color::_splitColor( $hex ); $return['hex'] = $hex; return $return; } /**
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?