takuya/php-imagick-cmd-wrapper

从PHP调用image magick命令行

1.0 2021-08-19 20:11 UTC

This package is auto-updated.

Last update: 2024-09-20 19:19:52 UTC


README

<CircleciTest>

为PHP提供Image magick壳命令包装器

要求

apt install imagemagick

为什么要在PHP中使用magick shell命令?

有时,php-imagick(ext-imagick)不可用。

一些mod-php服务器不支持ext-imagck。但convert命令容易安装。

Imagick类(在ext-imagick中)没有精确的文档。

想想看,你能告诉我如何在ext-imagick中使用'png:compression-filter'吗?或许你不能。但是,网上有很多'convert'样例。我们试图使用system('convert a.jpg b.png')调用,并通过转义shell参数。这真的很烦人。

因此,我们需要convert命令包装器。

从GitHub安装

repo=git@github.com:takuya/php-imagick-cmd-wrapper.git
composer config repositories.takuya/php-imagick-cmd-wrapper vcs $repo
composer require takuya/php-imagick-cmd-wrapper

使用示例

$f_in = 'DkzpJ1lUUAA84KP.jpg';
$width = 500;
// convert
$convert = new Convert();
$ret = $convert
      ->setInputFile( $f_in )
      ->unsharp('10x5+0.7+0')
      ->sample($width)
      ->pointsize(30)
      ->fill('blue')
      ->strokewidth(1)
      ->stroke('gray80')
      ->font('DejaVu-Sans')
      ->annotate('+10+100','unsharp_sample')
      ->setOutputFile( 'jpeg:-' )
      ->execute();
$image_bin = $ret[1];
file_put_contents('out.jpg',$image_bin)    

重要通知!调用方法顺序。

在开始使用之前,您应该知道OPTIONS顺序非常重要。

convert命令对选项顺序非常简单。

我们必须注意参数顺序。

示例1(无效,不起作用。)

(new Identify())
    ->setInputFile('a.jpg')
    ->format('[%w,%h]')
->execute();

这导致 identify a.jpg -format '[%w,%h]',但是不起作用。

示例2(正常工作。)

(new Identify())
    ->setInputFile('a.jpg')
    ->format('[%w,%h]')
->execute();

这导致identify -format '[%w,%h]' a.jpg,它将正常工作。

更多使用示例

将JPEG转换为PNG。

$convert = ;
(new Convert())
      ->setInputile( 'a.jpg' )
      ->setOutputFile( 'b.png' )
      ->execute();

使用STDOUT - 转换jpeg到png

$convert = ;
$result = (new Convert())
      ->setInputile( 'a.jpg' )
      ->setOutputFile( 'png:-' )
      ->execute();
$png_binary = $result[1];

使用STDIN - 转换jpeg到png

$convert = ;
$result = (new Convert())
      ->setInputile( '-', file_get_contents('a.jpg') )
      ->setOutputFile( 'png:-' )
      ->execute();
$png_binary = $result[1];

返回值结构

命令结果是包含3个条目的数组

$result = [
  '0' => ' int / exit status code' ,
  '1' => ' string / stdout from command' ,
  '2' => ' string / stderr from command' ,
];

调整大小(采样算法)、去模糊和归一化

$ret = $convert
      ->setInputFile( $f_in )
      ->sample('50%')
      ->unsharp('10x5+0.7+0')
      ->normalize()
      ->setOutputFile( 'jpeg:-' )
      ->execute();

IDE自动完成。

选项(方法)自动从'convert -h'的Help文档生成。

因此,在某些IDE中,自动完成可能不会正常工作。

如果发生这种情况,请将路径src/generated/添加到您的项目搜索路径中。

开发注意事项。

此项目使用自动生成的PHP代码,解析converet -h

如果您想重新生成类,请在CLI中执行以下命令。

composer run generate-class convert
composer run generate-class montage
composer run generate-class identify
composer run generate-class mogrify

我使用了这些环境。wsl1 debian。

wsl --list -v
  NAME      STATE           VERSION
* Debian    Running         1
cat /etc/debian_version
10.10

来自debian(wsl)的imagemagick

convert -version
Version: ImageMagick 6.9.10-23 Q16 x86_64 20190101 https://imagemagick.org.cn
Copyright: © 1999-2019 ImageMagick Studio LLC
License: https://imagemagick.org.cn/script/license.php
Features: Cipher DPC Modules OpenMP
Delegates (built-in): bzlib djvu fftw fontconfig freetype heic jbig jng jp2 jpeg lcms lqr ltdl lzma openexr pangocairo png tiff webp wmf x xml zlib

测试结果。

<CircleciTest>

测试

composer install 
./vendor/bin/phpunit