takuya / php-imagick-cmd-wrapper
从PHP调用image magick命令行
1.0
2021-08-19 20:11 UTC
Requires
- php: >=7.2
- takuya/process: ^1.3
Requires (Dev)
- illuminate/support: ^9.0@dev
- nette/php-generator: v3.5.x-dev
- phpunit/phpunit: 9.5.x-dev
This package is auto-updated.
Last update: 2024-09-20 19:19:52 UTC
README
为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
测试结果。
测试
composer install
./vendor/bin/phpunit