futurando-oficial/thumb-generator

一个PHP类,使得处理图片变得尽可能简单。

v1.0.2 2018-08-13 23:20 UTC

README

<?php
try {
  // Create a new Generator object
  $image = new \Thumb\Generator();

  // Magic! ✨
  $image
    ->fromFile('image.jpg')                     // load image.jpg
    ->autoOrient()                              // adjust orientation based on exif data
    ->resize(320, 200)                          // resize to 320x200 pixels
    ->toFile('new-image.png', 'image/png')      // convert to PNG and save a copy to new-image.png

  // And much more! 💪
} catch(Exception $err) {
  // Handle errors
  echo $err->getMessage();
}

需求

特性

  • 支持读取、写入和转换GIF、JPEG、PNG、WEBP格式。
  • 读取和写入文件、数据URI和图片字符串。
  • 操作:裁剪、调整大小、叠加/水印、添加TTF文本
  • 绘图:弧、边框、点、椭圆、线、多边形、矩形、圆角矩形
  • 过滤器:模糊、增亮、着色、对比度、变暗、去饱和、边缘检测、浮雕、反转、透明度、像素化、棕褐色、锐化、草图
  • 实用工具:颜色调整、变暗/变亮颜色、提取颜色
  • 属性:EXIF数据、高度/宽度、MIME类型、方向
  • 颜色参数可以作为任何CSS颜色(例如 LightBlue)、十六进制颜色或RGB(A)数组传入。
  • 支持alpha透明度(GIF、PNG、WEBP)
  • 链式方法
  • 使用异常
  • 使用Composer或手动(只需一个文件)加载
  • 语义化版本控制

安装

使用Composer安装

composer require futurando-oficial/thumb-generator

许可证

MIT许可证下发布。

API

惊人程度的顺序

  1. 加载图片
  2. 操作图片
  3. 保存/输出图片

API技巧

  • 星号表示必需的参数。
  • 返回生成器对象的函数是链式可用的。
  • 您可以将文件或数据URI传递给构造函数,以避免调用 fromFilefromDataUri
  • 静态方法可以以 $image::methodName()\Thumb\Generator::methodName() 的方式调用。
  • 颜色可以是CSS颜色(例如 white)、十六进制字符串(例如 #ffffff)或RGBA数组。
  • 当传递CSS颜色或十六进制字符串时,您可以将透明度传递给 normalizeColorwhite|0.25

加载器

fromDataUri($uri)

从数据URI加载图片。

  • $uri* (string) - 数据URI。

返回一个生成器对象。

fromFile($file)

从文件加载图片。

  • $file* (string) - 要加载的图片文件。

返回一个生成器对象。

fromNew($width, $height, $color)

创建一个新的图片。

  • $width* (int) - 图片的宽度。
  • $height* (int) - 图片的高度。
  • $color (string|array) - 新图片的填充颜色(默认为'transparent')。

返回一个生成器对象。

fromString($string)

从一个字符串创建一个新的图片。

  • $string* (string) - 作为字符串的原始图片数据。示例
    $string = file_get_contents('image.jpg');
    

返回一个生成器对象。

保存器

toDataUri($mimeType, $quality)

生成数据URI。

  • $mimeType (string) - 输出为MIME类型的图片格式(默认为原始MIME类型)。
  • $quality (int) - 图片质量作为百分比(默认100)。

返回包含数据URI的字符串。

toDownload($filename, $mimeType, $quality)

强制图片下载到客户端的机器。必须在向屏幕发送任何输出之前调用。

  • $filename* (string) - 要发送给客户端的文件名(不带路径)(例如 'image.jpeg')。
  • $mimeType (string) - 输出为MIME类型的图片格式(默认为原始MIME类型)。
  • $quality (int) - 图片质量作为百分比(默认100)。

返回一个生成器对象。

toFile($file, $mimeType, $quality)

将图片写入文件。

  • $mimeType (string) - 输出为MIME类型的图片格式(默认为原始MIME类型)。
  • $quality (int) - 图片质量作为百分比(默认100)。

返回一个生成器对象。

toScreen($mimeType, $quality)

将图片输出到屏幕。必须在向屏幕发送任何输出之前调用。

  • $mimeType (string) - 输出为MIME类型的图片格式(默认为原始MIME类型)。
  • $quality (int) - 图片质量作为百分比(默认100)。

返回一个生成器对象。

toString($mimeType, $quality)

生成图片字符串。

  • $mimeType (string) - 输出为MIME类型的图片格式(默认为原始MIME类型)。
  • $quality (int) - 图片质量作为百分比(默认100)。

返回一个生成器对象。

实用工具

getAspectRatio()

获取图片当前的长宽比。

返回作为浮点数的长宽比。

getExif()

获取图像的EXIF数据。

返回一个EXIF数据数组,如果没有数据则返回null。

getHeight()

获取图像的当前高度。

返回一个整数高度。

getMimeType()

获取已加载图像的MIME类型。

返回一个MIME类型字符串。

getOrientation()

获取图像的当前方向。

返回一个字符串:'landscape'、'portrait'或'square'。

getWidth()

获取图像的当前宽度。

返回一个整数宽度。

操作

autoOrient()

根据EXIF数据旋转图像以正确显示方向。对于没有EXIF数据的图像调用此方法是安全的(不会进行任何更改)。返回一个生成器对象。

bestFit($maxWidth, $maxHeight)

按比例调整图像大小以适应特定宽度和高度。

  • $maxWidth (int) - 图像的最大宽度。
  • $maxHeight (int) - 图像的最大高度。

返回一个生成器对象。

crop($x1, $y1, $x2, $y2)

裁剪图像。

  • $x1 - 左上角x坐标。
  • $y1 - 左上角y坐标。
  • $x2 - 右下角x坐标。
  • $y2 - 右下角y坐标。

返回一个生成器对象。

fitToHeight($height) (已弃用)

按比例调整图像大小以适应特定高度。

此方法在版本3.2.2中已弃用,并将从版本4.0中删除。请使用resize(null, $height)代替。

  • $height (int) - 调整图像大小的目标高度。

返回一个生成器对象。

fitToWidth($width) (已弃用)

按比例调整图像大小以适应特定宽度。

此方法在版本3.2.2中已弃用,并将从版本4.0中删除。请使用resize($width, null)代替。

  • $width (int) - 调整图像大小的目标宽度。

返回一个生成器对象。

flip($direction)

水平或垂直翻转图像。

  • $direction (string) - 翻转方向:x|y|both

返回一个生成器对象。

maxColors($max, $dither)

将图像减少到最大颜色数。

  • $max (int) - 要使用的最大颜色数。
  • $dither (bool) - 是否使用抖动效果(默认true)。

返回一个生成器对象。

overlay($overlay, $anchor, $opacity, $xOffset, $yOffset)

在当前图像上方放置一个图像。

  • $overlay (string|Generator) - 要覆盖的图像。可以是文件名、数据URI或生成器对象。
  • $anchor (string) - 锚点:'center'、'top'、'bottom'、'left'、'right'、'top left'、'top right'、'bottom left'、'bottom right'(默认'center')
  • $opacity (float) - 覆盖层的透明度级别 0-1(默认1)。
  • $xOffset (int) - 像素水平偏移(默认0)。
  • $yOffset (int) - 像素垂直偏移(默认0)。

返回一个生成器对象。

resize($width, $height)

将图像调整到指定的尺寸。如果只指定了一个维度,则图像将按比例调整。

  • $width (int) - 新图像宽度。
  • $height (int) - 新图像高度。

返回一个生成器对象。

rotate($angle, $backgroundColor)

旋转图像。

  • $angle (int) - 旋转角度(-360 - 360)。
  • $backgroundColor (string|array) - 旋转后未覆盖区域的背景颜色(默认'transparent')。

返回一个生成器对象。

text($text, $options, &$boundary)

向图像添加文本。

  • $text (string) - 要添加的文本。
  • $options (array) - 选项数组。
    • fontFile (string) - 要使用的TrueType(或兼容)字体文件。
    • size (int) - 字体大小(以像素为单位,默认12)。
    • color (string|array) - 文本颜色(默认黑色)。
    • anchor (string) - 锚点:'center'、'top'、'bottom'、'left'、'right'、'top left'、'top right'、'bottom left'、'bottom right'(默认'center')
    • xOffset (int) - 像素水平偏移(默认0)。
    • yOffset (int) - 像素单位下的垂直偏移量(默认 0)。
    • shadow (array) - 文本阴影参数。
      • x* (int) - 像素单位下的水平偏移量。
      • y* (int) - 像素单位下的垂直偏移量。
      • color* (string|array) - 文本阴影颜色。
  • $boundary (array) - 如果传递,此变量将包含一个包含围绕文本坐标的数组:[x1, y1, x2, y2, width, height]。这可以用于在文本添加到图像后计算文本的位置。

返回一个生成器对象。

thumbnail($width, $height, $anchor)

创建缩略图图像。此函数试图使图像尽可能接近提供的尺寸,然后裁剪剩余的溢出以强制所需大小。适用于生成缩略图。

  • $width* (int) - 缩略图宽度。
  • $height* (int) - 缩略图高度。
  • $anchor (string) - 锚点:'center', 'top', 'bottom', 'left', 'right', 'top left', 'top right', 'bottom left', 'bottom right'(默认 'center')。

返回一个生成器对象。

绘图

arc($x, $y, $width, $height, $start, $end, $color, $thickness)

绘制圆弧。

  • $x* (int) - 圆弧中心的 x 坐标。
  • $y* (int) - 圆弧中心的 y 坐标。
  • $width* (int) - 圆弧的宽度。
  • $height* (int) - 圆弧的高度。
  • $start* (int) - 圆弧的起始角度(以度为单位)。
  • $end* (int) - 圆弧的结束角度(以度为单位)。
  • $color* (string|array) - 圆弧颜色。
  • $thickness (int|string) - 像素单位下的线厚度或 'filled'(默认 1)。

返回一个生成器对象。

border($color, $thickness)

在图像周围绘制边框。

  • $color* (string|array) - 边框颜色。
  • $thickness (int) - 边框厚度(默认 1)。

返回一个生成器对象。

dot($x, $y, $color)

绘制单个像素点。

  • $x* (int) - 点的 x 坐标。
  • $y* (int) - 点的 y 坐标。
  • $color* (string|array) - 点颜色。

返回一个生成器对象。

ellipse($x, $y, $width, $height, $color, $thickness)

绘制椭圆。

  • $x* (int) - 中心的 x 坐标。
  • $y* (int) - 中心的 y 坐标。
  • $width* (int) - 椭圆宽度。
  • $height* (int) - 椭圆高度。
  • $color* (string|array) - 椭圆颜色。
  • $thickness (int|string) - 像素单位下的线厚度或 'filled'(默认 1)。

返回一个生成器对象。

fill($color)

使用纯色填充图像。

  • $color (string|array) - 填充颜色。

返回一个生成器对象。

line($x1, $y1, $x2, $y2, $color, $thickness)

绘制线条。

  • $x1* (int) - 第一点的 x 坐标。
  • $y1* (int) - 第一点的 y 坐标。
  • $x2* (int) - 第二点的 x 坐标。
  • $y2* (int) - 第二点的 y 坐标。
  • $color (string|array) - 线颜色。
  • $thickness (int) - 线厚度(默认 1)。

返回一个生成器对象。

polygon($vertices, $color, $thickness)

绘制多边形。

  • $vertices* (array) - 多边形顶点在 x/y 数组数组中。示例
    [
      ['x' => x1, 'y' => y1],
      ['x' => x2, 'y' => y2],
      ['x' => xN, 'y' => yN]
    ]
    
  • $color* (string|array) - 多边形颜色。
  • $thickness (int|string) - 像素单位下的线厚度或 'filled'(默认 1)。

返回一个生成器对象。

rectangle($x1, $y1, $x2, $y2, $color, $thickness)

绘制矩形。

  • $x1* (int) - 左上角的 x 坐标。
  • $y1* (int) - 左上角的 y 坐标。
  • $x2* (int) - 右下角的 x 坐标。
  • $y2* (int) - 右下角的 y 坐标。
  • $color* (string|array) - 矩形颜色。
  • $thickness (int|string) - 像素单位下的线厚度或 'filled'(默认 1)。

返回一个生成器对象。

roundedRectangle($x1, $y1, $x2, $y2, $radius, $color, $thickness)

绘制圆角矩形。

  • $x1* (int) - 左上角的 x 坐标。
  • $y1* (int) - 左上角的 y 坐标。
  • $x2* (int) - 右下角的 x 坐标。
  • $y2* (int) - 右下角的 y 坐标。
  • $radius* (int) - 像素单位下的边框半径。
  • $color* (string|array) - 矩形颜色。
  • $thickness (int|string) - 像素单位下的线厚度或 'filled'(默认 1)。

返回一个生成器对象。

过滤器

blur($type, $passes)

应用模糊滤镜。

  • $type (string) - 要使用的模糊算法:'selective', 'gaussian'(默认 'gaussian')。
  • $passes (int) - 应用滤镜的次数,增强效果(默认 1)。

返回一个生成器对象。

brighten($percentage)

应用亮度滤镜以增强图像。

  • $percentage * (int) - 增强图像的百分比(0 - 100)。

返回一个生成器对象。

colorize($color)

应用上色滤镜。

  • $color * (string|array) - 滤镜颜色。

返回一个生成器对象。

contrast($percentage)

应用对比度滤镜。

  • $percentage * (int) - 调整的百分比(-100 - 100)。

返回一个生成器对象。

darken($percentage)

应用亮度滤镜以变暗图像。

  • $percentage * (int) - 变暗图像的百分比(0 - 100)。

返回一个生成器对象。

desaturate()

应用去饱和度(灰度)滤镜。

返回一个生成器对象。

duotone($lightColor, $darkColor)

将图像应用双色滤镜。

  • $lightColor * (string|array) - 双色中最浅的颜色。
  • $darkColor * (string|array) - 双色中最深的颜色。

返回一个生成器对象。

edgeDetect()

应用边缘检测滤镜。

返回一个生成器对象。

emboss()

应用浮雕滤镜。

返回一个生成器对象。

invert()

反转图像颜色。

返回一个生成器对象。

opacity()

更改图像的不透明度级别。

  • $opacity * (float) - 所需的不透明度级别(0 - 1)。

返回一个生成器对象。

pixelate($size)

应用像素化滤镜。

  • $size (int) - 块的大小(以像素为单位,默认 10)。

返回一个生成器对象。

sepia()

通过去饱和度图像并应用棕褐色调来模拟棕褐色效果。

返回一个生成器对象。

sharpen($amount)

锐化图像。

  • $amount (int) - 锐化量(1 - 100,默认 50)

返回一个生成器对象。

sketch()

应用均值去除滤镜以产生草图效果。

返回一个生成器对象。

颜色工具

(static) adjustColor($color, $red, $green, $blue, $alpha)

通过独立增加/减少红色/绿色/蓝色/alpha值来调整颜色。

  • $color * (string|array) - 要调整的颜色。
  • $red * (int) - 红色调整(-255 - 255)。
  • $green * (int) - 绿色调整(-255 - 255)。
  • $blue * (int) - 蓝色调整(-255 - 255)。
  • $alpha * (float) - Alpha调整(-1 - 1)。

返回一个RGBA颜色数组。

(static) darkenColor($color, $amount)

变暗颜色。

  • $color * (string|array) - 要变暗的颜色。
  • $amount * (int) - 变暗量(0 - 255)。

返回一个RGBA颜色数组。

extractColors($count = 10, $backgroundColor = null)

提取图像中的颜色,就像人类那样。™ 此方法需要第三方库 \League\ColorExtractor。如果您使用Composer,它将自动为您安装。

  • $count (int) - 要提取的最大颜色数(默认 5)。
  • $backgroundColor (string|array) - 默认情况下,任何alpha值大于零的像素将被丢弃。这是因为透明颜色不被视为如此。例如,完全透明的黑色在白色背景上会显示为白色。因此,如果您想考虑透明度,您必须指定一个默认的背景颜色。

返回一个RGBA颜色数组数组。

getColorAt($x, $y)

获取单个像素的RGBA值。

  • $x * (int) - 像素的水平位置。
  • $y * (int) - 像素的垂直位置。

返回一个RGBA颜色数组或false,如果x/y位置在画布之外。

(static) lightenColor($color, $amount)

亮化颜色。

  • $color * (string|array) - 要亮化的颜色。
  • $amount * (int) - 变暗量(0 - 255)。

返回一个RGBA颜色数组。

(static) normalizeColor($color)

将十六进制或数组颜色值标准化为格式良好的RGBA数组。

  • $color * (string|array) - CSS颜色名称、十六进制字符串或数组 [red, green, blue, alpha]。

您可以通过十六进制字符串和颜色名称传递alpha透明度。例如

#fff|0.50 <-- 50%白色 red|0.25 <-- 25%红色

返回一个数组:[red, green, blue, alpha]

异常

生成器在出错时抛出标准异常。您应该在代码周围始终使用try/catch块来正确处理它们。

<?php
try {
  $image = new \Thumb\Generator('image.jpeg')
  // ...
} catch(Exception $err) {
  echo $err->getMessage();
}

要检查特定错误,将 $err->getCode() 与定义的错误常量进行比较。

<?php
try {
  $image = new \Thumb\Generator('image.jpeg')
  // ...
} catch(Exception $err) {
  if($err->getCode() === $image::ERR_FILE_NOT_FOUND) {
    echo 'File not found!';
  } else {
    echo $err->getMessage();
  }
}

作为最佳实践,始终使用定义的常量而不是它们的整数值。这些值在未来版本中可能会更改,且不会被视为破坏性更改。

  • ERR_FILE_NOT_FOUND - 由于某些原因,找不到或无法加载指定的文件。
  • ERR_FONT_FILE - 无法加载指定的字体文件。
  • ERR_FREETYPE_NOT_ENABLED - 在您的PHP版本中未启用Freetype支持。
  • ERR_GD_NOT_ENABLED - 在您的PHP版本中未启用GD扩展。
  • ERR_LIB_NOT_LOADED - 未加载所需的库。
  • ERR_INVALID_COLOR - 作为参数传递了一个无效的颜色值。
  • ERR_INVALID_DATA_URI - 指定的数据URI无效。
  • ERR_INVALID_IMAGE - 指定的图像无效。
  • ERR_UNSUPPORTED_FORMAT - 指定的图像格式无效。
  • ERR_WEBP_NOT_ENABLED - 在您的PHP版本中未启用WEBP支持。
  • ERR_WRITE - 无法写入文件系统。

需要了解的有用信息

  • 颜色参数可以是CSS颜色名称(例如LightBlue)、十六进制颜色字符串(例如#0099dd)或RGB(A)数组(例如['red' => 255, 'green' => 0, 'blue' => 0, 'alpha' => 1])。

  • $thickness > 1时,GD从中心起点绘制所需厚度的线条。例如,以3为厚度绘制在[10, 10, 20, 20]的矩形实际上将在[9, 9, 21, 21]处绘制。这对所有形状都适用,这不是Generator库的bug。

与Generator 2.x的不同之处

  • 标准化颜色参数(颜色可以是CSS颜色名称、十六进制颜色或RGB(A)数组)。
  • 标准化alpha(不透明度)参数:0(透明)- 1(不透明)
  • text方法添加了文字阴影。
  • 添加了fromString()方法,可以从字符串加载图像。
  • 添加了toString()方法,用于生成图像字符串。
  • 添加了arc方法,用于绘制圆弧。
  • 添加了border方法,用于绘制边框。
  • 添加了dot方法,用于绘制单个像素。
  • 添加了ellipse方法,用于绘制椭圆和圆形。
  • 添加了line方法,用于绘制线条。
  • 添加了polygon方法,用于绘制多边形。
  • 添加了rectangle方法,用于绘制矩形。
  • 添加了roundedRectangle方法,用于绘制圆角矩形。
  • 添加了adjustColor方法,用于修改RGBA颜色通道以创建相对颜色变化。
  • 添加了darkenColor方法,用于使颜色变暗。
  • 添加了extractColors方法,用于从图像中获取最常见的颜色。
  • 添加了getColorAt方法,用于获取特定像素的RGBA值。
  • 添加了lightenColor方法,用于使颜色变亮。
  • 添加了toDownload方法,用于强制图像在客户端机器上下载。
  • 添加了duotone过滤器,用于创建双色调图像。
  • 添加了sharpen方法,用于锐化图像。
  • 将命名空间从abeautifulsite更改为Thumb
  • create方法更改为fromNew
  • load方法更改为fromFile
  • load_base64方法更改为fromDataUri
  • output方法更改为toScreen
  • output_base64方法更改为toDataUri
  • save方法更改为toFile
  • text方法更改为接受选项数组而不是大量参数。
  • text方法中移除了文字描边,因为它产生了脏结果且不支持透明度。
  • 移除了smooth方法,因为其参数在PHP手册中的文档不是很好。
  • 移除了已弃用的方法adaptive_resize(使用thumbnail代替)。
  • 移除了get_meta_data(使用getExifgetHeightgetMimegetOrientationgetWidth代替)。
  • 添加了.editorconfig文件。请在提交贡献之前确保您的编辑器支持这些设置。
  • 将缩进从四个空格更改为两个空格(抱歉PHP-FIG规范!)。
  • 将下划线方法名(underscore_methods)更改为驼峰命名法(camelCaseMethods)。
  • 根据功能将方法分组。
  • 移除了PHPDoc注释。目前我不想将这些注释整合到库中。