wjerome / imagine
Imagine (图像引擎) 是一个PHP微型库,用于调整图像大小、创建缩略图或应用过滤器
2.5.0
2022-06-03 17:40 UTC
Requires
- php: >=7.2
- ext-gd: *
Requires (Dev)
- php: >=7.3
- meyfa/phpunit-assert-gd: ^3.0
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.6
This package is not auto-updated.
Last update: 2024-09-23 23:42:28 UTC
README
🖼 Imagine (图像引擎) 是一个PHP微型库,用于调整图像大小、创建缩略图或应用过滤器
需求
- PHP >= 7.2
- GD
支持的文件类型
- jpg
- png
- gif
- webp
- bmp
安装
composer require wjerome/imagine
使用
use Imagine\Imagine; try { $image = new Imagine($_FILES['image']['tmp_name']); $image->setWidth(200); $image->setHeight(290); $image->save('./uploads/my-image.jpg'); } catch (Exception $e) { echo 'Exception: ' . $e->getMessage(); }
// Chaining methods (new Imagine('./my-image.jpg')) ->setWidth(200) ->setHeight(200) ->setQuality(90) ->setFit('cover') ->save('./uploads/my-image.jpg');
函数
// File upload $image = new Imagine($_FILES['image']['tmp_name']); // Or a file in a folder $image = new Imagine('./my-picture.jpg'); // Setter $image->setWidth(200); $image->setHeight(290); $image->setType('png'); $image->setDPI(96); $image->setQuality(90); $image->setCropAuto(); $image->setCropFromPixel(0, 0, 300, 300); $image->setCropFromPercent(0, 0, 100, 100); $image->setFit('cover'); $image->setPosition('left', 'top'); $image->setBackgroundFromRGBA(255, 255, 255, 1); $image->setBackgroundFromHexa('#ffaaff'); $image->setBackgroundTransparent(); $image->setBackgroundMainColor(); $image->addFilter(IMG_FILTER_GRAYSCALE); $image->setIsInterlace(true); $image->setIsOverride(false); $image->reset(); // Getter $image->getSrcWidth(); $image->getSrcHeight(); $image->getSrcMime(); $image->getSrcType(); $image->getSrcDPI(); $image->getDistWidth(); $image->getDistHeight(); $image->getDistMime(); $image->getDistType(); $image->getDistDPI(); $image->getQuality(); $image->getCropAuto(); $image->getCropType(); $image->getCropSize(); $image->getFit(); $image->getPosition(); $image->getBackground(); $image->getBackgroundFromHexa(); $image->getFilters(); $image->getIsInterlace(); $image->getIsOverride(); // Save file $image->save('./uploads/my-image.jpg'); $image->saveAndContinue('./uploads/my-image.jpg'); $image->saveAndReset('./uploads/my-image.jpg'); // Or render in browser $image->displayOnBrowser();
示例
调整宽度
$image = new Imagine('./tests/assets/file-valid.jpg'); $image->setWidth(300); $image->save('./doc/img/example-01.jpg');
调整高度
$image = new Imagine('./tests/assets/file-valid.jpg'); $image->setHeight(300); $image->save('./doc/img/example-02.jpg');
创建适合“拉伸”的缩略图
$image = new Imagine('./tests/assets/file-valid.jpg'); $image->setWidth(300); $image->setHeight(300); $image->save('./doc/img/example-03.jpg');
创建适合“包含”的缩略图
$image = new Imagine('./tests/assets/file-valid.jpg'); $image->setWidth(300); $image->setHeight(300); $image->setFit('contain'); $image->save('./doc/img/example-04.jpg');
创建适合“覆盖”的缩略图
$image = new Imagine('./tests/assets/file-valid.jpg'); $image->setWidth(300); $image->setHeight(300); $image->setFit('cover'); $image->save('./doc/img/example-05.jpg');
背景颜色透明
$image = new Imagine('./tests/assets/file-transparent.png'); $image->setWidth(300); $image->setHeight(300); $image->setBackgroundTransparent(); $image->save('./doc/img/example-06.png');
背景颜色主色
$image = new Imagine('./tests/assets/file-valid.jpg'); $image->setWidth(300); $image->setHeight(300); $image->setBackgroundMainColor(); $image->save('./doc/img/example-07.jpg');
背景颜色使用数组
$image = new Imagine('./tests/assets/file-transparent.png'); $image->setWidth(300); $image->setHeight(300); $image->setBackgroundFromRGBA(255, 0, 0, 1); $image->setType('jpg'); $image->save('./doc/img/example-08.jpg');
背景颜色使用十六进制
$image = new Imagine('./tests/assets/file-transparent.png'); $image->setWidth(300); $image->setHeight(300); $image->setBackgroundFromHexa('#ffaaff'); $image->setType('jpg'); $image->save('./doc/img/example-09.jpg');
缩略图中图像位置
$image = new Imagine('./tests/assets/file-valid.jpg'); $image->setWidth(300); $image->setHeight(300); $image->setPosition('left', 'top'); $image->save('./doc/img/example-10.jpg');
质量
$image = new Imagine('./tests/assets/file-valid.jpg'); $image->setWidth(300); $image->setQuality(50); // percent $image->save('./doc/img/example-11.jpg');
注意:1
在PNG中,质量不是百分比,而是介于0
和9
之间的值。0
对应无压缩,9
对应最大压缩。以下是在$image->setQuality()
中填充的值
setQuality(0)
: 压缩9
setQuality(1) -> setQuality(11)
: 压缩8
setQuality(12) -> setQuality(22)
: 压缩7
setQuality(23) -> setQuality(33)
: 压缩6
setQuality(34) -> setQuality(44)
: 压缩5
setQuality(45) -> setQuality(55)
: 压缩4
setQuality(56) -> setQuality(66)
: 压缩3
setQuality(67) -> setQuality(77)
: 压缩2
setQuality(78) -> setQuality(88)
: 压缩1
setQuality(89) -> setQuality(100)
: 压缩0
(注意,文件大小可能很重要)
注意:2
默认质量为100%,但如果处理PNG文件,它将通过imagepng()
函数进行处理,100%的质量会使目标图像比源图像大得多(高达原始文件大小的11倍)。因此,为了避免滥用,默认情况下PNG的质量为0%(对应于压缩9
)。
自动裁剪
通过计算未使用像素来裁剪目标图像
$image = new Imagine('./tests/assets/file-transparent-border.png'); $image->setBackgroundFromHexa('#ccc'); $image->setWidth(300); $image->setCropAuto(); $image->save('./doc/img/example-16.jpg');
手动裁剪(以像素为单位)
通过传递像素位置和大小来裁剪目标图像
$image = new Imagine('./tests/assets/file-transparent-border.png'); $image->setBackgroundFromHexa('#ccc'); $image->setCropFromPixel(300, 150, 300, 150); $image->save('./doc/img/example-17.jpg');
手动裁剪(以百分比为单位)
通过传递位置和大小(以百分比)来裁剪目标图像
$image = new Imagine('./tests/assets/file-transparent-border.png'); $image->setBackgroundFromHexa('#ccc'); $image->setWidth(300); $image->setCropFromPercent(25, 25, 50, 50); $image->save('./doc/img/example-18.jpg');
转换MIME文件
$image = new Imagine('./tests/assets/file-transparent.png'); $image->setWidth(300); $image->setType('jpg'); // jpg|jpeg|png|gif|webp|bmp $image->save('./doc/img/example-12.jpg');
添加灰度滤镜
$image = new Imagine('./tests/assets/file-valid.jpg'); $image->setWidth(300); $image->addFilter(IMG_FILTER_GRAYSCALE); $image->save('./doc/img/example-13.jpg');
添加灰度和模糊滤镜
$image = new Imagine('./tests/assets/file-valid.jpg'); $image->setWidth(300); $image->addFilter(IMG_FILTER_GRAYSCALE); $image->addFilter(IMG_FILTER_GAUSSIAN_BLUR); $image->addFilter(IMG_FILTER_GAUSSIAN_BLUR); // More blur $image->addFilter(IMG_FILTER_GAUSSIAN_BLUR); // More more blur $image->save('./doc/img/example-14.jpg');
逐步显示jpg
和jpeg
图像
$image = new Imagine('./tests/assets/file-valid.jpg'); $image->setWidth(300); $image->setIsInterlace(true); $image->save('./doc/img/example-15.jpg');
在浏览器中显示
$image = new Imagine('./tests/assets/file-valid.jpg'); $image->displayOnBrowser();
使用单个资源创建多个图像
每次写入文件时重置设置
$image = new Imagine('./tests/assets/file-valid.jpg'); $image->addFilter(IMG_FILTER_GRAYSCALE); $image->setWidth(300); $image->setHeight(300); $image->setQuality(80); $image->saveAndReset('./doc/img/example-16-1.jpg'); $image->setWidth(500); $image->setFit('cover'); $image->saveAndReset('./doc/img/example-16-2.jpg'); $image->setWidth(1000); $image->setQuality(100); $image->save('./doc/img/example-16-3.jpg');
每次写入文件时保留之前的配置
$image = new Imagine('./tests/assets/file-valid.jpg'); $image->addFilter(IMG_FILTER_GRAYSCALE); $image->setWidth(300); $image->setHeight(300); $image->setQuality(80); $image->saveAndContinue('./doc/img/example-16-4.jpg'); $image->setWidth(500); $image->setFit('cover'); $image->saveAndContinue('./doc/img/example-16-5.jpg'); $image->setWidth(1000); $image->setQuality(100); $image->save('./doc/img/example-16-6.jpg');