Skip to content
Snippets Groups Projects
Select Git revision
  • 8e84c1a71032c9483742c1b618ad8b98b56db6c4
  • master default protected
  • devel
  • feature/add-escaping-to-templates
  • feature/add-priority-sorting
  • 3.3.0
  • 3.2.1
  • 3.2.0
  • 3.1.0
  • 3.0.0
  • 2.4.12
  • 2.4.11
  • 2.4.10
  • 2.4.9
  • 2.4.8
  • 2.4.7
  • 2.4.6
  • 2.4.5
  • 2.4.4
  • 2.4.2
  • 2.4.1
  • 2.4.0
  • 2.3.2
  • 2.3.1
  • 2.3
25 results

input-image.php

Blame
  • ColorConversion.php 3.30 KiB
    <?php
    
    namespace WPDesk\Library\WPEmail\Helpers;
    
    class ColorConversion {
    
        /**
         * Determine whether a hex color is light.
         *
         * @param mixed $color Color.
         *
         * @return bool  True if a light color.
         */
        public static function is_hex_light( $color ): bool {
            $hex = str_replace( '#', '', $color );
    
            $c_r = hexdec( substr( $hex, 0, 2 ) );
            $c_g = hexdec( substr( $hex, 2, 2 ) );
            $c_b = hexdec( substr( $hex, 4, 2 ) );
    
            $brightness = ( ( $c_r * 299 ) + ( $c_g * 587 ) + ( $c_b * 114 ) ) / 1000;
    
            return $brightness > 155;
        }
    
        public static function light_or_dark( $color, $dark = '#000000', $light = '#FFFFFF' ) {
            return self::is_hex_light( $color ) ? $dark : $light;
        }
    
    
        /**
         * Convert RGB to HEX.
         *
         * @param string $color Color.
         *
         * @return array
         */
        public static function rgb_from_hex( string $color ): array {
            $color = str_replace( '#', '', $color );
            // Convert shorthand colors to full format, e.g. "FFF" -> "FFFFFF".
            $color = preg_replace( '~^(.)(.)(.)$~', '$1$1$2$2$3$3', $color );
    
            $rgb      = [];
            $rgb['R'] = hexdec( $color[0] . $color[1] );
            $rgb['G'] = hexdec( $color[2] . $color[3] );
            $rgb['B'] = hexdec( $color[4] . $color[5] );
    
            return $rgb;
        }
    
    
        /**
         * Make HEX color darker.
         *
         * @param string $color  Color.
         * @param int   $factor Darker factor.
         *                      Defaults to 30.
         *
         * @return string
         */
        public static function hex_darker( string $color, int $factor = 30 ): string {
            $base  = self::rgb_from_hex( $color );
            $color = '#';
    
            foreach ( $base as $v ) {
                $amount      = $v / 100;
                $amount      = self::round( $amount * $factor );
                $new_decimal = $v - $amount;
    
                $new_hex_component = dechex( $new_decimal );
                if ( strlen( $new_hex_component ) < 2 ) {
                    $new_hex_component = '0' . $new_hex_component;
                }
                $color .= $new_hex_component;
            }
    
            return $color;
        }
    
    
        /**
         * Make HEX color lighter.
         *
         * @param string $color  Color.
         * @param int    $factor Lighter factor.
         *                      Defaults to 30.
         *
         * @return string
         */
        public static function hex_lighter( string $color, int $factor = 30 ): string {
            $base  = self::rgb_from_hex( $color );
            $color = '#';
    
            foreach ( $base as $v ) {
                $amount      = 255 - $v;
                $amount      = $amount / 100;
                $amount      = self::round( $amount * $factor );
                $new_decimal = $v + $amount;
    
                $new_hex_component = dechex( $new_decimal );
                if ( strlen( $new_hex_component ) < 2 ) {
                    $new_hex_component = '0' . $new_hex_component;
                }
                $color .= $new_hex_component;
            }
    
            return $color;
        }
    
        /**
         * @param     $val
         * @param int $precision
         * @param int $mode
         *
         * @return float
         */
        public static function round( $val, int $precision = 0, int $mode = PHP_ROUND_HALF_UP ): float {
            if ( ! is_numeric( $val ) ) {
                $val = floatval( $val );
            }
    
            return round( $val, $precision, $mode );
        }
    
    }