getgrav / image
图像处理
Requires
- php: ^5.6 || ^7.0 || ^8.0
- ext-gd: *
- getgrav/cache: ^2.0
Requires (Dev)
- sllh/php-cs-fixer-styleci-bridge: ~1.0
- symfony/phpunit-bridge: ^2.7.4 || ^3.0
Suggests
- behat/transliterator: Transliterator provides ability to set non-latin1 pretty names
- dev-main
- v3.0.1
- v3.0.0
- v2.1.0
- v2.0.28
- v2.0.27
- v2.0.26
- v2.0.25
- v2.0.24
- v2.0.23
- v2.0.22
- v2.0.21
- v2.0.20
- v2.0.19
- v2.0.18
- v2.0.17
- v2.0.16
- v2.0.15
- v2.0.14
- v2.0.13
- v2.0.12
- v2.0.11
- v2.0.10
- v2.0.9
- v2.0.8
- v2.0.7
- v2.0.6
- v2.0.5
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- v1.0.4
- v1.0.3
- v1.0.2
- 1.0.1
- 1.0.0
- dev-master
- dev-php8
- dev-adapter
This package is auto-updated.
Last update: 2024-09-09 01:04:32 UTC
README
Gregwar\Image
类的作用是提供一个简单的面向对象的图像处理和缓存API。
安装
使用composer
{ ... "require": { "gregwar/image": "2.*" } }
使用方法
基本处理
使用方法链,您可以在一行中打开、转换和保存文件
<?php use Gregwar\Image\Image; Image::open('in.png') ->resize(100, 100) ->negate() ->save('out.jpg');
以下是一些调整大小的方法
resize($width, $height, $background)
: 调整图像大小,将保留比例且不会放大(背景为红色以便理解所发生的情况)
scaleResize($width, $height, $background)
: 调整图像大小,将保留比例,可以放大(背景为红色以便理解所发生的情况)
forceResize($width, $height, $background)
: 强制图像大小恰好为$width
x$height
cropResize($width, $height, $background)
: 调整图像大小,保留比例(类似于resize()
)并裁剪空白部分
zoomCrop($width, $height, $background, $xPos, $yPos)
: 调整和裁剪图像以适应给定的尺寸
- 在
zoomCrop()
中,您可以使用$xPos
(中心、左或右)和$yPos
(中心、顶部或底部)更改调整大小后的图像位置
其他可用的方法有
-
crop($x, $y, $w, $h)
: 将图像裁剪到坐标$x,y上的一个矩形框,大小为$w x $h -
negate()
: 反转图像颜色 -
brighness($b)
: 对图像应用亮度效果(从-255到+255) -
contrast($c)
: 对图像应用对比度效果(从-100到+100) -
grayscale()
: 将图像转换为灰度 -
emboss()
: 浮雕图像 -
smooth($p)
: 平滑图像 -
sharp()
: 对图像应用均值移除过滤器 -
edge()
: 对图像应用边缘效果 -
colorize($red, $green, $blue)
: 着色图像(每个颜色从-255到+255) -
sepia()
: 应用棕褐色效果 -
merge($image, $x, $y, $width, $height)
: 合并两个图像 -
fill($color, $x, $y)
: 用给定颜色填充图像 -
write($font, $text, $x, $y, $size, $angle, $color, $position)
: 在图像上写文本,$position可以是'left'、'right'或'center'之一 -
rectangle($x1, $y1, $x2, $y2, $color, $filled=false)
: 绘制矩形 -
rotate($angle, $background = 0xffffff)
: 将图像旋转到指定角度 -
roundedRectangle($x1, $y1, $x2, $y2, $radius, $color, $filled=false)
: 绘制圆角矩形(半径可以是任何值) -
line($x1, $y1, $x2, $y2, $color)
: 绘制线条 -
ellipse($cx, $cy, $width, $height, $color, $filled=false)
: 绘制椭圆 -
circle($cx, $cy, $r, $color, $filled=false)
: 绘制圆 -
fillBackground($bg=0xffffff)
: 将透明图像的背景填充为'bg'颜色 -
fixOrientation()
: 根据图像EXIF信息旋转和翻转图像 -
applyExifOrientation(int $exif_rotation_value)
: 使用EXIF旋转值旋转和翻转图像 -
html($title = '', $type = 'jpg')
: 返回带有缓存图像的<img ... />
标签 -
flip($flipVertical, $flipHorizontal)
: 在给定方向上翻转图像。两个参数都是布尔值,至少必须有一个为真。 -
inline($type = 'jpg')
: 返回可内联的HTML base64字符串(见demo/inline.php
)
您也可以使用以下方法从头创建图像
<?php Image::create(200, 100);
其中200是宽度,100是高度
保存图像
您可以使用save($file, $type = 'jpg', $quality = 80)
将图像保存到显式文件
<?php // ... $image->save('output.jpg', 'jpg', 85);
您还可以使用get($type = 'jpg', $quality = 80)
获取图像内容,这将返回图像的二进制内容
使用缓存
上述每个操作实际上并没有应用到打开的图像上,而是添加到一个操作数组中。这个操作数组、文件名称、类型和修改时间使用sha1()
进行哈希处理,然后使用这个哈希值来查找缓存文件。
一旦配置了缓存目录,您就可以调用以下方法
-
jpeg($quality = 80)
:即时查找或创建JPEG缓存文件 -
gif()
:即时查找或创建GIF缓存文件 -
png()
:即时查找或创建PNG缓存文件 -
guess($quality = 80)
:猜测类型(使用与输入相同的类型)并即时查找或创建缓存文件 -
setPrettyName($prettyName, $prefix = true)
:为文件设置一个“漂亮”的名称后缀,如果您想使其更利于SEO。例如,如果您将其命名为“Fancy Image”,缓存将类似于something/something-fancy-image.jpg。如果$prefix
传递为false
(默认true
),则漂亮名称不会有任何哈希前缀。如果您想使用非latin1漂亮名称,必须安装behat/transliterator包。
例如
<?php use Gregwar\Image\Image; echo Image::open('test.png') ->sepia() ->jpeg(); //Outputs: cache/images/1/8/6/9/c/86e4532dbd9c073075ef08e9751fc9bc0f4.jpg
如果原始文件和操作没有改变,哈希值将是相同的,并且缓存将不会再次生成。
您可以直接在HTML文档中使用它
<?php use Gregwar\Image\Image; // ... <img src="<?php echo Image::open('image.jpg')->resize(150, 150)->jpeg(); ?>" /> // ...
这是强大的,因为如果您更改原始图像或任何代码,缓存哈希将改变,并且文件将被重新生成。
写入图像
您还可以使用绘图函数即时创建自己的图像
<?php $img_src = Image::create(300, 300) ->fill(0xffaaaa) // Filling with a light red ->rectangle(0xff3333, 0, 100, 300, 200, true) // Drawing a red rectangle // Writing "Hello $username !" on the picture using a custom TTF font file ->write('./fonts/CaviarDreams.ttf', 'Hello '.$username.'!', 150, 150, 20, 0, 'white', 'center') ->jpeg(); ?> <img src="<?= $img_src ?>" />
使用后备图像
如果图像文件不存在,您可以配置一个后备图像,该图像将由类使用(请注意,这需要缓存目录可用)。
默认的“错误”图像位于images/error.jpg
,您可以通过以下方式更改它
<?php $img->setFallback('/path/to/my/fallback.jpg');
垃圾回收
为了防止缓存无限增长,您可以使用提供的GarbageCollect类如下
<?php use Gregwar\Image\GarbageCollect; // This could be a cron called each day @3:00AM for instance // Removes all the files from ../cache that are more than 30 days // old. A verbose output will explain which files are deleted GarbageCollect::dropOldFiles(__DIR__.'/../cache', 30, true);
开发
Gregwar\Image
使用了PHP元编程范式,这使得它很容易增强。
处理图像的每个函数都是在一个适配器中实现的,这就是所有具体操作发生的地方。
Common
适配器设计用来包含常见抽象操作,而特定适配器(如GD
)设计用来包含针对底层层的特定操作。
您可以通过添加到相应的适配器中来添加您自己的方法。
<?php // In the adapter private function myFilter() { $this->negate(); $this->sepia(); }
这在Image上可以用来
<?php $image->myFilter();
您还可以编写自己的适配器,可以扩展此存储库中的一个,并通过调用setAdapter()
来使用它
<?php $image->setAdapter(new MyCustomAdapter);
许可
Gregwar\Image
在MIT许可证下,请阅读LICENSE文件以获取更多信息。不要犹豫,fork此存储库并自定义它!