blob: 3963d097cef18b339fbe91567475de72d8c09182 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>header</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
<link rel="home" href="index.html" title="VIPS Reference Manual">
<link rel="up" href="ch01.html" title="Core VIPS API">
<link rel="prev" href="libvips-image.html" title="image">
<link rel="next" href="libvips-check.html" title="check">
<meta name="generator" content="GTK-Doc V1.14 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
<tr valign="middle">
<td><a accesskey="p" href="libvips-image.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
<th width="100%" align="center">VIPS Reference Manual</th>
<td><a accesskey="n" href="libvips-check.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
</tr>
<tr><td colspan="5" class="shortcuts">
<a href="#libvips-header.synopsis" class="shortcut">Top</a>
 | 
<a href="#libvips-header.description" class="shortcut">Description</a>
</td></tr>
</table>
<div class="refentry" title="header">
<a name="libvips-header"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="libvips-header.top_of_page"></a>header</span></h2>
<p>header — get, set and walk image headers</p>
</td>
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1" title="Stability Level">
<a name="libvips-header.stability-level"></a><h2>Stability Level</h2>
Stable, unless otherwise indicated
</div>
<div class="refsynopsisdiv" title="Synopsis">
<a name="libvips-header.synopsis"></a><h2>Synopsis</h2>
<pre class="synopsis">
#include &lt;vips/vips.h&gt;
<span class="returnvalue">int</span> <a class="link" href="libvips-header.html#im-header-int" title="im_header_int ()">im_header_int</a> (<em class="parameter"><code><span class="type">IMAGE</span> *im</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *field</code></em>,
<em class="parameter"><code><span class="type">int</span> *out</code></em>);
<span class="returnvalue">int</span> <a class="link" href="libvips-header.html#im-header-double" title="im_header_double ()">im_header_double</a> (<em class="parameter"><code><span class="type">IMAGE</span> *im</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *field</code></em>,
<em class="parameter"><code><span class="type">double</span> *out</code></em>);
<span class="returnvalue">int</span> <a class="link" href="libvips-header.html#im-header-string" title="im_header_string ()">im_header_string</a> (<em class="parameter"><code><span class="type">IMAGE</span> *im</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *field</code></em>,
<em class="parameter"><code><span class="type">char</span> **out</code></em>);
<span class="returnvalue">int</span> <a class="link" href="libvips-header.html#im-header-as-string" title="im_header_as_string ()">im_header_as_string</a> (<em class="parameter"><code><span class="type">IMAGE</span> *im</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *field</code></em>,
<em class="parameter"><code><span class="type">char</span> **out</code></em>);
<span class="returnvalue">GType</span> <a class="link" href="libvips-header.html#im-header-get-typeof" title="im_header_get_typeof ()">im_header_get_typeof</a> (<em class="parameter"><code><span class="type">IMAGE</span> *im</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *field</code></em>);
<span class="returnvalue">int</span> <a class="link" href="libvips-header.html#im-header-get" title="im_header_get ()">im_header_get</a> (<em class="parameter"><code><span class="type">IMAGE</span> *im</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *field</code></em>,
<em class="parameter"><code><span class="type">GValue</span> *value_copy</code></em>);
<span class="returnvalue">void</span> * (<a class="link" href="libvips-header.html#im-header-map-fn" title="im_header_map_fn ()">*im_header_map_fn</a>) (<em class="parameter"><code><span class="type">IMAGE</span> *Param1</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *Param2</code></em>,
<em class="parameter"><code><span class="type">GValue</span> *Param3</code></em>,
<em class="parameter"><code><span class="type">void</span> *Param4</code></em>);
<span class="returnvalue">void</span> * <a class="link" href="libvips-header.html#im-header-map" title="im_header_map ()">im_header_map</a> (<em class="parameter"><code><span class="type">IMAGE</span> *im</code></em>,
<em class="parameter"><code><a class="link" href="libvips-header.html#im-header-map-fn" title="im_header_map_fn ()"><span class="type">im_header_map_fn</span></a> fn</code></em>,
<em class="parameter"><code><span class="type">void</span> *a</code></em>);
<span class="returnvalue">int</span> <a class="link" href="libvips-header.html#im-histlin" title="im_histlin ()">im_histlin</a> (<em class="parameter"><code><span class="type">IMAGE</span> *image</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *fmt</code></em>,
<em class="parameter"><code>...</code></em>);
<span class="returnvalue">int</span> <a class="link" href="libvips-header.html#im-updatehist" title="im_updatehist ()">im_updatehist</a> (<em class="parameter"><code><span class="type">IMAGE</span> *out</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
<em class="parameter"><code><span class="type">int</span> argc</code></em>,
<em class="parameter"><code><span class="type">char</span> *argv[]</code></em>);
const <span class="returnvalue">char</span> * <a class="link" href="libvips-header.html#im-history-get" title="im_history_get ()">im_history_get</a> (<em class="parameter"><code><span class="type">IMAGE</span> *im</code></em>);
</pre>
</div>
<div class="refsect1" title="Description">
<a name="libvips-header.description"></a><h2>Description</h2>
<p>
These functions let you get at image header data (including metadata) in a
uniform way. They are handy for language bindings but less useful for C
users.
</p>
<p>
They first search the
VIPS header
fields (see <a class="link" href="libvips-image.html" title="image">image</a>), then search for
a metadata field of that name (see
<a class="link" href="libvips-meta.html" title="meta">meta</a>).
Use <a class="link" href="libvips-header.html#im-header-get-typeof" title="im_header_get_typeof ()"><code class="function">im_header_get_typeof()</code></a> to test for the
existance and <span class="type">GType</span>
of a header field.
</p>
<p>
See <a class="link" href="libvips-meta.html" title="meta">meta</a>
for a set of functions for adding new metadata to an image.
</p>
</div>
<div class="refsect1" title="Details">
<a name="libvips-header.details"></a><h2>Details</h2>
<div class="refsect2" title="im_header_int ()">
<a name="im-header-int"></a><h3>im_header_int ()</h3>
<pre class="programlisting"><span class="returnvalue">int</span> im_header_int (<em class="parameter"><code><span class="type">IMAGE</span> *im</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *field</code></em>,
<em class="parameter"><code><span class="type">int</span> *out</code></em>);</pre>
<p>
Gets <em class="parameter"><code>out</code></em> from <em class="parameter"><code>im</code></em> under the name <em class="parameter"><code>field</code></em>. This function searches for
int-valued fields.
</p>
<p>
See also: <a class="link" href="libvips-header.html#im-header-get" title="im_header_get ()"><code class="function">im_header_get()</code></a>, <a class="link" href="libvips-header.html#im-header-get-typeof" title="im_header_get_typeof ()"><code class="function">im_header_get_typeof()</code></a>
</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><p><span class="term"><em class="parameter"><code>im</code></em> :</span></p></td>
<td>image to get the header field from
</td>
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>field</code></em> :</span></p></td>
<td>field name
</td>
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>out</code></em> :</span></p></td>
<td>return field value
</td>
</tr>
<tr>
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
<td> 0 on success, -1 otherwise.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" title="im_header_double ()">
<a name="im-header-double"></a><h3>im_header_double ()</h3>
<pre class="programlisting"><span class="returnvalue">int</span> im_header_double (<em class="parameter"><code><span class="type">IMAGE</span> *im</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *field</code></em>,
<em class="parameter"><code><span class="type">double</span> *out</code></em>);</pre>
<p>
Gets <em class="parameter"><code>out</code></em> from <em class="parameter"><code>im</code></em> under the name <em class="parameter"><code>field</code></em>.
This function searches for
double-valued fields.
</p>
<p>
See also: <a class="link" href="libvips-header.html#im-header-get" title="im_header_get ()"><code class="function">im_header_get()</code></a>, <a class="link" href="libvips-header.html#im-header-get-typeof" title="im_header_get_typeof ()"><code class="function">im_header_get_typeof()</code></a>
</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><p><span class="term"><em class="parameter"><code>im</code></em> :</span></p></td>
<td>image to get the header field from
</td>
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>field</code></em> :</span></p></td>
<td>field name
</td>
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>out</code></em> :</span></p></td>
<td>return field value
</td>
</tr>
<tr>
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
<td> 0 on success, -1 otherwise.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" title="im_header_string ()">
<a name="im-header-string"></a><h3>im_header_string ()</h3>
<pre class="programlisting"><span class="returnvalue">int</span> im_header_string (<em class="parameter"><code><span class="type">IMAGE</span> *im</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *field</code></em>,
<em class="parameter"><code><span class="type">char</span> **out</code></em>);</pre>
<p>
Gets <em class="parameter"><code>out</code></em> from <em class="parameter"><code>im</code></em> under the name <em class="parameter"><code>field</code></em>.
This function searches for
string-valued fields.
</p>
<p>
See also: <a class="link" href="libvips-header.html#im-header-get" title="im_header_get ()"><code class="function">im_header_get()</code></a>, <a class="link" href="libvips-header.html#im-header-get-typeof" title="im_header_get_typeof ()"><code class="function">im_header_get_typeof()</code></a>
</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><p><span class="term"><em class="parameter"><code>im</code></em> :</span></p></td>
<td>image to get the header field from
</td>
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>field</code></em> :</span></p></td>
<td>field name
</td>
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>out</code></em> :</span></p></td>
<td>return field value
</td>
</tr>
<tr>
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
<td> 0 on success, -1 otherwise.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" title="im_header_as_string ()">
<a name="im-header-as-string"></a><h3>im_header_as_string ()</h3>
<pre class="programlisting"><span class="returnvalue">int</span> im_header_as_string (<em class="parameter"><code><span class="type">IMAGE</span> *im</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *field</code></em>,
<em class="parameter"><code><span class="type">char</span> **out</code></em>);</pre>
<p>
Gets <em class="parameter"><code>out</code></em> from <em class="parameter"><code>im</code></em> under the name <em class="parameter"><code>field</code></em>.
This function will read any field, returning it as a printable string.
You need to free the string with <code class="function">g_free()</code> when you are done with it.
</p>
<p>
See also: <a class="link" href="libvips-header.html#im-header-get" title="im_header_get ()"><code class="function">im_header_get()</code></a>, <a class="link" href="libvips-header.html#im-header-get-typeof" title="im_header_get_typeof ()"><code class="function">im_header_get_typeof()</code></a>.
</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><p><span class="term"><em class="parameter"><code>im</code></em> :</span></p></td>
<td>image to get the header field from
</td>
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>field</code></em> :</span></p></td>
<td>field name
</td>
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>out</code></em> :</span></p></td>
<td>return field value as string
</td>
</tr>
<tr>
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
<td> 0 on success, -1 otherwise.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" title="im_header_get_typeof ()">
<a name="im-header-get-typeof"></a><h3>im_header_get_typeof ()</h3>
<pre class="programlisting"><span class="returnvalue">GType</span> im_header_get_typeof (<em class="parameter"><code><span class="type">IMAGE</span> *im</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *field</code></em>);</pre>
<p>
Read the GType for a header field. Returns zero if there is no
field of that name.
</p>
<p>
See also: <a class="link" href="libvips-header.html#im-header-get" title="im_header_get ()"><code class="function">im_header_get()</code></a>.
</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><p><span class="term"><em class="parameter"><code>im</code></em> :</span></p></td>
<td>image to test
</td>
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>field</code></em> :</span></p></td>
<td>the name to search for
</td>
</tr>
<tr>
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
<td> the GType of the field, or zero if there is no
field of that name.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" title="im_header_get ()">
<a name="im-header-get"></a><h3>im_header_get ()</h3>
<pre class="programlisting"><span class="returnvalue">int</span> im_header_get (<em class="parameter"><code><span class="type">IMAGE</span> *im</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *field</code></em>,
<em class="parameter"><code><span class="type">GValue</span> *value_copy</code></em>);</pre>
<p>
Fill <em class="parameter"><code>value_copy</code></em> with a copy of the header field. <em class="parameter"><code>value_copy</code></em> must be zeroed
but uninitialised.
</p>
<p>
This will return -1 and add a message to the error buffer if the field
does not exist. Use <a class="link" href="libvips-header.html#im-header-get-typeof" title="im_header_get_typeof ()"><code class="function">im_header_get_typeof()</code></a> to test for the
existence
of a field first if you are not certain it will be there.
</p>
<p>
For example, to read a double from an image (though of course you would use
<a class="link" href="libvips-header.html#im-header-double" title="im_header_double ()"><code class="function">im_header_double()</code></a> in practice):
</p>
<p>
</p>
<div class="informalexample"><pre class="programlisting">
GValue value = { 0 };
double d;
if( im_header_get( im, field, &amp;value ) )
return( -1 );
if( G_VALUE_TYPE( &amp;value ) != G_TYPE_DOUBLE ) {
im_error( "mydomain", _( "field \"%s\" is of type %s, not double" ),
field, g_type_name( G_VALUE_TYPE( &amp;value ) ) );
g_value_unset( &amp;value );
return( -1 );
}
d = g_value_get_double( &amp;value );
g_value_unset( &amp;value );
return( 0 );
</pre></div>
<p>
</p>
<p>
See also: <a class="link" href="libvips-header.html#im-header-get-typeof" title="im_header_get_typeof ()"><code class="function">im_header_get_typeof()</code></a>, <a class="link" href="libvips-header.html#im-header-double" title="im_header_double ()"><code class="function">im_header_double()</code></a>.
</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><p><span class="term"><em class="parameter"><code>im</code></em> :</span></p></td>
<td>image to get the field from from
</td>
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>field</code></em> :</span></p></td>
<td>the name to give the metadata
</td>
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>value_copy</code></em> :</span></p></td>
<td>the GValue is copied into this
</td>
</tr>
<tr>
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
<td> 0 on success, -1 otherwise.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" title="im_header_map_fn ()">
<a name="im-header-map-fn"></a><h3>im_header_map_fn ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span> * (*im_header_map_fn) (<em class="parameter"><code><span class="type">IMAGE</span> *Param1</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *Param2</code></em>,
<em class="parameter"><code><span class="type">GValue</span> *Param3</code></em>,
<em class="parameter"><code><span class="type">void</span> *Param4</code></em>);</pre>
</div>
<hr>
<div class="refsect2" title="im_header_map ()">
<a name="im-header-map"></a><h3>im_header_map ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span> * im_header_map (<em class="parameter"><code><span class="type">IMAGE</span> *im</code></em>,
<em class="parameter"><code><a class="link" href="libvips-header.html#im-header-map-fn" title="im_header_map_fn ()"><span class="type">im_header_map_fn</span></a> fn</code></em>,
<em class="parameter"><code><span class="type">void</span> *a</code></em>);</pre>
<p>
This function calls <em class="parameter"><code>fn</code></em> for every header field, including every item of
metadata.
</p>
<p>
Like all _map functions, the user function should return <code class="literal">NULL</code> to continue
iteration, or a non-<code class="literal">NULL</code> pointer to indicate early termination.
</p>
<p>
See also: <a class="link" href="libvips-header.html#im-header-get-typeof" title="im_header_get_typeof ()"><code class="function">im_header_get_typeof()</code></a>, <a class="link" href="libvips-header.html#im-header-get" title="im_header_get ()"><code class="function">im_header_get()</code></a>.
</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><p><span class="term"><em class="parameter"><code>im</code></em> :</span></p></td>
<td>image to map over
</td>
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>fn</code></em> :</span></p></td>
<td>function to call for each header field
</td>
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>a</code></em> :</span></p></td>
<td>user data for function
</td>
</tr>
<tr>
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
<td> <code class="literal">NULL</code> on success, the failing pointer otherwise.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" title="im_histlin ()">
<a name="im-histlin"></a><h3>im_histlin ()</h3>
<pre class="programlisting"><span class="returnvalue">int</span> im_histlin (<em class="parameter"><code><span class="type">IMAGE</span> *image</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *fmt</code></em>,
<em class="parameter"><code>...</code></em>);</pre>
<p>
Add a line to the image history. The <em class="parameter"><code>fmt</code></em> and arguments are expanded, the
date and time is appended prefixed with a hash character, and the whole
string is appended to the image history and terminated with a newline.
</p>
<p>
For example:
</p>
<p>
</p>
<div class="informalexample"><pre class="programlisting">
im_histlin( im, "vips im_invert %s %s", in-&gt;filename, out-&gt;filename );
</pre></div>
<p>
</p>
<p>
Might add the string
</p>
<p>
</p>
<div class="informalexample"><pre class="programlisting">
"vips im_invert /home/john/fred.v /home/john/jim.v # Fri Apr 3 23:30:35
2009\n"
</pre></div>
<p>
</p>
<p>
VIPS operations don't add history lines for you because a single action at
the application level might involve many VIPS operations. History must be
recorded by the application.
</p>
<p>
See also: <a class="link" href="libvips-header.html#im-updatehist" title="im_updatehist ()"><code class="function">im_updatehist()</code></a>.
</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><p><span class="term"><em class="parameter"><code>im</code></em> :</span></p></td>
<td>add history liine to this image
</td>
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>fmt</code></em> :</span></p></td>
<td>printf() format string
</td>
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>...</code></em> :</span></p></td>
<td>arguments to format string
</td>
</tr>
<tr>
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
<td> 0 on success, -1 on error.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" title="im_updatehist ()">
<a name="im-updatehist"></a><h3>im_updatehist ()</h3>
<pre class="programlisting"><span class="returnvalue">int</span> im_updatehist (<em class="parameter"><code><span class="type">IMAGE</span> *out</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
<em class="parameter"><code><span class="type">int</span> argc</code></em>,
<em class="parameter"><code><span class="type">char</span> *argv[]</code></em>);</pre>
<p>
Formats the name/argv as a single string and calls <a class="link" href="libvips-header.html#im-histlin" title="im_histlin ()"><code class="function">im_histlin()</code></a>. A
convenience function for command-line prorams.
</p>
<p>
See also: <a class="link" href="libvips-header.html#im-history-get" title="im_history_get ()"><code class="function">im_history_get()</code></a>.
</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><p><span class="term"><em class="parameter"><code>out</code></em> :</span></p></td>
<td>image to attach history line to
</td>
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
<td>program name
</td>
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>argc</code></em> :</span></p></td>
<td>number of program arguments
</td>
</tr>
<tr>
<td><p><span class="term"><em class="parameter"><code>argv</code></em> :</span></p></td>
<td>program arguments
</td>
</tr>
<tr>
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
<td> 0 on success, -1 on error.
</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2" title="im_history_get ()">
<a name="im-history-get"></a><h3>im_history_get ()</h3>
<pre class="programlisting">const <span class="returnvalue">char</span> * im_history_get (<em class="parameter"><code><span class="type">IMAGE</span> *im</code></em>);</pre>
<p>
This function reads the image history as a C string. The string is owned
by VIPS and must not be freed.
</p>
<p>
VIPS tracks the history of each image, that is, the sequence of operations
that generated that image. Applications built on VIPS need to call
<a class="link" href="libvips-header.html#im-histlin" title="im_histlin ()"><code class="function">im_histlin()</code></a> for each action they perform setting the command-line
equivalent for the action.
</p>
<p>
See also: <a class="link" href="libvips-header.html#im-histlin" title="im_histlin ()"><code class="function">im_histlin()</code></a>.
</p>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
<tr>
<td><p><span class="term"><em class="parameter"><code>im</code></em> :</span></p></td>
<td>get history from here
</td>
</tr>
<tr>
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
<td> The history of <em class="parameter"><code>im</code></em> as a C string. Do not free!
</td>
</tr>
</tbody>
</table></div>
</div>
</div>
<div class="refsect1" title="See Also">
<a name="libvips-header.see-also"></a><h2>See Also</h2>
<a class="link" href="libvips-meta.html" title="meta">meta</a>,
<a class="link" href="libvips-check.html" title="check">check</a>
</div>
</div>
<div class="footer">
<hr>
Generated by GTK-Doc V1.14</div>
</body>
</html>