olegstyle / php-image-resize
PHP类用于调整和缩放图像
Requires
- php: >=5.6.0
- ext-fileinfo: *
- ext-gd: *
Requires (Dev)
- ext-exif: *
- ext-gd: *
- apigen/apigen: ^4.1
- php-coveralls/php-coveralls: ^2.1
- phpunit/phpunit: ^8.5
Suggests
- ext-exif: Auto-rotate jpeg files
This package is not auto-updated.
Last update: 2024-09-27 12:27:18 UTC
README
PHP库,用于调整、缩放和裁剪图像。
云解决方案
如果您不想在服务器上裁剪、调整大小和存储图像,Gumlet.com 是一个 免费 的服务,可以实时处理图像并通过 CDN 在全球范围内提供。
设置
此包可通过 Packagist 获取,供应商和包标识符与该存储库相同。
如果您正在使用 Composer,请将以下内容添加到您的 composer.json
文件中:
{ "require": { "gumlet/php-image-resize": "2.0.*" } }
如果您仍在使用 PHP 5.3,请安装版本 1.7.0
;如果您正在使用 PHP 5.4,请安装此库的 1.8.0
版本。
从 PHP 5.6.0
开始支持 WebP,当前库版本支持该功能。如果您遇到问题,请使用此库的 1.9.2
版本。
对于 PHP 版本 >= 7.2,应使用此库的 2.0.1
或更高版本。
否则
include '/path/to/ImageResize.php';
由于此类使用命名空间,在实例化对象时,您必须使用完全限定的命名空间
$image = new \Gumlet\ImageResize();
或为其创建别名
use \Gumlet\ImageResize; $image = new ImageResize();
注意:此库使用 GD 类,该类不支持调整大小动画 GIF 文件
调整大小
要缩放图像,在本例中是将图像大小减半(缩放基于百分比)
$image = new ImageResize('image.jpg'); $image->scale(50); $image->save('image2.jpg');
根据一个维度调整图像大小(保持宽高比)
$image = new ImageResize('image.jpg'); $image->resizeToHeight(500); $image->save('image2.jpg'); $image = new ImageResize('image.jpg'); $image->resizeToWidth(300); $image->save('image2.jpg');
根据给定的尺寸调整图像大小,无论其方向如何(保持宽高比)
$image = new ImageResize('image.jpg'); $image->resizeToLongSide(500); $image->save('image2.jpg'); $image = new ImageResize('image.jpg'); $image->resizeToShortSide(300); $image->save('image2.jpg');
将图像调整大小以最适合给定的尺寸集(保持宽高比)
$image = new ImageResize('image.jpg'); $image->resizeToBestFit(500, 300); $image->save('image2.jpg');
所有调整大小函数都有 $allow_enlarge
选项,默认设置为 false。您可以通过将 true
传递给任何调整大小函数来启用它
$image = new ImageResize('image.jpg'); $image->resize(500, 300, $allow_enlarge = True); $image->save('image2.jpg');
如果您愿意自行处理宽高比,您可以直接调整大小
$image = new ImageResize('image.jpg'); $image->resize(800, 600); $image->save('image2.jpg');
如果您不使用与源图像相同的宽度/高度比,这将导致您的图像变形。
裁剪
要裁剪图像
$image = new ImageResize('image.jpg'); $image->crop(200, 200); $image->save('image2.jpg');
这将根据传递的尺寸尽可能缩小图像,然后裁剪并居中剩余部分。
在上面的例子中,一个 400px × 600px 的图像将被调整大小为 200px × 300px,然后从顶部和底部裁剪掉 50px,留下 200px × 200px。
裁剪模式
为了在调整图像大小后处理超出宽度和高度的情况,提供了有限的裁剪模式选项。默认使用的裁剪模式是 CROPCENTER
。因此,以下代码是等效的
$image = new ImageResize('image.jpg'); $image->crop(200, 200); $image->save('image2.jpg');
$image = new ImageResize('image.jpg'); $image->crop(200, 200, true, ImageResize::CROPCENTER); $image->save('image2.jpg');
如果您有一个 400px × 600px 的图像,并且想要将其裁剪为 200px × 200px,图像将被调整大小为 200px × 300px,然后您可以指示如何处理这些超出部分,通过传递您想要使用的裁剪模式值。
例如,传递裁剪模式 CROPTOP
将导致从底部裁剪掉 100px,留下您 200px × 200px。
$image = new ImageResize('image.jpg'); $image->crop(200, 200, true, ImageResize::CROPTOP); $image->save('image2.jpg');
相反,传递裁剪模式 CROPBOTTOM
将导致从顶部裁剪掉 100px,留下您 200px × 200px。
$image = new ImageResize('image.jpg'); $image->crop(200, 200, true, ImageResize::CROPBOTTOM); $image->save('image2.jpg');
Freecrop
还可以定义自定义裁剪位置。您可以在 freecrop
方法中定义 $x 和 $y
$image = new ImageResize('image.jpg'); $image->freecrop(200, 200, $x = 20, $y = 20); $image->save('image2.jpg');
从字符串加载和保存图像
要从字符串加载图像
$image = ImageResize::createFromString(base64_decode('R0lGODlhAQABAIAAAAQCBP///yH5BAEAAAEALAAAAAABAAEAAAICRAEAOw==')); $image->scale(50); $image->save('image.jpg');
您还可以将结果作为字符串返回
$image = ImageResize::createFromString(base64_decode('R0lGODlhAQABAIAAAAQCBP///yH5BAEAAAEALAAAAAABAAEAAAICRAEAOw==')); $image->scale(50); echo $image->getImageAsString();
支持 __toString()
魔法函数
$image = ImageResize::createFromString(base64_decode('R0lGODlhAQABAIAAAAQCBP///yH5BAEAAAEALAAAAAABAAEAAAICRAEAOw==')); $image->resize(10, 10); echo (string)$image;
显示
如上所示,您可以调用 $image->save('image.jpg');
要将图像直接渲染到浏览器,您可以调用 $image->output()
;
图像类型
当保存到磁盘或输出到浏览器时,脚本假定输出类型与输入类型相同。
如果您想以不同的图像类型保存/输出,需要传递一个(支持的)PHP IMAGETYPE_
* 常量
IMAGETYPE_GIF
IMAGETYPE_JPEG
IMAGETYPE_PNG
这允许您将不同类型的图像保存到源图像
$image = new ImageResize('image.jpg'); $image->resize(800, 600); $image->save('image.png', IMAGETYPE_PNG);
质量
提供了 $quality_jpg
、$quality_webp
和 $quality_png
属性供您配置
$image = new ImageResize('image.jpg'); $image->quality_jpg = 100; $image->resize(800, 600); $image->save('image2.jpg');
默认情况下,它们分别设置为 85 和 6。有关更多信息,请参阅 imagejpeg()
和 imagepng()
的手册条目。
您也可以直接将质量传递给 save()
、output()
和 getImageAsString()
方法
$image = new ImageResize('image.jpg'); $image->crop(200, 200); $image->save('image2.jpg', null, 100); $image = new ImageResize('image.jpg'); $image->resizeToWidth(300); $image->output(IMAGETYPE_PNG, 4); $image = new ImageResize('image.jpg'); $image->scale(50); $result = $image->getImageAsString(IMAGETYPE_PNG, 4);
在上面的示例中,我们为图像类型传递了 null
以跳过它并提供质量。在这种情况下,假定图像类型与输入相同。
交错
默认情况下,图像交错 已启用。可以通过将 $interlace
设置为 0
来禁用。
$image = new ImageResize('image.jpg'); $image->scale(50); $image->interlace = 0; $image->save('image2.jpg');
链式调用
在执行操作时,原始图像会被保留,这样您就可以在不破坏过度的前提下进行链式操作。
这对于创建多个尺寸非常有用
$image = new ImageResize('image.jpg'); $image ->scale(50) ->save('image2.jpg') ->resizeToWidth(300) ->save('image3.jpg') ->crop(100, 100) ->save('image4.jpg') ;
异常
ImageResize 抛出 ImageResizeException 以处理错误。您可以捕获该异常或捕获它扩展的通用 \Exception。
这种情况并不常见,但如果过程中出现严重错误,则可能会显示 PHP GD 和 Image 函数(https://php.ac.cn/manual/en/ref.image.php)的错误或警告。
try{ $image = new ImageResize(null); echo "This line will not be printed"; } catch (ImageResizeException $e) { echo "Something went wrong" . $e->getMessage(); }
过滤器
您可以为新图像应用特殊效果,如模糊或添加横幅。
$image = new ImageResize('image.jpg'); // Add blure $image->addFilter(function ($imageDesc) { imagefilter($imageDesc, IMG_FILTER_GAUSSIAN_BLUR); }); // Add banner on bottom left corner $image18Plus = 'banner.png' $image->addFilter(function ($imageDesc) use ($image18Plus) { $logo = imagecreatefrompng($image18Plus); $logo_width = imagesx($logo); $logo_height = imagesy($logo); $image_width = imagesx($imageDesc); $image_height = imagesy($imageDesc); $image_x = $image_width - $logo_width - 10; $image_y = $image_height - $logo_height - 10; imagecopy($imageDesc, $logo, $image_x, $image_y, 0, 0, $logo_width, $logo_height); });
翻转
使用给定的模式翻转图像,此方法仅适用于 PHP 版本 5.4。
$flip = new ImageResize('image.png'); $image = imagecreatetruecolor(200, 100); $flip->imageFlip($image, 0);
两个函数将按照它们添加的顺序使用。
伽马色彩校正
您可以启用默认情况下禁用的伽马色彩校正。
$image = new ImageResize('image.png'); $image->gamma(true);
API 文档
https://gumlet.github.io/php-image-resize/index.html
维护者
此库由 Gumlet.com 维护。