ryantxr / php-image
GD函数的PHP类包装器。
Requires
- php: >=5.6.0
- ext-gd: *
- league/color-extractor: 0.3.*
This package is auto-updated.
Last update: 2024-09-18 17:47:57 UTC
README
GD图像函数的PHP类包装器。
概述
<?php try { // Create a new Image object $image = new \Ryantxr\Image(); // Magic! ✨ $image ->load('image.jpg') // load image.jpg ->autoOrient() // adjust orientation based on exif data ->resize(320, 200) // resize to 320x200 pixels ->flip('x') // flip horizontally ->colorize('DarkBlue') // tint dark blue ->border('black', 10) // add a 10 pixel black border ->overlay('watermark.png', 'bottom right') // add a watermark image ->toFile('new-image.png', 'image/png') // convert to PNG and save a copy to new-image.png ->toScreen(); // output to the screen // And much more! 💪 } catch(Exception $err) { // Handle errors echo $err->getMessage(); }
要求
- PHP 5.6+
- GD扩展
功能
- 支持读取、写入和转换GIF、JPEG、PNG、WEBP格式。
- 读取和写入文件、数据URI和图像字符串。
- 操作:裁剪、调整大小、叠加/水印、添加TTF文本
- 绘制:圆弧、边框、点、椭圆、线、多边形、矩形、圆角矩形
- 过滤器:模糊、提亮、着色、对比度、变暗、去饱和、边缘检测、浮雕、反转、透明度、像素化、棕褐色、锐化、素描
- 工具:颜色调整、加深/变浅颜色、提取颜色
- 属性:EXIF数据、高度/宽度、MIME类型、方向
- 颜色参数可以是任何CSS颜色(例如
LightBlue)、十六进制颜色或RGB(A)数组。 - 支持透明度(GIF、PNG、WEBP)
- 链式方法
- 使用异常
- 使用Composer或手动加载(仅一个文件)
- 语义化版本控制
安装
使用Composer安装
composer require ryantxr/php-image
或手动包含库
<?php require 'src/Ryantxr/Image.php';
许可证
在MIT许可证下授权。
API
惊人程度的顺序
- 加载图像
- 操作图像
- 保存/输出图像
API技巧
- 返回Image对象的函数是可链式的。
- 您可以将文件或数据URI传递给构造函数,以避免调用
fromFile或fromDataUri。 - 可以使用
$image::methodName()或\Ryantxr\Image::methodName()调用静态方法。 - 颜色可以是CSS颜色(例如
white)、十六进制字符串(例如#ffffff)或RGBA数组。 - 当传递CSS颜色或十六进制字符串时,您可以向
normalizeColor传递透明度:white|0.25
构造函数
__construct($width=null, $height=null, $color='transparent')
创建一个新对象。如果提供了宽度和高度,则将创建一个底层图像资源。
// make an empty object $object = new \Ryantxr\Image; // make a blank image of with certain dimensions $object = new \Ryantxr\Image(600, 400); // width=600, height=600
加载器
fromDataUri($uri)
从数据URI加载图像。
$uri(字符串) - 数据URI。
返回一个Image对象。
fromFile($file)
从文件加载图像。
$file(字符串) - 要加载的图像文件。
返回一个Image对象。
fromString($string)
从字符串创建新的图像。
-
$string(字符串) - 作为字符串的原始图像数据。示例$string = file_get_contents('image.jpg'); $obj = new \Ryantxr\Image; $obj->fromString($string);
返回一个Image对象。
保存器
toDataUri($mimeType, $quality)
生成数据URI。
$mimeType(字符串) - 输出为MIME类型的图像格式(默认为原始MIME类型)。$quality(整数) - 图像质量作为百分比(默认100)。
返回包含数据URI的字符串。
toDownload($filename, $mimeType, $quality)
强制图像下载到客户端的机器。必须在向屏幕发送任何输出之前调用。
$filename(字符串) - 要发送给客户端的文件名(不带路径)(例如 'image.jpeg')。$mimeType(字符串) - 输出为MIME类型的图像格式(默认为原始MIME类型)。$quality(整数) - 图像质量作为百分比(默认100)。
返回一个Image对象。
toFile($file, $mimeType, $quality)
将图像写入文件。
$mimeType(字符串) - 输出为MIME类型的图像格式(默认为原始MIME类型)。$quality(整数) - 图像质量作为百分比(默认100)。
返回一个Image对象。
toScreen($mimeType, $quality)
将图像输出到屏幕。必须在向屏幕发送任何输出之前调用。
$mimeType(字符串) - 输出为MIME类型的图像格式(默认为原始MIME类型)。$quality(整数) - 图像质量作为百分比(默认100)。
返回一个Image对象。
toString($mimeType, $quality)
生成图像字符串。
$mimeType(字符串) - 输出为MIME类型的图像格式(默认为原始MIME类型)。$quality(整数) - 图像质量作为百分比(默认100)。
返回一个Image对象。
工具
getAspectRatio()
获取图像的当前宽高比。
以浮点数形式返回宽高比。
getExif()
获取图像的EXIF数据。
返回EXIF数据的数组或null(如果没有数据)。
getHeight()
获取图像当前高度。
返回整数高度。
getMimeType()
获取已加载图像的MIME类型。
返回MIME类型字符串。
getOrientation()
获取图像当前方向。
返回字符串:"landscape"(横幅)、"portrait"(竖幅)或"square"(正方形)
getWidth()
获取图像当前宽度。
返回整数宽度。
copyResized($fromImage, $toX, $toY, $toWidth, $toHeight, $fromX, $fromY, $fromWidth, $fromHeight)
在当前图像上方复制另一个图像。
$fromImage图像 - 要从中复制的其他图像$toXint - 目标区域的左边界$toYint - 目标区域的上边界$toWidthint - 目标区域的宽度$toHeightint - 目标区域的高度$fromXint - 源区域的左边界$fromYint - 源区域的上边界$fromWidthint - 源区域的宽度$fromHeightint - 源区域的高度
alphaBlending()
设置alpha混合。
处理
autoOrient()
根据EXIF数据旋转图像以确保方向正确。对于没有EXIF数据的图像(不会进行任何更改),可以安全地调用此方法。返回一个Image对象。
bestFit($maxWidth, $maxHeight)
按比例调整图像大小以适应特定宽度和高度。
$maxWidth(int) - 图像的最大宽度。$maxHeight(int) - 图像的最大高度。
返回一个Image对象。
crop($x1, $y1, $x2, $y2)
裁剪图像。
$x1- 左上角x坐标。$y1- 左上角y坐标。$x2- 右下角x坐标。$y2- 右下角y坐标。
返回一个Image对象。
flip($direction)
水平或垂直翻转图像。
$direction(string) - 翻转方向:x|y|both
返回一个Image对象。
maxColors($max, $dither)
将图像减少到最大颜色数。
$max(int) - 要使用的最大颜色数。$dither(bool) - 是否使用抖动效果(默认true)。
返回一个Image对象。
overlay($overlay, $anchor, $opacity, $xOffset, $yOffset)
在当前图像上方放置一个图像。
$overlay(string|Image) - 要叠加的图像。可以是文件名、数据URI或Image对象。$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)。
返回一个Image对象。
resize($width, $height)
将图像调整到指定尺寸。如果只指定一个维度,则图像将按比例调整。
$width(int) - 新图像宽度。$height(int) - 新图像高度。
返回一个Image对象。
rotate($angle, $backgroundColor)
旋转图像。
$angle(int) - 旋转角度(-360 - 360)。$backgroundColor(string|array) - 旋转后未覆盖区域使用的背景颜色(默认'transparent')。
返回一个Image对象。
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) - 如果传递,此变量将包含一个包含文本周围坐标的数组:[左,顶,右,底,宽度,高度]。这可以用于在文本添加到图像后计算文本的位置。
返回一个Image对象。
thumbnail($width, $height, $anchor)
创建缩略图图像。此函数尝试将图像调整为与提供的尺寸尽可能接近,然后裁剪剩余的溢出以强制所需大小。适用于生成缩略图。
$width(int) - 缩略图宽度。$height(int) - 缩略图高度。$anchor(string) - 锚点:'center','top','bottom','left','right','top left','top right','bottom left','bottom right'(默认 'center')。
返回一个Image对象。
绘图
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)。
返回一个Image对象。
border($color, $thickness)
在图像周围绘制边框。
$color(string|array) - 边框颜色。$thickness(int) - 边框厚度(默认 1)。
返回一个Image对象。
dot($x, $y, $color)
绘制单个像素点。
$x(int) - 点的 x 坐标。$y(int) - 点的 y 坐标。$color(string|array) - 点的颜色。
返回一个Image对象。
ellipse($x, $y, $width, $height, $angle, $color, $thickness)
绘制椭圆。
- int
$x- 中心的 x 坐标。 - int
$y- 中心的 y 坐标。 - int
$width- 椭圆的宽度。 - int
$height- 椭圆的高度。 - int
$angle- 旋转角度 0-360 - string|array
$color- 椭圆颜色。 - int|string
$thickness- 像素线厚度或 'filled'(默认 1)。
返回一个Image对象。
fill($color)
用纯色填充图像。
$color(string|array) - 填充颜色。
返回一个Image对象。
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)。
返回一个Image对象。
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)。
返回一个Image对象。
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)。
返回一个Image对象。
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)。
返回一个Image对象。
过滤器
blur($type, $passes)
应用模糊滤镜。
$type(字符串) - 要使用的模糊算法:'selective', 'gaussian'(默认为'gaussian')。$passes(整数) - 应用滤镜的次数,增强效果(默认1)。
返回一个Image对象。
brighten($percentage)
应用亮度滤镜使图像变亮。
$percentage(整数) - 使图像变亮的百分比(0 - 100)。
返回一个Image对象。
colorize($color)
应用着色滤镜。
$color(字符串|数组) - 滤镜颜色。
返回一个Image对象。
contrast($percentage)
应用对比度滤镜。
$percentage(整数) - 调整对比度的百分比(-100 - 100)。
返回一个Image对象。
darken($percentage)
应用亮度滤镜使图像变暗。
$percentage(整数) - 使图像变暗的百分比(0 - 100)。
返回一个Image对象。
desaturate()
应用去饱和度(灰度)滤镜。
返回一个Image对象。
duotone($lightColor, $darkColor)
应用双色滤镜到图像上。
$lightColor(字符串|数组) - 双色中的最亮颜色。$darkColor(字符串|数组) - 双色中的最暗颜色。
返回一个Image对象。
edgeDetect()
应用边缘检测滤镜。
返回一个Image对象。
emboss()
应用浮雕滤镜。
返回一个Image对象。
invert()
反转图像的颜色。
返回一个Image对象。
opacity()
更改图像的不透明度级别。
$opacity(浮点数) - 所需的不透明度级别(0 - 1)。
返回一个Image对象。
pixelate($size)
应用马赛克滤镜。
$size(整数) - 块的大小(像素)(默认10)。
返回一个Image对象。
sepia()
通过去饱和图像并应用棕褐色调来模拟棕褐色效果。
返回一个Image对象。
sharpen()
锐化图像。
返回一个Image对象。
sketch()
应用均值移除滤镜以产生草图效果。
返回一个Image对象。
颜色工具
(静态) adjustColor($color, $red, $green, $blue, $alpha)
通过独立增加/减少红/绿/蓝/alpha值来调整颜色。
$color字符串|数组 - 要调整的颜色。$red整数 - 红色调整(-255 - 255)。$green整数 - 绿色调整(-255 - 255)。$blue整数 - 蓝色调整(-255 - 255)。$alpha浮点数 - Alpha调整(-1 - 1)。
返回一个RGBA颜色数组。
(静态) darkenColor($color, $amount)
加深颜色。
$color字符串|数组 - 要加深的颜色。$amount整数 - 加深量(0 - 255)。
返回一个RGBA颜色数组。
extractColors($count = 10, $backgroundColor = null)
从图像中提取颜色,就像人类所做的那样。™ 此方法需要第三方库 \League\ColorExtractor。如果您使用Composer,它将自动为您安装。
$count整数 - 要提取的最大颜色数(默认5)。$backgroundColor字符串|数组 - 默认情况下,任何alpha值大于零的像素将被丢弃。这是因为透明颜色不会被感知为是。例如,完全透明的黑色在白色背景上会被看到是白色。所以如果您想考虑透明度,您必须指定一个默认的背景颜色。
返回一个RGBA颜色数组的数组。
getColorAt($x, $y)
获取单个像素的RGBA值。
$x整数 - 像素的水平位置。$y整数 - 像素的垂直位置。
返回一个RGBA颜色数组,如果x/y位置在画布外则返回false。
(静态) lightenColor($color, $amount)
加亮颜色。
$color字符串|数组 - 要加亮的颜色。$amount整数 - 加深量(0 - 255)。
返回一个RGBA颜色数组。
(静态) normalizeColor($color)
将十六进制或数组颜色值规范化为格式良好的RGBA数组。
$color字符串|数组 - CSS颜色名称、十六进制字符串或数组 [red, green, blue, alpha]。
您可以通过十六进制字符串和颜色名称传递alpha透明度。例如
白色红色混合:#fff | 50% 白色,25% 红色
返回一个数组:[红色,绿色,蓝色,透明度]
异常情况
图像处理出错时会抛出标准异常。您应该在代码周围使用try/catch块来正确处理它们。
<?php try { $image = new \Ryantxr\Image(); $image->load('image.jpeg'); // ... } catch(Exception $err) { echo $err->getMessage(); }
要检查特定错误,请将$err->getCode()与定义的错误常量进行比较。
<?php try { $image = new \Ryantxr\Image(); $image->load('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- 无法写入文件系统。ERR_OVERLAY- 覆盖函数的第1个参数不是字符串或Image对象。
有用信息
-
颜色参数可以是CSS颜色名称(例如
LightBlue)、十六进制颜色字符串(例如#0099dd)或RGB(A)数组(例如['red' => 255, 'green' => 0, 'blue' => 0, 'alpha' => 1])。 -
当
$thickness> 1时,GD从中心起点绘制所需厚度的线条。例如,以[10, 10, 20, 20]的位置绘制厚度为3的矩形实际上会在[9, 9, 21, 21]的位置绘制。这适用于所有形状,并且不是Image库的bug。
致谢
最初由Cory LaViska开发。