codebuds / webp-converter
一个使用php GD将Jpeg、Png、Gif和Bmp转换为WebP的服务
Requires
- php: ^8.3
- ext-gd: *
- symfony/http-foundation: ^7.0
Requires (Dev)
- rector/rector: ^1.0
- roave/security-advisories: dev-latest
- symfony/mime: ^7.0
- symfony/phpunit-bridge: ^7.0
README
Webp转换器
我已经找到了一个非常好的webP转换包rosell-dk/webp-convert,它在许多情况下似乎都能正常工作。
然而,现在我的大多数项目将运行在PHP7.4和Symfony5上,所以我为这些情况创建了一个非常小的转换器。
使用方法
您可以使用composer来获取此包
composer require codebuds/webp-converter
例如,在Symfony控制器内部,您可以像以下那样使用它
use CodeBuds\WebPConverter\WebPConverter; class PageController extends AbstractController { /** * @Route("/", name="home") * @return Response */ public function index() { $path = "/var/www/symfony/public/images/test.png"; try { $webp = WebPConverter::createWebpImage($path, ['saveFile' => true, 'quality' => 10]); } catch(Exception $e) { // Do something with the exception } return $this->render('page/home.html.twig'); }
WebPConverter::createWebpImage
静态函数需要图像的资源。
这可以是图像的路径,在这种情况下,函数本身将尝试从路径中创建Symfony\Component\HttpFoundation\File\File
。
如果您愿意,也可以直接传递File元素
public function index() { // ... $file = new File("/var/www/symfony/public/images/test.png"); $webp = WebPConverter::createWebpImage($file); // ... }
异常
可以抛出多个异常。首先使用Symfony File对guessExtension()
函数进行操作。这允许我们检查提供的文件类型,并确保文件是否以.JPG、.jpeg、.jpg、...结尾,或者以其他方式结尾,但最终会是一个jpeg文件,这就是将要使用的文件。如果文件不是允许的类型(jpeg、png、gif和bmp)之一,将抛出异常。
如果提供的图像已经是webP图像,异常将发送此信息。
如果saveFile或force选项不是布尔值,或者quality选项不是介于1和100之间的整数,信息将包含在异常中。
filename、filenameSuffix和savePath选项需要是字符串。
如果saveFile设置为true且force默认值为false,且webP图像已存在,将抛出异常以通知用户如果要覆盖现有文件,则需要将force设置为true。
最后,如果文件是允许的类型之一,但在GD转换过程中出现错误,则将转发该异常。
返回值
如果没有异常,则返回将包含webP图像资源和如果要在原始目录中保存图像,则该图像的路径。
选项
您也可以设置选项,但这不是必需的。
saveFile
选项默认为false。如前所述,这将仅返回资源,以及webP图像的可能路径。这意味着您需要运行gd函数来保存图像。
但是,如果您将此函数设置为true,图像将自动通过触发gd imagewebp
函数来保存。
$saveFile = $options['saveFile'] ??= false; if($saveFile) { imagewebp($imageRessource, $webPPath, $quality); }
如果您想直接保存文件,还有更多选项可以自定义webP文件及其位置
$path = '/var/www/symfony/public/images/a_file.jpg'; WebPConverter::createWebpImage( $path, [ 'saveFile' => true, 'force' => true, 'filename' => 'a_new_file', 'filenameSuffix' => '_q50', 'quality' => 50, 'savePath' => '/var/www/symfony/public/webp' ] );
此示例将创建WebP图像/var/www/symfony/public/webp/a_new_file_q50.webp
默认值
saveFile
=> falseforce
=> falsequality
=> 80filename
=> 将要转换的文件名相同。savePath
=> 将要转换的文件的路径相同。filenameSuffix
=> 空字符串
由于这是可能的,第二个选项是 quality
,默认值为 80。只有当 saveFile
选项设置为 true 时(因为否则不会创建和保存图片),这个选项才有用。