You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
2.9 KiB
C++

<div class="fragment"><pre><span class="comment">// ***************************************************************** -*- C++ -*-</span>
<span class="comment">// iptcprint.cpp, $Rev: 2286 $</span>
<span class="comment">// Sample program to print the IPTC metadata of an image</span>
<span class="preprocessor">#include &lt;exiv2/exiv2.hpp&gt;</span>
<span class="preprocessor">#include &lt;iostream&gt;</span>
<span class="preprocessor">#include &lt;iomanip&gt;</span>
<span class="preprocessor">#include &lt;cassert&gt;</span>
<span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>* <span class="keyword">const</span> argv[])
<span class="keyword">try</span> {
<span class="keywordflow">if</span> (argc != 2) {
std::cout &lt;&lt; <span class="stringliteral">"Usage: "</span> &lt;&lt; argv[0] &lt;&lt; <span class="stringliteral">" file\n"</span>;
<span class="keywordflow">return</span> 1;
}
Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(argv[1]);
assert (image.get() != 0);
image-&gt;readMetadata();
Exiv2::IptcData &amp;iptcData = image-&gt;iptcData();
<span class="keywordflow">if</span> (iptcData.empty()) {
std::string error(argv[1]);
error += <span class="stringliteral">": No IPTC data found in the file"</span>;
<span class="keywordflow">throw</span> Exiv2::Error(1, error);
}
Exiv2::IptcData::iterator end = iptcData.end();
<span class="keywordflow">for</span> (Exiv2::IptcData::iterator md = iptcData.begin(); md != end; ++md) {
std::cout &lt;&lt; std::setw(44) &lt;&lt; std::setfill(<span class="charliteral">' '</span>) &lt;&lt; std::left
&lt;&lt; md-&gt;key() &lt;&lt; <span class="stringliteral">" "</span>
&lt;&lt; <span class="stringliteral">"0x"</span> &lt;&lt; std::setw(4) &lt;&lt; std::setfill(<span class="charliteral">'0'</span>) &lt;&lt; std::right
&lt;&lt; std::hex &lt;&lt; md-&gt;tag() &lt;&lt; <span class="stringliteral">" "</span>
&lt;&lt; std::setw(9) &lt;&lt; std::setfill(<span class="charliteral">' '</span>) &lt;&lt; std::left
&lt;&lt; md-&gt;typeName() &lt;&lt; <span class="stringliteral">" "</span>
&lt;&lt; std::dec &lt;&lt; std::setw(3)
&lt;&lt; std::setfill(<span class="charliteral">' '</span>) &lt;&lt; std::right
&lt;&lt; md-&gt;count() &lt;&lt; <span class="stringliteral">" "</span>
&lt;&lt; std::dec &lt;&lt; md-&gt;value()
&lt;&lt; std::endl;
}
<span class="keywordflow">return</span> 0;
}
<span class="keywordflow">catch</span> (Exiv2::AnyError&amp; e) {
std::cout &lt;&lt; <span class="stringliteral">"Caught Exiv2 exception '"</span> &lt;&lt; e &lt;&lt; <span class="stringliteral">"'\n"</span>;
<span class="keywordflow">return</span> -1;
}
</pre></div>