rvdlee/zf-image-resizer

一个允许您使用ImageMagick等程序调整图像大小的软件包。

0.0.3 2020-09-25 06:52 UTC

This package is auto-updated.

Last update: 2024-09-25 15:48:56 UTC


README

Latest Version on Packagist Scrutinizer Code Quality Total Downloads GitHub license Donate

这是一个图像调整大小软件包。我考虑到ZF3编写了这个软件包,所有内容都考虑了配置而不是传统。高度可扩展且易于使用。您可以与我的其他软件包一起使用以优化图像。

本软件包的主要功能包括:

  • 通过InputFilters调整大小
  • 通过服务对象调整大小
  • 动态调整大小

用法

要开始使用,您需要选择一个调整大小的程序。默认情况下,我们直接支持ImageMagick。它是主流软件,在调整图像尺寸的同时保持了优秀的图像质量。

您需要一些配置才能开始。我们保持了验证链的简单性,因为ImageMagick支持200多种格式。如果您正在编写自己的适配器,您现在可以选择通过该适配器验证图像是否适合调整大小。

# ... config use statements

return [
    'rvdlee' => [
        'zf-image-resizer'   => [
            'adapter'         => ImageMagick::class,
            'validator-chain' => [
                ['name' => IsImage::class],
            ],
        ],
    ],
]; 

该模型内置了一些计算和一些当某些参数未提供时的回退逻辑。一个好的例子是,当只提供了宽度或高度时,比例缩放。

其他计算包括根据图像上的九个位置之一进行裁剪。这里有一些裁剪的示例。这张美丽的图片Scott Walsh发布,在免费许可下。感谢你这样做!

这里是我们完整的图像。我调整了原始照片的大小以示例,因为它的质量和分辨率较高,不适合演示图像调整大小。

Full image, by

让我们从简单的事情开始。图像调整大小。您可以使用两种方法中的一种来调整以下图像,您可以为宽度定义高度 $imageResizerService->resizeImage($file->getPath(), 300, 200) 或仅提供宽度 $imageResizerService->resizeImage($file->getPath(), 300) 或高度 $imageResizerService->resizeImage($file->getPath(), 0, 200)。当您只提供其中之一时,它将通过比例调整图像。

Resized to 300x200

然后有一个简单的裁剪。我们将使用内置的计算来裁剪图像的中心,定义裁剪的宽度和高度。$imageResizerService->cropImage($file->getPath(), 350, 350, Image::CENTERED_CROP)))

Cropped 350x350 Centered

您是您自己的裁剪大师,您可以定义您想要的宽度和高度。选择包已提供的中心或任何其他模式。 $imageResizerService->cropImage($file->getPath(), 300, 450, Image::CENTERED_CROP)

Cropped 300x450 Centered

此外,如果您想完全控制,还有一个手动模式。最后两个参数是裁剪的 xy 坐标。$imageResizerService->cropImage($file->getPath(), 400, 400, Image::MANUAL_CROP, 0, 400)

Manual 400x400 crop with own coordinates

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;