rvdlee / zf-image-resizer
一个允许您使用ImageMagick等程序调整图像大小的软件包。
Requires
- php: ^7.2 || ^7.3
- zendframework/zend-filter: ^2.9
- zendframework/zend-log: ^2.11
- zendframework/zend-modulemanager: ^2.8
- zendframework/zend-mvc: ^2.7.10 || ^3.0.1
- zendframework/zend-servicemanager: ^2.7.8 || ^3.3
- zendframework/zend-stdlib: ^3.2
- zendframework/zend-validator: *
Requires (Dev)
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-09-25 15:48:56 UTC
README
这是一个图像调整大小软件包。我考虑到ZF3编写了这个软件包,所有内容都考虑了配置而不是传统。高度可扩展且易于使用。您可以与我的其他软件包一起使用以优化图像。
本软件包的主要功能包括:
- 通过InputFilters调整大小
- 通过服务对象调整大小
- 动态调整大小
用法
要开始使用,您需要选择一个调整大小的程序。默认情况下,我们直接支持ImageMagick。它是主流软件,在调整图像尺寸的同时保持了优秀的图像质量。
您需要一些配置才能开始。我们保持了验证链的简单性,因为ImageMagick支持200多种格式。如果您正在编写自己的适配器,您现在可以选择通过该适配器验证图像是否适合调整大小。
# ... config use statements return [ 'rvdlee' => [ 'zf-image-resizer' => [ 'adapter' => ImageMagick::class, 'validator-chain' => [ ['name' => IsImage::class], ], ], ], ];
该模型内置了一些计算和一些当某些参数未提供时的回退逻辑。一个好的例子是,当只提供了宽度或高度时,比例缩放。
其他计算包括根据图像上的九个位置之一进行裁剪。这里有一些裁剪的示例。这张美丽的图片由Scott Walsh发布,在免费许可下。感谢你这样做!
这里是我们完整的图像。我调整了原始照片的大小以示例,因为它的质量和分辨率较高,不适合演示图像调整大小。
让我们从简单的事情开始。图像调整大小。您可以使用两种方法中的一种来调整以下图像,您可以为宽度定义高度 $imageResizerService->resizeImage($file->getPath(), 300, 200)
或仅提供宽度 $imageResizerService->resizeImage($file->getPath(), 300)
或高度 $imageResizerService->resizeImage($file->getPath(), 0, 200)
。当您只提供其中之一时,它将通过比例调整图像。
然后有一个简单的裁剪。我们将使用内置的计算来裁剪图像的中心,定义裁剪的宽度和高度。$imageResizerService->cropImage($file->getPath(), 350, 350, Image::CENTERED_CROP)))
。
您是您自己的裁剪大师,您可以定义您想要的宽度和高度。选择包已提供的中心或任何其他模式。 $imageResizerService->cropImage($file->getPath(), 300, 450, Image::CENTERED_CROP)
此外,如果您想完全控制,还有一个手动模式。最后两个参数是裁剪的 x
和 y
坐标。$imageResizerService->cropImage($file->getPath(), 400, 400, Image::MANUAL_CROP, 0, 400)
InputFilters
就像我的优化器软件包一样,我们支持InputFilters,使得上传照片(例如头像)等照片的调整大小变得轻而易举。将 Image::CENTERED_CROP
选项传递给服务对象会自动对原始视频进行居中裁剪。
使用InputFilter很简单。
$this->add( [ 'type' => FileInput::class, 'name' => 'avatar', 'required' => false, 'filters' => [ # ... Other filters [ 'name' => ImageResizer::class, 'options' => [ 'mode' => Image::ONLY_CROP_MODUS, 'crop_mode' => Image::CENTERED_CROP, 'crop_width' => 100, 'crop_height' => 100, ], ], ], 'validators' => [ # ... Validators ], ] );
服务
服务对象是调整大小的基线。您可以在zend应用程序的任何位置使用DI实例化此对象。我们还支持日志记录,以捕获用于调整图像大小的程序的输出。
服务默认配备了一个默认的Zend\Log\Writer\Mock
记录器。您仍然可以访问此记录器的日志。在构建服务时,您可以覆盖这个默认设置。这使您能够提供一个数据库、日志文件或标准输出记录器。
class SomeFactory implements FactoryInterface { public function __invoke(ContainerInterface $container, $requestedName, array $options = null) { /** @var ImageResizerService $imageOptimiserService */ $imageResizerService = $container->get(ImageResizerService::class); # or... provide your own LoggerInterface /** @var Logger $logger */ $logger = $container->get(Logger::class); /** @var Stream $writer */ $logger->addWriter(new Stream('php://output')); /** @var ImageResizerService $imageOptimiserService */ $imageResizerService = $container->build(ImageResizerService::class, ['logger' => $logger]); # ... other factory stuff } }
如果您想访问Mock记录器中的日志,请使用以下代码片段。定位到Mock记录器,然后查看事件。
/** @var array|WriterInterface[] $writers */ $writers = $imageResizerService->getLogger()->getWriters()->toArray(); /** @var Zend\Log\Writer\Mock $mockWriter */ $mockWriter = $writers[0]; /** @var array $events */ $events = $mockWriter->events;