一个 PHP 类,使图像处理变得尽可能简单。
由 Cory LaViska 开发和维护。
如果这个项目让你再次热爱PHP图像处理,请考虑赞助我支持它的开发。
<?php
try {
// Create a new SimpleImage object
$ image = new claviska SimpleImage ();
// Magic !
$ image
-> fromFile ( ' image.jpg ' ) // load image . jpg
-> autoOrient () // adjust orientation based on exif data
-> resize ( 320 , 200 ) // resize to 320 x200 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 ();
}
LightBlue
)、十六进制颜色或 RGB(A) 数组传入。使用 Composer 安装:
composer require claviska/simpleimage
或者手动包含库:
<?php
require ' src/claviska/SimpleImage.php ' ;
SimpleImage 由 Cory LaViska 开发和维护。版权所有美丽网站有限责任公司。
如果您喜欢使用 SimpleImage,特别是在商业应用程序中,请考虑赞助我以支持其开发。
谢谢!
根据 MIT 许可证获得许可。
精彩程度顺序:
API提示:
fromFile
或fromDataUri
。$image::methodName()
或claviskaSimpleImage::methodName()
调用。white
)、十六进制字符串(例如'#ffffff')或RGBA数组。normalizeColor
: white|0.25
fromDataUri($uri)
从数据 URI 加载图像。
$uri
*(字符串)- 数据 URI。返回一个 SimpleImage 对象。
fromFile($file)
从文件加载图像。
$file
* (string) - 要加载的图像文件。返回一个 SimpleImage 对象。
fromNew($width, $height, $color)
创建一个新图像。
$width
* (int) - 图像的宽度。$height
* (int) - 图像的高度。$color
(string|array) - 新图像的可选填充颜色(默认“透明”)。返回一个 SimpleImage 对象。
fromString($string)
从字符串创建新图像。
$string
* (string) - 字符串形式的原始图像数据。例子: $string = file_get_contents('image.jpg');
返回一个 SimpleImage 对象。
toDataUri($mimeType, $options)
生成数据 URI。
$mimeType
(string) - 作为 mime 类型输出的图像格式(默认为原始 mime 类型)。$options
(array|int) - 选项数组或图像质量百分比(默认 100)。返回包含数据 URI 的字符串。
toDownload($filename, $mimeType, $options)
强制将映像下载到客户端计算机。必须在任何输出发送到屏幕之前调用。
$filename
* (string) - 发送到客户端的文件名(不带路径)(例如“image.jpeg”)。$mimeType
(string) - 作为 mime 类型输出的图像格式(默认为原始 mime 类型)。$options
(array|int) - 选项数组或图像质量百分比(默认 100)。返回一个 SimpleImage 对象。
toFile($file, $mimeType, $options)
将图像写入文件。
$mimeType
(string) - 作为 mime 类型输出的图像格式(默认为原始 mime 类型)。$options
(array|int) - 选项数组或图像质量百分比(默认 100)。返回一个 SimpleImage 对象。
toScreen($mimeType, $options)
将图像输出到屏幕。必须在任何输出发送到屏幕之前调用。
$mimeType
(string) - 作为 mime 类型输出的图像格式(默认为原始 mime 类型)。$options
(array|int) - 选项数组或图像质量百分比(默认 100)。返回一个 SimpleImage 对象。
toString($mimeType, $options)
生成图像字符串。
$mimeType
(string) - 作为 mime 类型输出的图像格式(默认为原始 mime 类型)。$options
(array|int) - 选项数组或图像质量百分比(默认 100)。返回一个 SimpleImage 对象。
generate($mimeType, $options)
生成图像。
$mimeType
(string) - 作为 mime 类型输出的图像格式(默认为原始 mime 类型)。$options
(array|int) - 选项数组或图像质量百分比(默认 100)。返回一个数组:[mimeType, data]
您还可以使用关联数组根据目标 Mime 类型设置各种选项,而不是将质量作为最后一个函数参数提供。
$ image -> toFile ( $ file , ' image/avif ' , [
// JPG , WEBP , AVIF ( default 100 )
' quality ' => 100 ,
// AVIF ( default - 1 which is 6 )
// range of slow and small file 0 to 10 fast but big file
' speed ' => - 1 ,
]);
$ image -> toFile ( $ file , ' image/bmp ' , [
// BMP : boolean ( default true )
' compression ' => true ,
// BMP , JPG ( default null , keep the same )
' interlace ' => null ,
]);
$ image -> toFile ( $ file , ' image/gif ' , [
// GIF , PNG ( default true )
' alpha ' => true ,
]);
$ image -> toFile ( $ file , ' image/jpeg ' , [
// BMP , JPG ( default null , keep the same )
' interlace ' => null ,
// JPG , WEBP , AVIF ( default 100 )
' quality ' => 100 ,
]);
$ image -> toFile ( $ file , ' image/png ' , [
// GIF , PNG ( default true )
' alpha ' => true ,
// PNG : 0 - 10 , defaults to zlib ( default 6 )
' compression ' => - 1 ,
// PNG ( default - 1 )
' filters ' => - 1 ,
// has no effect on PNG images , since the format is lossless
// ' quality' = > 100 ,
]);
$ image -> toFile ( $ file , ' image/webp ' , [
// JPG , WEBP , AVIF ( default 100 )
' quality ' => 100 ,
]);
getAspectRatio()
获取图像的当前纵横比。
以浮点形式返回纵横比。
getExif()
获取图像的 exif 数据。
返回 exif 数据数组,如果没有可用数据,则返回 null。
getHeight()
获取图像的当前高度。
以整数形式返回高度。
getMimeType()
获取加载图像的 mime 类型。
返回 mime 类型字符串。
getOrientation()
获取图像的当前方向。
返回字符串:“landscape”、“portrait”或“square”
getResolution()
获取图像的当前分辨率(以 DPI 为单位)。
返回整数数组:[0 => 96, 1 => 96]
getWidth()
获取图像的当前宽度。
以整数形式返回宽度。
hasImage()
检查 SimpleImage 对象是否已加载图像。
返回一个布尔值。
reset()
破坏图像资源。
返回一个 SimpleImage 对象。
autoOrient()
旋转图像,以便根据其 exif 数据使方向正确。在没有 exif 数据的图像上调用此方法是安全的(不会进行任何更改)。返回一个 SimpleImage 对象。
bestFit($maxWidth, $maxHeight)
按比例调整图像大小以适合特定的宽度和高度。
$maxWidth
* (int) - 图像的最大宽度。$maxHeight
* (int) - 图像的最大高度。返回一个 SimpleImage 对象。
crop($x1, $y1, $x2, $y2)
裁剪图像。
返回一个 SimpleImage 对象。
fitToHeight($height)
(已弃用)按比例将图像大小调整到特定高度。
此方法在 3.2.2 版本中已弃用,并将在 4.0 版本中删除。请改用resize(null, $height)
。
$height
* (int) - 调整图像大小的高度。返回一个 SimpleImage 对象。
fitToWidth($width)
(已弃用)按比例将图像大小调整为特定宽度。
此方法在 3.2.2 版本中已弃用,并将在 4.0 版本中删除。请使用resize($width, null)
代替。
$width
* (int) - 调整图像大小的宽度。返回一个 SimpleImage 对象。
flip($direction)
水平或垂直翻转图像。
$direction
* (string) - 翻转方向:x|y|both返回一个 SimpleImage 对象。
maxColors($max, $dither)
将图像减少到最大颜色数。
$max
* (int) - 要使用的最大颜色数。$dither
(bool) - 是否使用抖动效果(默认 true)。返回一个 SimpleImage 对象。
overlay($overlay, $anchor, $opacity, $xOffset, $yOffset)
将图像放置在当前图像之上。
$overlay
* (string|SimpleImage) - 要叠加的图像。这可以是文件名、数据 URI 或 SimpleImage 对象。$anchor
(string) - 锚点:'center', 'top', 'bottom', 'left', 'right', 'top left', 'top right', 'bottom left', 'bottom right' (默认“中心”)$opacity
(float) - 覆盖层的不透明度级别 0-1(默认 1)。$xOffset
(int) - 以像素为单位的水平偏移(默认 0)。$yOffset
(int) - 以像素为单位的垂直偏移(默认 0)。$calculateOffsetFromEdge
(bool) - 计算参考图像边缘的偏移量。 $xOffset 和 $yOffset 对中心锚点没有影响。 (默认为 false)。返回一个 SimpleImage 对象。
resize($width, $height)
将图像大小调整为指定尺寸。如果仅指定一维,则图像将按比例调整大小。
$width
* (int) - 新图像宽度。$height
* (int) - 新图像高度。返回一个 SimpleImage 对象。
resolution($res_x, $res_y)
更改图像的分辨率 (DPI)。
$res_x
* (int) - 水平分辨率,以 DPI 为单位。$res_y
(int) - 垂直分辨率,以 DPI 为单位。返回一个 SimpleImage 对象。
rotate($angle, $backgroundColor)
旋转图像。
$angle
* (int) - 旋转角度 (-360 - 360)。$backgroundColor
(string|array) - 旋转后未覆盖区域使用的背景颜色(默认“透明”)。返回一个 SimpleImage 对象。
text($text, $options, &$boundary)
向图像添加文本。
$text*
(字符串) - 所需的文本。$options
(array) - 选项数组。fontFile
* (字符串) - 要使用的 TrueType(或兼容)字体文件。size
(int) - 字体大小(以像素为单位)(默认为 12)。color
(string|array) - 文本颜色(默认黑色)。anchor
(字符串) - 锚点:'center','top','bottom','left','right','top left','top right','bottom left','bottom right'(默认'中心')。xOffset
(int) - 以像素为单位的水平偏移(默认为 0)。yOffset
(int) - 以像素为单位的垂直偏移(默认为 0)。shadow
(数组)- 文本阴影参数。x
* (int) - 以像素为单位的水平偏移。y
* (int) - 以像素为单位的垂直偏移。color
* (string|array) - 文本阴影颜色。calculateOffsetFromEdge
(bool) - 计算参考图像边缘的偏移量(默认 false)。baselineAlign
(bool) - 将文本字体与基线对齐。 (默认为真)。$boundary
(array) - 如果传递,此变量将包含一个包含文本周围坐标的数组:[x1, y1, x2, y2, width, height]。这可用于计算文本添加到图像后的位置。返回一个 SimpleImage 对象。
thumbnail($width, $height, $anchor)
创建缩略图。此函数尝试使图像尽可能接近提供的尺寸,然后裁剪剩余的溢出以强制达到所需的尺寸。对于生成缩略图很有用。
$width
* (int) - 缩略图宽度。$height
* (int) - 缩略图高度。$anchor
(string) - 锚点: 'center', 'top', 'bottom', 'left', 'right', 'top left', 'top right', 'bottom left', 'bottom right' (默认“中心”)。返回一个 SimpleImage 对象。
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) - 以像素为单位的线条粗细或“填充”(默认为 1)。返回一个 SimpleImage 对象。
border($color, $thickness)
在图像周围绘制边框。
$color
* (string|array) - 边框颜色。$thickness
(int) - 边框的厚度(默认为 1)。返回一个 SimpleImage 对象。
dot($x, $y, $color)
绘制单个像素点。
$x
* (int) - 点的 x 坐标。$y
* (int) - 点的 y 坐标。$color
* (string|array) - 点颜色。返回一个 SimpleImage 对象。
ellipse($x, $y, $width, $height, $color, $thickness)
绘制一个椭圆。
$x
* (int) - 中心的 x 坐标。$y
* (int) - 中心的 y 坐标。$width
* (int) - 椭圆宽度。$height
* (int) - 椭圆高度。$color
* (string|array) - 椭圆颜色。$thickness
(int|string) - 以像素为单位的线条粗细或“填充”(默认为 1)。返回一个 SimpleImage 对象。
fill($color)
用纯色填充图像。
$color
(string|array) - 填充颜色。返回一个 SimpleImage 对象。
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)。返回一个 SimpleImage 对象。
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) - 以像素为单位的线条粗细或“填充”(默认为 1)。返回一个 SimpleImage 对象。
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) - 以像素为单位的线条粗细或“填充”(默认为 1)。返回一个 SimpleImage 对象。
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) - 以像素为单位的线条粗细或“填充”(默认为 1)。返回一个 SimpleImage 对象。
blur($type, $passes)
应用模糊滤镜。
$type
(string) - 要使用的模糊算法:'selective'、'gaussian' (默认为 'gaussian')。$passes
(int) - 应用过滤器的次数,增强效果(默认为 1)。返回一个 SimpleImage 对象。
brighten($percentage)
应用亮度滤镜使图像变亮。
$percentage
* (int) - 使图像变亮的百分比 (0 - 100)。返回一个 SimpleImage 对象。
colorize($color)
应用着色滤镜。
$color
* (string|array) - 过滤器颜色。返回一个 SimpleImage 对象。
contrast($percentage)
应用对比滤镜。
$percentage
* (int) - 要调整的百分比 (-100 - 100)。返回一个 SimpleImage 对象。
darken($percentage)
应用亮度滤镜使图像变暗。
$percentage
* (int) - 使图像变暗的百分比 (0 - 100)。返回一个 SimpleImage 对象。
desaturate()
应用去饱和(灰度)滤镜。
返回一个 SimpleImage 对象。
duotone($lightColor, $darkColor)
将双色调滤镜应用于图像。
$lightColor
* (string|array) - 双色调中最浅的颜色。$darkColor
* (string|array) - 双色调中最暗的颜色。返回一个 SimpleImage 对象。
edgeDetect()
应用边缘检测过滤器。
返回一个 SimpleImage 对象。
emboss()
应用浮雕滤镜。
返回一个 SimpleImage 对象。
invert()
反转图像的颜色。
返回一个 SimpleImage 对象。
opacity()
更改图像的不透明度级别。
$opacity
* (float) - 所需的不透明度级别 (0 - 1)。返回一个 SimpleImage 对象。
pixelate($size)
应用像素化滤镜。
$size
(int) - 块的大小(以像素为单位)(默认为 10)。返回一个 SimpleImage 对象。
sepia()
通过降低图像的饱和度并应用棕褐色调来模拟棕褐色效果。
返回一个 SimpleImage 对象。
sharpen($amount)
锐化图像。
$amount
(int) - 锐化量(1 - 100,默认 50)返回一个 SimpleImage 对象。
sketch()
应用均值移除过滤器以产生草图效果。
返回一个 SimpleImage 对象。
(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)
像人类一样从图像中提取颜色。™ 此方法需要第三方库 LeagueColorExtractor。如果您使用 Composer,它将自动为您安装。
$count
(int) - 要提取的最大颜色数(默认为 5)。$backgroundColor
(string|array) - 默认情况下,任何 alpha 值大于零的像素都将被丢弃。这是因为透明颜色不会按原样被感知。例如,完全透明的黑色在白色背景上看起来是白色的。因此,如果您想考虑透明度,则必须指定默认背景颜色。返回 RGBA 颜色数组的数组。
getColorAt($x, $y)
获取单个像素的RGBA值。
$x
* (int) - 像素的水平位置。$y
* (int) - 像素的垂直位置。返回 RGBA 颜色数组,如果 x/y 位置超出画布,则返回 false。
(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% 白红|0.25 <-- 25% 红
返回一个数组:[红、绿、蓝、alpha]
当出现问题时,SimpleImage 会抛出标准异常。您应该始终在代码周围使用 try/catch 块来正确处理它们。
<?php
try {
$ image = new claviska SimpleImage( ' image.jpeg ' )
// ...
} catch ( Exception $ err ) {
echo $ err -> getMessage ();
}
要检查特定错误,请将$err->getCode()
与定义的错误常量进行比较。
<?php
try {
$ image = new claviska SimpleImage( ' 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_INVALID_FLAG
- 指定的标志键不存在。颜色参数可以是 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] 处绘制。这对于所有形状都是如此,并且不是 SimpleImage 库中的错误。
通过使用setFlag($key, $value)
方法设置实例标志值来调整 SimpleImage 实例的行为。
$ image = new claviska SimpleImage ( ' image.jpeg ' )-> setFlag ( " foo " , " bar " );
您还可以将关联数组传递给 SimpleImage 构造函数来设置实例标志。
$ image = new claviska SimpleImage ( ' image.jpeg ' , [ ' foo ' => ' bar ' ]);
// . . or without an $ image
$ image = new claviska SimpleImage (flags: [ ' foo ' => ' bar ' ]);
注意:如果键不存在(无默认值) setFlag()
会抛出ERR_INVALID_FLAG
异常。
sslVerify
将sslVerify
设置为false
(默认为true
)将使所有通过 HTTPS 加载的图像放弃证书对等验证。这对于自签名证书特别有用。
$ image = new claviska SimpleImage ( ' https://localhost/image.jpeg ' , [ ' sslVerify ' => false ]);
// Would normally throw an OpenSSL exception , but is ignored with the sslVerify flag set to false .
text
方法添加了文本阴影。fromString()
方法以从字符串加载图像。toString()
方法来生成图像字符串。arc
方法。border
方法。dot
方法。ellipse
方法。line
方法。polygon
方法。rectangle
方法。roundedRectangle
方法。adjustColor
方法,用于修改 RGBA 颜色通道以创建相对颜色变化。darkenColor
方法来使颜色变暗。extractColors
方法以从图像中获取最常见的颜色。getColorAt
方法来获取特定像素的 RGBA 值。lightenColor
方法来淡化颜色。toDownload
方法以强制将图像下载到客户端计算机上。duotone
滤镜来创建双色调图像。sharpen
方法来锐化图像。abeautifulsite
更改为claviska
。create
方法更改为fromNew
。load
方法更改为fromFile
。load_base64
方法更改为fromDataUri
。output
方法更改为toScreen
.xoutput_base64
方法更改为toDataUri
。save
方法更改为toFile
。text
方法以接受选项数组而不是大量参数。text
方法中删除了文本笔划,因为它会产生脏结果并且不支持透明度。smooth
方法,因为 PHP 手册中的参数没有得到很好的记录。adaptive_resize
(改用thumbnail
)。get_meta_data
(使用getExif
、 getHeight
、 getMime
、 getOrientation
和getWidth
代替)。