用于调整大小、缩放和裁剪图像的 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,然后您可以指示如何处理超过传递裁剪值的 100px您想要使用的模式。
例如,通过裁剪模式CROPTOP
将导致底部减少 100 像素,留下 200 像素 × 200 像素。
$ 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 和图像函数可能会显示错误 (http://php.net/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 );
https://gumlet.github.io/php-image-resize/index.html
该库由 Gumlet.com 维护