diff options
Diffstat (limited to 'plugins/jetpack/_inc/lib/tonesque.php')
-rw-r--r-- | plugins/jetpack/_inc/lib/tonesque.php | 237 |
1 files changed, 0 insertions, 237 deletions
diff --git a/plugins/jetpack/_inc/lib/tonesque.php b/plugins/jetpack/_inc/lib/tonesque.php deleted file mode 100644 index 17158e3d..00000000 --- a/plugins/jetpack/_inc/lib/tonesque.php +++ /dev/null @@ -1,237 +0,0 @@ -<?php -/* -Plugin Name: Tonesque -Plugin URI: http://automattic.com/ -Description: Grab an average color representation from an image. -Version: 1.0 -Author: Automattic, Matias Ventura -Author URI: http://automattic.com/ -License: GNU General Public License v2 or later -License URI: http://www.gnu.org/licenses/gpl-2.0.html -*/ - -class Tonesque { - - private $image_url = ''; - private $image_obj = NULL; - private $color = ''; - - function __construct( $image_url ) { - if ( ! class_exists( 'Jetpack_Color' ) ) { - jetpack_require_lib( 'class.color' ); - } - - $this->image_url = esc_url_raw( $image_url ); - $this->image_url = trim( $this->image_url ); - /** - * Allows any image URL to be passed in for $this->image_url. - * - * @module theme-tools - * - * @since 2.5.0 - * - * @param string $image_url The URL to any image - */ - $this->image_url = apply_filters( 'tonesque_image_url', $this->image_url ); - - $this->image_obj = self::imagecreatefromurl( $this->image_url ); - } - - public static function imagecreatefromurl( $image_url ) { - $data = null; - - // If it's a URL: - if ( preg_match( '#^https?://#i', $image_url ) ) { - // If it's a url pointing to a local media library url: - $content_url = content_url(); - $_image_url = set_url_scheme( $image_url ); - if ( wp_startswith( $_image_url, $content_url ) ) { - $_image_path = str_replace( $content_url, WP_CONTENT_DIR, $_image_url ); - if ( file_exists( $_image_path ) ) { - $filetype = wp_check_filetype( $_image_path ); - $ext = $filetype['ext']; - $type = $filetype['type']; - - if ( wp_startswith( $type, 'image/' ) ) { - $data = file_get_contents( $_image_path ); - } - } - } - - if ( empty( $data ) ) { - $response = wp_remote_get( $image_url ); - if ( is_wp_error( $response ) ) { - return false; - } - $data = wp_remote_retrieve_body( $response ); - } - } - - // If it's a local path in our WordPress install: - if ( file_exists( $image_url ) ) { - $filetype = wp_check_filetype( $image_url ); - $ext = $filetype['ext']; - $type = $filetype['type']; - - if ( wp_startswith( $type, 'image/' ) ) { - $data = file_get_contents( $image_url ); - } - } - - // Now turn it into an image and return it. - return imagecreatefromstring( $data ); - } - - /** - * - * Construct object from image. - * - * @param optional $type (hex, rgb, hsv) - * @return color as a string formatted as $type - * - */ - function color( $type = 'hex' ) { - // Bail if there is no image to work with - if ( ! $this->image_obj ) - return false; - - // Finds dominant color - $color = self::grab_color(); - // Passes value to Color class - $color = self::get_color( $color, $type ); - return $color; - } - - /** - * - * Grabs the color index for each of five sample points of the image - * - * @param $image - * @param $type can be 'index' or 'hex' - * @return array() with color indices - * - */ - function grab_points( $type = 'index' ) { - $img = $this->image_obj; - if ( ! $img ) - return false; - - $height = imagesy( $img ); - $width = imagesx( $img ); - - // Sample five points in the image - // Based on rule of thirds and center - $topy = round( $height / 3 ); - $bottomy = round( ( $height / 3 ) * 2 ); - $leftx = round( $width / 3 ); - $rightx = round( ( $width / 3 ) * 2 ); - $centery = round( $height / 2 ); - $centerx = round( $width / 2 ); - - // Cast those colors into an array - $points = array( - imagecolorat( $img, $leftx, $topy ), - imagecolorat( $img, $rightx, $topy ), - imagecolorat( $img, $leftx, $bottomy ), - imagecolorat( $img, $rightx, $bottomy ), - imagecolorat( $img, $centerx, $centery ), - ); - - if ( 'hex' == $type ) { - foreach ( $points as $i => $p ) { - $c = imagecolorsforindex( $img, $p ); - $points[ $i ] = self::get_color( array( - 'r' => $c['red'], - 'g' => $c['green'], - 'b' => $c['blue'], - ), 'hex' ); - } - } - - return $points; - } - - /** - * - * Finds the average color of the image based on five sample points - * - * @param $image - * @return array() with rgb color - * - */ - function grab_color() { - $img = $this->image_obj; - if ( ! $img ) - return false; - - $rgb = self::grab_points(); - - // Process the color points - // Find the average representation - foreach ( $rgb as $color ) { - $index = imagecolorsforindex( $img, $color ); - $r[] = $index['red']; - $g[] = $index['green']; - $b[] = $index['blue']; - - $red = round( array_sum( $r ) / 5 ); - $green = round( array_sum( $g ) / 5 ); - $blue = round( array_sum( $b ) / 5 ); - } - - // The average color of the image as rgb array - $color = array( - 'r' => $red, - 'g' => $green, - 'b' => $blue, - ); - - return $color; - } - - /** - * - * Get a Color object using /lib class.color - * Convert to appropriate type - * - * @return string - * - */ - function get_color( $color, $type ) { - $c = new Jetpack_Color( $color, 'rgb' ); - $this->color = $c; - - switch ( $type ) { - case 'rgb' : - $color = implode( $c->toRgbInt(), ',' ); - break; - case 'hex' : - $color = $c->toHex(); - break; - case 'hsv' : - $color = implode( $c->toHsvInt(), ',' ); - break; - default: - return $color = $c->toHex(); - } - - return $color; - } - - /** - * - * Checks contrast against main color - * Gives either black or white for using with opacity - * - * @return string - * - */ - function contrast() { - if ( ! $this->color ) - return false; - - $c = $this->color->getMaxContrastColor(); - return implode( $c->toRgbInt(), ',' ); - } - -}; |