



<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8"  />
  <meta name="viewport" content="width=device-width, initial-scale=1"  />
  <title>ImageMagick - MagickCore, C API: Get the Version and Copyrights</title>
  <meta name="application-name" content="ImageMagick" />
  <meta name="description" content="Use ImageMagick® to create, edit, compose, and convert digital images. Resize an image, crop it, change its shades and colors, add captions, and more." />
  <meta name="application-url" content="https://imagemagick.org" />
  <meta name="generator" content="PHP" />
  <meta name="keywords" content="magickcore, c, api:, get, the, version, copyrights, image processing software" />
  <meta name="rating" content="GENERAL" />
  <meta name="robots" content="INDEX, FOLLOW" />
  <meta name="generator" content="ImageMagick Studio LLC" />
  <meta name="author" content="ImageMagick Studio LLC" />
  <meta name="revisit-after" content="2 DAYS" />
  <meta name="resource-type" content="document" />
  <meta name="copyright" content="Copyright (c) 1999-2020 ImageMagick Studio LLC" />
  <meta name="distribution" content="Global" />
  <meta name="magick-serial" content="P131-S030410-R485315270133-P82224-A6668-G1245-1" />
  <meta property='og:url' content='../../' />
  <meta property='og:title' content='ImageMagick' />
  <meta property='og:image' content='../../../images/logo.png' />
  <meta property='og:type' content='website' />
  <meta property='og:site_name' content='ImageMagick' />
  <meta property='og:description' content="Create, Edit, Compose, or Convert Digital Images" />
  <meta name="google-site-verification" content="_bMOCDpkx9ZAzBwb2kF3PRHbfUUdFj2uO8Jd1AXArz4" />
  <link href="version.html" rel="canonical" />
  <link href="../../../images/wand.png" rel="icon" />
  <link href="../../../images/wand.ico" rel="shortcut icon" />
  <link href="../../assets/magick.css" rel="stylesheet" />
</head>
<body>
  <nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top">
  <div class="container-fluid">
    <a class="navbar-brand" href="../../"><img class="d-block" id="icon" alt="ImageMagick" width="32" height="32" src="../../../images/wand.ico"/></a>
    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#magick-navbars" aria-controls="magick-navbars" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>

    <div class="collapse navbar-collapse" id="magick-navbars">
      <ul class="navbar-nav me-auto mb-2 mb-md-0">
        <li class="nav-item">
          <a class="nav-link " href="../../www/index.html">Home</a>
        </li>
        <li class="nav-item">
          <a class="nav-link " href="../../www/download.html">Download</a>
        </li>
        <li class="nav-item">
          <a class="nav-link " href="../../www/command-line-tools.html">Tools</a>
        </li>
        <li class="nav-item">
          <a class="nav-link " href="../../www/command-line-processing.html">CLI</a>
        </li>
        <li class="nav-item">
          <a class="nav-link " href="../../www/develop.html">Develop</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" target="_blank" href="https://github.com/ImageMagick/ImageMagick/discussions">Community</a>
        </li>
        <li class="nav-item">
          <iframe src="https://github.com/sponsors/ImageMagick/button" title="Sponsor ImageMagick" height="35" width="107" style="border: 0;"></iframe>
        </li>
      </ul>
      <form class="d-flex form-inline" action="https://imagemagick.org/script/search.php">
        <input class="form-control me-2" type="text" name="q" placeholder="Search" aria-label="Search">
        <button class="btn btn-outline-success" type="submit" name="sa">Search</button>
      </form>
    </div>
  </div>
  </nav>

  <div class="container">
    <script async="async" src="https://localhost/pagead/js/adsbygoogle.js"></script>
    <ins class="adsbygoogle"
      style="display:block"
      data-ad-client="ca-pub-3129977114552745"
      data-ad-slot="6345125851"
      data-full-width-responsive="true"
      data-ad-format="horizontal"></ins>
    <script>
      (adsbygoogle = window.adsbygoogle || []).push({});
    </script>

  </div>

  <main class="container">
  <div class="magick-template">
<div class="magick-header">
<p class="text-center"><a href="version.html#GetMagickCopyright">GetMagickCopyright</a> &#8226; <a href="version.html#GetMagickDelegates">GetMagickDelegates</a> &#8226; <a href="version.html#GetMagickFeatures">GetMagickFeatures</a> &#8226; <a href="version.html#GetMagickHomeURL">GetMagickHomeURL</a> &#8226; <a href="version.html#GetMagickLicense">GetMagickLicense</a> &#8226; <a href="version.html#GetMagickPackageName">GetMagickPackageName</a> &#8226; <a href="version.html#GetMagickQuantumDepth">GetMagickQuantumDepth</a> &#8226; <a href="version.html#GetMagickQuantumRange">GetMagickQuantumRange</a> &#8226; <a href="version.html#GetMagickReleaseDate">GetMagickReleaseDate</a> &#8226; <a href="version.html#GetMagickSignature">GetMagickSignature</a> &#8226; <a href="version.html#GetMagickVersion">GetMagickVersion</a> &#8226; <a href="version.html#ListMagickVersion">ListMagickVersion</a></p>

<h2><a href="../../api/MagickCore/version_8c.html" id="GetMagickCopyright">GetMagickCopyright</a></h2>

<p>GetMagickCopyright() returns the ImageMagick API copyright as a string.</p>

<p>The format of the GetMagickCopyright method is:</p>

<pre class="text">
const char *GetMagickCopyright(void)
</pre>

<h2><a href="../../api/MagickCore/version_8c.html" id="GetMagickDelegates">GetMagickDelegates</a></h2>

<p>GetMagickDelegates() returns the ImageMagick delegate libraries.</p>

<p>The format of the GetMagickDelegates method is:</p>

<pre class="text">
const char *GetMagickDelegates(void)
</pre>

<p>No parameters are required.</p>

<h2><a href="../../api/MagickCore/version_8c.html" id="GetMagickFeatures">GetMagickFeatures</a></h2>

<p>GetMagickFeatures() returns the ImageMagick features.</p>

<p>The format of the GetMagickFeatures method is:</p>

<pre class="text">
const char *GetMagickFeatures(void)
</pre>

<p>No parameters are required.</p>

<h2><a href="../../api/MagickCore/version_8c.html" id="GetMagickHomeURL">GetMagickHomeURL</a></h2>

<p>GetMagickHomeURL() returns the ImageMagick home URL.</p>

<p>The format of the GetMagickHomeURL method is:</p>

<pre class="text">
char *GetMagickHomeURL(void)
</pre>

<h2><a href="../../api/MagickCore/version_8c.html" id="GetMagickLicense">GetMagickLicense</a></h2>

<p>GetMagickLicense() returns the ImageMagick API license as a string.</p>

<p>The format of the GetMagickLicense method is:</p>

<pre class="text">
const char *GetMagickLicense(void)
</pre>

<h2><a href="../../api/MagickCore/version_8c.html" id="GetMagickPackageName">GetMagickPackageName</a></h2>

<p>GetMagickPackageName() returns the ImageMagick package name.</p>

<p>The format of the GetMagickName method is:</p>

<pre class="text">
const char *GetMagickName(void)
</pre>

<p>No parameters are required.</p>

<h2><a href="../../api/MagickCore/version_8c.html" id="GetMagickQuantumDepth">GetMagickQuantumDepth</a></h2>

<p>GetMagickQuantumDepth() returns the ImageMagick quantum depth.</p>

<p>The format of the GetMagickQuantumDepth method is:</p>

<pre class="text">
const char *GetMagickQuantumDepth(size_t *depth)
</pre>

<p>A description of each parameter follows:</p>

<dd>
</dd>

<dd> </dd>
<dl class="dl-horizontal">
<dt>depth</dt>
<dd>the quantum depth is returned as a number. </dd>

<dd>  </dd>
</dl>
<h2><a href="../../api/MagickCore/version_8c.html" id="GetMagickQuantumRange">GetMagickQuantumRange</a></h2>

<p>GetMagickQuantumRange() returns the ImageMagick quantum range.</p>

<p>The format of the GetMagickQuantumRange method is:</p>

<pre class="text">
const char *GetMagickQuantumRange(size_t *range)
</pre>

<p>A description of each parameter follows:</p>

<dd>
</dd>

<dd> </dd>
<dl class="dl-horizontal">
<dt>range</dt>
<dd>the quantum range is returned as a number. </dd>

<dd>  </dd>
</dl>
<h2><a href="../../api/MagickCore/version_8c.html" id="GetMagickReleaseDate">GetMagickReleaseDate</a></h2>

<p>GetMagickReleaseDate() returns the ImageMagick release date.</p>

<p>The format of the GetMagickReleaseDate method is:</p>

<pre class="text">
const char *GetMagickReleaseDate(void)
</pre>

<p>No parameters are required.</p>

<h2><a href="../../api/MagickCore/version_8c.html" id="GetMagickSignature">GetMagickSignature</a></h2>

<p>GetMagickSignature() returns a signature that uniquely encodes the MagickCore libary version, quantum depth, HDRI status, OS word size, and endianness.</p>

<p>The format of the GetMagickSignature method is:</p>

<pre class="text">
unsigned int GetMagickSignature(const StringInfo *nonce)
</pre>

<p>A description of each parameter follows:</p>

<dd>
</dd>

<dd> </dd>
<dl class="dl-horizontal">
<dt>nonce</dt>
<dd>arbitrary data. </dd>

<dd>  </dd>
</dl>
<h2><a href="../../api/MagickCore/version_8c.html" id="GetMagickVersion">GetMagickVersion</a></h2>

<p>GetMagickVersion() returns the ImageMagick API version as a string and as a number.</p>

<p>The format of the GetMagickVersion method is:</p>

<pre class="text">
const char *GetMagickVersion(size_t *version)
</pre>

<p>A description of each parameter follows:</p>

<dd>
</dd>

<dd> </dd>
<dl class="dl-horizontal">
<dt>version</dt>
<dd>the ImageMagick version is returned as a number. </dd>

<dd>  </dd>
</dl>
<h2><a href="../../api/MagickCore/version_8c.html" id="ListMagickVersion">ListMagickVersion</a></h2>

<p>ListMagickVersion() identifies the ImageMagick version by printing its attributes to the file.  Attributes include the copyright, features, and delegates.</p>

<p>The format of the ListMagickVersion method is:</p>

<pre class="text">
void ListMagickVersion(FILE *file)
</pre>

<p>A description of each parameter follows:</p>

<dd>
</dd>

<dd> </dd>
<dl class="dl-horizontal">
<dt>file</dt>
<dd>the file, typically stdout. </dd>

<dd>  </dd>
</dl>
</div>
  </div>
  </main><!-- /.container -->
  <footer class="magick-footer">
    <div class="container-fluid">
      <a href="../../www/security-policy.html">Security</a> •
      <a href="../../www/news.html">News</a>
     
      <a href="version.html#"><img class="d-inline" id="wand" alt="And Now a Touch of Magick" width="16" height="16" src="../../../images/wand.ico"/></a>
     
      <a href="../../www/links.html">Related</a> •
      <a href="../../www/sitemap.html">Sitemap</a>
   <br/>
     <a href="../../www/support.html">Sponsor</a> •
     <a href="../../www/cite.html">Cite</a> •
     <a href="http://pgp.mit.edu/pks/lookup?op=get&amp;search=0x89AB63D48277377A">Public Key</a> •
     <a href="../../www/contact.html">Contact Us</a>
   <br/>
     <a href="https://github.com/imagemagick/imagemagick" target="_blank" rel="noopener" aria-label="GitHub"><svg xmlns="http://www.w3.org/2000/svg" class="navbar-nav-svg" viewBox="0 0 512 499.36" width="2%" height="2%" role="img" focusable="false"><title>GitHub</title><path fill="currentColor" fill-rule="evenodd" d="M256 0C114.64 0 0 114.61 0 256c0 113.09 73.34 209 175.08 242.9 12.8 2.35 17.47-5.56 17.47-12.34 0-6.08-.22-22.18-.35-43.54-71.2 15.49-86.2-34.34-86.2-34.34-11.64-29.57-28.42-37.45-28.42-37.45-23.27-15.84 1.73-15.55 1.73-15.55 25.69 1.81 39.21 26.38 39.21 26.38 22.84 39.12 59.92 27.82 74.5 21.27 2.33-16.54 8.94-27.82 16.25-34.22-56.84-6.43-116.6-28.43-116.6-126.49 0-27.95 10-50.8 26.35-68.69-2.63-6.48-11.42-32.5 2.51-67.75 0 0 21.49-6.88 70.4 26.24a242.65 242.65 0 0 1 128.18 0c48.87-33.13 70.33-26.24 70.33-26.24 14 35.25 5.18 61.27 2.55 67.75 16.41 17.9 26.31 40.75 26.31 68.69 0 98.35-59.85 120-116.88 126.32 9.19 7.9 17.38 23.53 17.38 47.41 0 34.22-.31 61.83-.31 70.23 0 6.85 4.61 14.81 17.6 12.31C438.72 464.97 512 369.08 512 256.02 512 114.62 397.37 0 256 0z"/></svg></a> •
     <a href="https://twitter.com/imagemagick" target="_blank" rel="noopener" aria-label="Twitter"><svg xmlns="http://www.w3.org/2000/svg" class="navbar-nav-svg" viewBox="0 0 512 416.32" width="2%" height="2%" role="img" focusable="false"><title>Twitter</title><path fill="currentColor" d="M160.83 416.32c193.2 0 298.92-160.22 298.92-298.92 0-4.51 0-9-.2-13.52A214 214 0 0 0 512 49.38a212.93 212.93 0 0 1-60.44 16.6 105.7 105.7 0 0 0 46.3-58.19 209 209 0 0 1-66.79 25.37 105.09 105.09 0 0 0-181.73 71.91 116.12 116.12 0 0 0 2.66 24c-87.28-4.3-164.73-46.3-216.56-109.82A105.48 105.48 0 0 0 68 159.6a106.27 106.27 0 0 1-47.53-13.11v1.43a105.28 105.28 0 0 0 84.21 103.06 105.67 105.67 0 0 1-47.33 1.84 105.06 105.06 0 0 0 98.14 72.94A210.72 210.72 0 0 1 25 370.84a202.17 202.17 0 0 1-25-1.43 298.85 298.85 0 0 0 160.83 46.92"/></svg></a>
    <br/>
    <small>© 1999-2021 ImageMagick Studio LLC</small>
    </div>
  </footer>

  <!-- Javascript assets -->
  <script src="../../assets/magick.js" ></script>
  </body>
</html>
