czim / file-handling
文件处理助手
Requires
- php: >=7.1.0
- ext-curl: *
- imagine/imagine: ^1.2
- myclabs/php-enum: ^1.4
- psr/container: ^1.0|^2.0
- symfony/http-foundation: ^3.0|^4.0|^5.0|^6.0|^7.0
Requires (Dev)
- illuminate/contracts: *
- mikey179/vfsstream: ^1.6
- mockery/mockery: 0.9.*|^1.0
- php-coveralls/php-coveralls: ^2.1
- php-ffmpeg/php-ffmpeg: ^0.9.5|^1.0.0
- phpunit/phpunit: ^7.0|^8.0|^9.0
Suggests
- league/flysystem-aws-s3-v3: Required for AWS S3 file storage
- php-ffmpeg/php-ffmpeg: Required for video conversion and thumbnail generation
- spatie/image-optimizer: Required to use the image optimizer variant strategy
This package is auto-updated.
Last update: 2024-09-16 10:04:36 UTC
README
文件处理和存储助手
处理上传、操作和(外部)存储
变更日志
用法
此包与框架无关。
以下是一般设置变体处理示例
<?php // Set up a storage implementation (for your framework of choice), and a PSR-11 container implementation. /** @var \Czim\FileHandling\Contracts\Storage\StorageInterface $storage */ /** @var \Psr\Container\ContainerInterface $container */ $sourcePath = 'storage/input-file-name.jpg'; // Source File $helper = new \Czim\FileHandling\Support\Content\MimeTypeHelper; $interpreter = new \Czim\FileHandling\Support\Content\UploadedContentInterpreter; $downloader = new \Czim\FileHandling\Support\Download\UrlDownloader($helper); $validator = new \Czim\FileHandling\Support\Download\UriValidator(); $factory = new \Czim\FileHandling\Storage\File\StorableFileFactory( $helper, $interpreter, $downloader, $validator ); $file = $factory->makeFromLocalPath($sourcePath); // Handler $strategyFactory = new \Czim\FileHandling\Variant\VariantStrategyFactory($container); $strategyFactory->setConfig([ 'aliases' => [ 'resize' => \Czim\FileHandling\Variant\Strategies\ImageResizeStrategy::class, 'autoOrient' => \Czim\FileHandling\Variant\Strategies\ImageAutoOrientStrategy::class, ], ]); $processor = new \Czim\FileHandling\Variant\VariantProcessor($factory, $strategyFactory); $handler = new \Czim\FileHandling\Handler\FileHandler($storage, $processor); $handler->process($file, new Target($file->path()), [ 'variants' => [ 'tiny' => [ 'autoOrient' => [], 'resize' => [ 'dimensions' => '30x30', ], ], 'orient' => [ 'autoOrient' => [ 'quiet' => false, ], ], ], ]);
对于Laravel,可以使用以下特定于框架的存储实现
<?php // Storage $storage = new \Czim\FileHandling\Storage\Laravel\LaravelStorage( \Storage::disk('testing'), true, url('testing') ); // If you're using a Laravel version that does not have a PSR-11 compliant container yet: $container = new \Czim\FileHandling\Support\Container\LaravelContainerDecorator(app()); app()->bind(\Imagine\Image\ImagineInterface::class, \Imagine\Gd\Imagine::class);
当然,建议使用您框架的依赖注入/ IoC解决方案来简化上述方法。
自定义容器
如果您没有可行的PSR-11容器,可以使用此包提供的非常简单的实现。
<?php $container = new \Czim\FileHandling\Support\Container\SimpleContainer; $container->registerInstance( \Czim\FileHandling\Variant\Strategies\ImageResizeStrategy::class, new \Czim\FileHandling\Variant\Strategies\ImageResizeStrategy( new \Czim\FileHandling\Support\Image\Resizer( new \Imagine\Gd\Imagine ) ) ); $container->registerInstance( \Czim\FileHandling\Variant\Strategies\ImageAutoOrientStrategy::class, new \Czim\FileHandling\Variant\Strategies\ImageAutoOrientStrategy( new \Czim\FileHandling\Support\Image\OrientationFixer(new \Imagine\Gd\Imagine) ) );
存储
可以使用可定制的存储实现来存储文件。
提供了Laravel存储的一个非常简单的适配器/装饰器。对于任何其他框架/设置,您现在必须自己编写实现 \Czim\FileHandling\Contracts\Storage\StorageInterface
。
变体
在处理文件时,可以自动创建变体并将其与原始文件一起存储。
这些可以是原始图像的缩放、裁剪或重新着色。此包已配置为允许您轻松创建自己的变体策略。
单个变体由一个或多个策略步骤定义,这使得可以组合效果和重用策略。
可以从原始文件重新创建变体。
请注意,此包旨在轻松创建和添加自定义变体策略。以下列出的策略源代码仅供参考,以帮助您开始。
图像策略
包含的图像操作策略
-
ImageAutoOrientStrategy
:重新定位旋转或翻转的图像。 -
ImageResizeStrategy
:缩放(并裁剪)图像。
(使用Stapler的选项和缩放方法。) -
ImageWatermarkStrategy
:将水印粘贴到图像上。
在任意角或中心。
选项
position
(字符串):top-left
、top-right
、center
、bottom-left
、bottom-right
。
watermark
(字符串):水印图像的完整路径。
水印应使用PNG(透明)图像以获得最佳效果。 -
ImageOptimizationStrategy
:优化图像以减小其文件大小。此策略需要安装 spatie/image-optimizer。
要使其工作,您还需要安装一些图像优化器
jpegoptim
optipng
pngquant
svgo
gifsicle
Ubuntu的安装示例
sudo apt-get install jpegoptim optipng pngquant gifsicle sudo npm install -g svgo
MacOS的安装示例,使用 Homebrew
brew install jpegoptim optipng pngquant svgo gifsicle
视频策略
包含的视频操作策略
VideoScreenshotStrategy
:提取视频帧以进行预览。
(需要ffmpeg
/ffprobe
。)
选项
seconds
(整数):捕获视频帧的时间(秒)。
percentage
(整数):捕获视频帧的百分比(由seconds
覆盖)。ffmpeg
(字符串):ffmpeg二进制文件的路径(如果不是/usr/bin/ffmpeg
)。ffprobe
(字符串):ffprobe二进制文件的路径(如果不是/usr/bin/ffprobe
)。
变种陷阱
当处理可能存在EXIF旋转的图像时,使用调整大小策略,请注意,仅调整宽高(横竖)可能遇到问题,除非它们首先自动定位。
因此,建议在 ImageResizeStrategy
之前使用 ImageAutoOrientStrategy
。
一般来说,考虑策略应用的顺序总是一个好主意。
如果效率很重要,您还可以选择将多个策略合并为一个策略类。您可以使用这种方法来防止多次打开/保存同一文件。
处理URI内容
在之前的版本中,此包会自动从具有URI的本地或远程文件的原始字符串内容中检索内容。现在默认已禁用此功能,以最小化安全风险。
有关此更改的更多信息,请参阅 SECURITY。
配置
文件处理的配置是通过向FileHandler注入一个具有树结构的关联数组来设置的。
贡献
有关详细信息,请参阅 CONTRIBUTING。
致谢
许可协议
MIT许可协议(MIT)。有关更多信息,请参阅 许可文件。