ksubileau/color-thief-php

从图像中抓取主要颜色或代表色板。

v2.0.1 2022-11-12 10:09 UTC

This package is auto-updated.

Last update: 2024-09-12 18:22:41 UTC


README

Latest Stable Version Build Status GitHub issues Packagist License

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)自动选择。您可以通过传递ImagickGmagickGd字符串之一来强制使用相应的底层图像扩展。对于高级用法,您甚至可以传递实现了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。