<?xml version="1.0"?> <!-- vim: set ts=2 sw=2 expandtab: --> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ ]> <refentry id="using-cli"> <refmeta> <refentrytitle>VIPS from the command-line</refentrytitle> <manvolnum>1</manvolnum> <refmiscinfo>VIPS Library</refmiscinfo> </refmeta> <refnamediv> <refname>Using VIPS</refname> <refpurpose>How to use the VIPS library from the command-line</refpurpose> </refnamediv> <refsect3 id="using-command-line-intro"> <title>Introduction</title> <para> Use the <command>vips</command> command to execute VIPS operations from the command-line. For example: <programlisting> $ vips rot k2.jpg x.jpg d90 </programlisting> Will rotate the image <literal>k2.jpg</literal> by 90 degrees anticlockwise and write the result to the file <literal>x.jpg</literal>. If you don't give any arguments to an operation, <command>vips</command> will give a short description, for example: <programlisting> $ vips rot rotate an image usage: rot in out angle where: in - Input image, input VipsImage out - Output image, output VipsImage angle - Angle to rotate image, input VipsAngle default: d90 allowed: d0, d90, d180, d270 </programlisting> There's a straightforward relationship with the C API: compare this to the API docs for vips_rot(). </para> </refsect3> <refsect3 id="using-command-line-list"> <title>Listing all operations</title> <para> You can list all classes with: <programlisting> $ vips -l ... VipsOperation (operation), operations VipsSystem (system), run an external command VipsArithmetic (arithmetic), arithmetic operations VipsBinary (binary), binary operations VipsAdd (add), add two images ... etc. </programlisting> Each line shows the canonical name of the class (for example <literal>VipsAdd</literal>), the class nickname (<literal>add</literal> in this case), and a short description. Some subclasses of operation will show more: for example, subclasses of <literal>VipsForeign</literal> will show some of the extra flags supported by the file load/save operations. </para> <para> The API docs have a <link linkend="function-list">handy table of all vips operations</link>, if you want to find out how to do something, try searching that. </para> </refsect3> <refsect3 id="using-command-line-options"> <title>Optional arguments</title> <para> Many operations take optional arguments. You can supply these as command-line options. For example: <programlisting> $ vips gamma gamma an image usage: gamma in out where: in - Input image, input VipsImage out - Output image, output VipsImage optional arguments: exponent - Gamma factor, input gdouble default: 2.4 min: 1e-06, max: 1000 operation flags: sequential-unbuffered </programlisting> vips_gamma() applies a gamma factor to an image. By default, it uses 2.4, the sRGB gamma factor, but you can specify any gamma with the <literal>exponent</literal> option. </para> <para> Use it from the command-line like this: <programlisting> $ vips gamma k2.jpg x.jpg --exponent 0.42 </programlisting> This will read file <literal>k2.jpg</literal>, un-gamma it, and write the result to file <literal>x.jpg</literal>. </para> </refsect3> <refsect3 id="using-command-line-array"> <title>Array arguments</title> <para> Some operations take arrays of values as arguments. For example, vips_affine() needs an array of four numbers for the 2x2 transform matrix. You pass arrays as space-separated lists: <programlisting> $ vips affine k2.jpg x.jpg "2 0 0 1" </programlisting> You may need the quotes to stop your shell breaking the argument at the spaces. vips_bandjoin() needs an array of input images to join, run it like this: <programlisting> $ vips bandjoin "k2.jpg k4.jpg" x.tif </programlisting> </para> </refsect3> <refsect3 id="using-command-line-conversion"> <title>Implicit file format conversion</title> <para> <command>vips</command> will automatically convert between image file formats for you. Input images are detected by sniffing their first few bytes; output formats are set from the filename suffix. You can see a list of all the supported file formats with something like: <programlisting> $ vips -l foreign </programlisting> Then get a list of the options a format supports with: <programlisting> $ vips jpegsave </programlisting> </para> <para> You can pass options to the implicit load and save operations enclosed in square brackets after the filename: <programlisting> vips affine k2.jpg x.jpg[Q=90,strip] "2 0 0 1" </programlisting> Will write <literal>x.jpg</literal> at quality level 90 and will strip all metadata from the image. </para> </refsect3> <refsect3 id="using-command-line-chaining"> <title>Chaining operations</title> <para> Because each operation runs in a separate process, you can't use libvips's chaining system to join operations together, you have to use intermediate files. The command-line interface is therefore quite a bit slower than Python or C. </para> <para> The best alternative is to use vips files for intermediates. Something like: <programlisting> vips invert input.jpg t1.v vips affine t1.v output.jpg "2 0 0 1" rm t1.v </programlisting> </para> </refsect3> <refsect3 id="using-command-line-other"> <title>Other features</title> <para> Finally, <command>vips</command> has a couple of useful extra options. <itemizedlist> <listitem> <para> Use <option>--vips-progress</option> to get <command>vips</command> to display a simple progress indicator. </para> </listitem> <listitem> <para> Use <option>--vips-leak</option> and <command>vips</command> will leak-test on exit, and also display an estimate of peak memory use. </para> </listitem> <listitem> <para> Set <code>G_MESSAGES_DEBUG=VIPS</code> and GLib will display informational and debug messages from libvips. </para> </listitem> </itemizedlist> </para> <para> VIPS comes with a couple of other useful programs. <command>vipsheader</command> is a command which can print image header fields. <command>vipsedit</command> can change fields in vips format images. <command>vipsthumbnail</command> can make image thumbnails quickly. </para> </refsect3> </refentry>