This extension lets you use the libvips image processing library from PHP 7. It is intentionally very low-level: modules such as https://github.com/jcupitt/php-vips try to layer a nice API on top of this.
libvips is fast and needs little memory. The vips-php-bench
repository tests
php-vips
against imagick
and gd
: on that test, and on my laptop,
php-vips
is around four times faster than imagick
and needs 10 times less
memory.
#!/usr/bin/env php
<?php
$x = vips_image_new_from_file($argv[1])["out"];
$x = vips_call("invert", $x)["out"];
vips_image_write_to_file($x, $argv[2]);
Almost all operations return an array of result values. Usually there is a
single result called "out"
.
Use vips_call()
to call any operation in the vips library. There are around
around 300 operations available, see the vips docs for an introduction:
http://www.vips.ecs.soton.ac.uk/supported/current/doc/html/libvips/
Arguments can be long, double, image, array of long, array of double or array
of image. The final argument to vips_call()
is an array of operation options.
php-vips
layers a nice API, including full docs, on top of this extension,
see:
https://github.com/jcupitt/php-vips
On macOS, use brew install php70-vips
to install the libvips library, php and
this php extension.
On Linux, install this extension with:
$ pear install vips-0.1.3.tgz
And add:
extension=vips.so
to your php.ini
.
PHP is normally built for speed and is missing a lot of debugging support you need for extension development. For testing and dev, build your own php. I used 7.0.11 and configured with:
$ ./configure --prefix=/home/john/vips --enable-debug --enable-maintainer-zts \
--enable-cgi --enable-cli --with-readline --with-openssl --with-zlib \
--with-gd --with-jpeg-dir=/usr --with-libxml-dir=/usr
You'll need libvips 8.0 or later, including all the headers for
development. On linux, install with your package manager. On macOS,
install with brew
or MacPorts. For Windows, download a zip from the
libvips website, or build your own.
$ pear package
to make vips-0.1.3.tgz
.
To install by hand:
$ phpize
To scan config.m4
and your php install and regenerate the build system.
Run
$ ./configure
Check the output carefully for errors, and obviously check that it found your libvips.
Run:
$ make
To build the module to the modules/
directory in this repository.
Don't post php-vips test results to php.net! Stop this with:
$ export NO_INTERACTION=1
Test with:
$ make test
Finally, install to your php extensions area with:
$ make install
Add extension-vips.so
to php.ini
, perhaps in ~/vips/lib/php.ini
,
if you configured php as above.
http://php.net/manual/en/internals2.php
https://devzone.zend.com/303/extension-writing-part-i-introduction-to-php-and-zend/
https://devzone.zend.com/317/extension-writing-part-ii-parameters-arrays-and-zvals/
https://devzone.zend.com/446/extension-writing-part-iii-resources/