ksubileau/ color-thief-php
从图像中抓取主要颜色或代表色板。
Requires
- php: ^7.2|^8.0
- ext-fileinfo: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.4
- phpstan/phpstan: ^1.2.0
- phpstan/phpstan-phpunit: ^1.0.0
- phpunit/phpunit: ^8.5
Suggests
- ext-gd: to use the GD image adapter.
- ext-gmagick: to use the Gmagick image adapter.
- ext-imagick: to use the Imagick image adapter.
README
A PHP类,用于从图像中抓取颜色调色板。使用PHP和GD、Imagick或Gmagick库来实现。
它是Color Thief Javascript库的PHP版本,使用Leptonica库的MMCQ(修改后的中值切分量化)算法。
要求
- PHP >= 7.2 或 >= PHP 8.0
- Fileinfo扩展
- 一个或多个PHP图像处理扩展
- GD >= 2.0
- Imagick >= 2.0(但CMYK图像需要 >= 3.0)
- Gmagick >= 1.0
- 支持JPEG、PNG、GIF和WEBP图像。
如何使用
通过Composer安装
推荐通过Composer安装Color Thief
composer require ksubileau/color-thief-php
从图像中获取主要颜色
require_once 'vendor/autoload.php'; use ColorThief\ColorThief; $dominantColor = ColorThief::getColor($sourceImage);
$sourceImage
变量必须包含服务器上图像的绝对路径、图像的URL、包含图像的GD资源、Imagick图像实例、Gmagick图像实例,或二进制字符串格式的图像。
ColorThief::getColor($sourceImage[, $quality=10, $area=null, $outputFormat='array', $adapter = null])
您可以传递一个额外的参数($quality
)来调整主要颜色的计算精度。1是最高质量设置,10是默认值。但请注意,质量和速度/内存消耗之间存在权衡!如果质量设置过高(接近1)相对于图像大小(像素数),它可能 超出PHP配置中设置的内存限制(并且计算会变慢)。
您还可以传递另一个额外的参数($area
)来指定图像中的一个矩形区域,以便只获取此区域内的主要颜色。此参数必须是一个关联数组,具有以下键
$area['x']
: 区域左上角的x坐标。默认为0。$area['y']
: 区域左上角的y坐标。默认为0。$area['w']
: 区域的宽度。默认为图像宽度减去x坐标。$area['h']
: 区域的高度。默认为图像高度减去y坐标。
默认情况下,颜色以表示红色、绿色和蓝色值的三个整数的数组形式返回。您可以通过将以下值之一传递给$outputFormat
参数来选择另一种输出格式
rgb
: RGB字符串表示法(例如:rgb(253, 42, 152)
)。hex
: 十六进制字符串表示(例如:#fd2a98
)。int
: 颜色整数值(例如:16591512
)。array
: 默认格式(例如:array[253, 42, 152]
)。obj
:ColorThief\Color
实例,用于自定义处理。
可选的$adapter
参数允许您选择一个首选的图像适配器来加载图像。默认情况下,适配器会根据可用的扩展和$sourceImage
的类型(例如,如果$sourceImage
是Imagick实例,则使用Imagick)自动选择。您可以通过传递Imagick
、Gmagick
或Gd
字符串之一来强制使用相应的底层图像扩展。对于高级用法,您甚至可以传递实现了AdapterInterface
接口的任何类的实例,以使用自定义的图像加载器。
从图像构建调色板
在这个示例中,我们构建了一个8色的调色板。
require_once 'vendor/autoload.php'; use ColorThief\ColorThief; $palette = ColorThief::getPalette($sourceImage, 8);
同样,$sourceImage
变量必须包含服务器上图像的绝对路径、图像的URL、包含图像的GD资源、Imagick图像实例、Gmagick图像实例,或二进制字符串格式的图像。
ColorThief::getPalette($sourceImage[, $colorCount=10, $quality=10, $area=null, $outputFormat='array', $adapter = null])
$colorCount
参数确定调色板的大小;返回的颜色数量。如果未设置,则默认为10。
$quality
、$area
、$outputFormat
和$adapter
参数与上一个函数中的用法相同。
致谢
作者
Kevin Subileau kevinsubileau.fr
基于Lokesh Dhakar lokeshdhakar.com twitter.com/lokesh 的工作
感谢
- Lokesh Dhakar - 为创建原始项目color-thief。
- Nick Rabinowitz - 为创建quantize.js。