gumlet/php-image-resize

PHP图像缩放和缩放类

2.0.4 2023-10-11 14:16 UTC

README

PHP库,用于调整、缩放和裁剪图像。

Build Status Latest Stable Version Monthly Downloads Coverage Status

云解决方案

如果您不想在服务器上裁剪、调整大小和存储图像,可以使用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,然后您可以通过传递要使用的裁剪模式值来指示如何处理这些超出的100px。

例如,传递裁剪模式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方法中定义$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);

$image->addFilter(function ($image) {
    imageflip($image, IMG_FLIP_HORIZONTAL);
});

这两个函数将按它们被添加的顺序使用。

伽玛颜色校正

您可以启用伽玛颜色校正,默认情况下是禁用的。

$image = new ImageResize('image.png');
$image->gamma(true);

API 文档

https://gumlet.github.io/php-image-resize/index.html

维护者

此库由 Gumlet.com 维护