ch03s02.html 42.6 KB
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Necessary system requirements for the library</title><link rel="stylesheet" type="text/css" href="manual.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.0"><link rel="home" href="index.html" title="JpGraph Manual"><link rel="up" href="ch03.html" title="Chapter 3. The Long Version: Installing the Library"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Necessary system requirements for the library</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center">Chapter 3. The Long Version: Installing the Library</th><td width="20%" align="right"> </td></tr></table><hr></div><div class="sect1" title="Necessary system requirements for the library"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="sec.sys-req"></a>Necessary system requirements for the library</h2></div></div></div>
            
            <p>In order to run the JpGraph library there are some prerequisites that must be
                fulfilled. The PHP installation must have the low level graphic primitive library
                "GD" enabled and if TTF fonts shall work in the graphs the FreeType 2.x library must
                be enabled and installed in the PHP setup. Most modern PHP systems (since at least
                2006) usually have these extensions enabled and installed by default which means it
                is usually rather simple to get the library working. </p>
            <p>However, there are many systems out there and some older non-standard systems will
                require some manual intervention to work correctly.</p>
            <div class="caution" title="Caution" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Caution</h3>
                <p>One more time; The library is not guaranteed to run on a 64Bit OS. We will
                    point out this several more time during this manual.</p>
            </div>
            <div class="sect2" title="Verifying the PHP/GD installation"><div class="titlepage"><div><div><h3 class="title"><a name="sec.verifying-phpgd-inst"></a>Verifying the PHP/GD installation</h3></div></div></div>
                
                <p>The first and most important step is to make sure that your PHP installations
                    has the GD library enabled. The easiest way to find out if this has been enabled
                    or not is to create a one line PHP program that has only one instruction,
                        <code class="code">phpinfo()</code></p>
                <p>
                    </p><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags">&lt;?php</span><span class="hl-code"> </span><span class="hl-identifier">phpinfo</span><span class="hl-brackets">(</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-inlinetags">?&gt;</span></pre></td></tr></table></div><p>
                </p>
                <p>Store this basic program as <code class="filename">phpinfo.php</code> in the document
                    root. Then point the browser to</p>
                <p>
                    <code class="filename">http://localhost/phpinfo.php</code>
                </p>
                <p>If the steps above was followed the browser should now show a lot of
                    information about the PHP installation. In order to find out if the GD have been
                    installed and enabled look for the GD section in the output. The figure below
                    shows a typical output of this section</p>
                <div class="figure"><a name="fig.phpinfo-gd"></a><p class="title"><b>Figure 3.2. phphinfo() GD-Information</b></p><div class="figure-contents">
                        
                        <div class="mediaobject"><img src="images/phpinfo-gd.png" alt="phphinfo() GD-Information"></div>
                    </div></div><p><br class="figure-break">There are three important points to notice here. </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
                            <p>The GD Version. It should be 2.0.x. The GD version has been
                                shipped with PHP for the last four years so this should not really
                                be a problem. If for some odd reason the system only have GD 1.x
                                installed then JpGraph 2.x, and 3.x cannot be used but it is still
                                possible to use JpGraph 1.x.</p>
                            <p>In addition the "bundled" version of GD should be used. This
                                version is maintained together with PHP and is usually much more up
                                to date then the stand alone GD version.</p>
                        </li><li class="listitem">
                            <p>FreeType version. This is required in order to use TTF fonts. This
                                should be at least version 2.3.x Previous versions of the FreeType
                                library have had known issues which has caused issues when used
                                together with JpGraph.</p>
                        </li><li class="listitem">
                            <p>The final point worth checking is what type of image encoding the
                                installation supports. The most common formats are PNG and JPEG. By
                                default the library uses the PNG encoding format so it is important
                                to check that the line that says "PNG Support" has "enabled" as
                                value. As a rule of thumb PNG usually gives the smallest sizes of
                                graph (best compression) so this is the recommended format. The only
                                exception to this rule might be if a photo is used as background in
                                the graph. Then it is possible that JPEG encoding gives a better
                                compression since this is a destructive format (while PNG is a
                                lossless format).</p>
                            <p>For legacy reason it is also possible to use GIF encoding if the
                                server supports this but if PNG is installed there are no good
                                technical reasons to use GIF compression format. (The only possible
                                usage of GIF is the ability to create an animated image by
                                concatenating a number of GIF images which are then displayed in
                                sequence. This is not possible with the (old) PNG standard.)</p>
                        </li></ol></div>
                <p>In order to remove any remaining doubts that the installation works as
                    intended the following PHP script that only uses the GD library primitives
                    should be run. This allows troubleshooting the installation without involving
                    the additional complexity of JpGraph to make sure that the basics are in
                    place.</p>
                <p>Store the script in <a class="xref" href="ch03s02.html#example.checkgd" title="Example 3.1. Verifying the GD installations (checkgd.php)">Example 3.1. Verifying the GD installations (<code class="filename">checkgd.php</code>) </a> your document root as
                        <code class="filename">"checkgd.php"</code></p>
                <div class="example"><a name="example.checkgd"></a><p class="title"><b>Example 3.1. Verifying the GD installations (<code class="filename">checkgd.php</code>) </b></p><div class="example-contents">  <div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags">&lt;?php</span><span class="hl-code"> </span><span class="hl-comment">//</span><span class="hl-comment"> content=&quot;text/plain; charset=utf-8&quot;</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$im</span><span class="hl-code"> = @</span><span class="hl-identifier">imagecreate</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-number">200</span><span class="hl-code">, </span><span class="hl-number">100</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-reserved">or</span><span class="hl-code"> </span><span class="hl-reserved">die</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-quotes">&quot;</span><span class="hl-string">cannot create a new gd image.</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$background_color</span><span class="hl-code"> = </span><span class="hl-identifier">imagecolorallocate</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-var">$im</span><span class="hl-code">, </span><span class="hl-number">240</span><span class="hl-code">, </span><span class="hl-number">240</span><span class="hl-code">, </span><span class="hl-number">240</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$border_color</span><span class="hl-code"> = </span><span class="hl-identifier">imagecolorallocate</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-var">$im</span><span class="hl-code">, </span><span class="hl-number">50</span><span class="hl-code">, </span><span class="hl-number">50</span><span class="hl-code">, </span><span class="hl-number">50</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$text_color</span><span class="hl-code"> = </span><span class="hl-identifier">imagecolorallocate</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-var">$im</span><span class="hl-code">, </span><span class="hl-number">233</span><span class="hl-code">, </span><span class="hl-number">14</span><span class="hl-code">, </span><span class="hl-number">91</span><span class="hl-brackets">)</span><span class="hl-code">;
 
</span><span class="hl-identifier">imagerectangle</span><span class="hl-brackets">(</span><span class="hl-var">$im</span><span class="hl-code">,</span><span class="hl-number">0</span><span class="hl-code">,</span><span class="hl-number">0</span><span class="hl-code">,</span><span class="hl-number">199</span><span class="hl-code">,</span><span class="hl-number">99</span><span class="hl-code">,</span><span class="hl-var">$border_color</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-identifier">imagestring</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-var">$im</span><span class="hl-code">, </span><span class="hl-number">5</span><span class="hl-code">, </span><span class="hl-number">10</span><span class="hl-code">, </span><span class="hl-number">40</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">a simple text string</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-var">$text_color</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-identifier">header</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">content-type: image/png</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-identifier">imagepng</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-var">$im</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?&gt;</span></pre></td></tr></table></div></div></div><br class="example-break">  <div class="figure"><a name="fig.checkgd"></a><p class="title"><b>Figure 3.3. Verifying the GD installations <code class="uri"><a class="uri" href="example_src/checkgd.html" target="_top">(<code class="filename">checkgd.php</code>)</a></code> </b></p><div class="figure-contents">  <span class="inlinemediaobject"><img src="images/checkgd.png" alt="Verifying the GD installations (checkgd.php)"></span> </div></div><br class="figure-break">
                <p>Now point the browser to this file and fetch the script. This should show an
                    image in the browser with the text "a simple text string" similar to what is
                    shown in <a class="xref" href="ch03s02.html#fig.checkgd" title="Figure 3.3. Verifying the GD installations (checkgd.php)">Figure 3.3. Verifying the GD installations <code class="uri"><a class="uri" href="example_src/checkgd.html" target="_top">(<code class="filename">checkgd.php</code>)</a></code> </a></p>
                <p>In order to be really sure that the GD 2.x version of the GD library is
                    installed (as opposed to just GD 1.x) we need to use a slightly more advanced
                    script that makes use of some features available in GD 2.x but not in GD 1.x.
                    The largest difference is the support for TrueColor images in GD 2.x so we
                    create a script that makes use of a truecolor canvas..</p>
                <div class="example"><a name="example.checkgd2"></a><p class="title"><b>Example 3.2. Verifying GD2 (<code class="filename">checkgd2.php</code>) </b></p><div class="example-contents">  <div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags">&lt;?php</span><span class="hl-code"> </span><span class="hl-comment">//</span><span class="hl-comment"> content=&quot;text/plain; charset=utf-8&quot;</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-var">$im</span><span class="hl-code"> =  </span><span class="hl-identifier">imagecreatetruecolor</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-number">300</span><span class="hl-code">, </span><span class="hl-number">200</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$black</span><span class="hl-code"> = </span><span class="hl-identifier">imagecolorallocate</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-var">$im</span><span class="hl-code">,  </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$lightgray</span><span class="hl-code"> = </span><span class="hl-identifier">imagecolorallocate</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-var">$im</span><span class="hl-code">,  </span><span class="hl-number">230</span><span class="hl-code">, </span><span class="hl-number">230</span><span class="hl-code">, </span><span class="hl-number">230</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$darkgreen</span><span class="hl-code"> = </span><span class="hl-identifier">imagecolorallocate</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-var">$im</span><span class="hl-code">,  </span><span class="hl-number">80</span><span class="hl-code">, </span><span class="hl-number">140</span><span class="hl-code">, </span><span class="hl-number">80</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$white</span><span class="hl-code"> = </span><span class="hl-identifier">imagecolorallocate</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-var">$im</span><span class="hl-code">,  </span><span class="hl-number">255</span><span class="hl-code">, </span><span class="hl-number">255</span><span class="hl-code">, </span><span class="hl-number">255</span><span class="hl-brackets">)</span><span class="hl-code">;
 
</span><span class="hl-identifier">imagefilledrectangle</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-var">$im</span><span class="hl-code">,</span><span class="hl-number">0</span><span class="hl-code">,</span><span class="hl-number">0</span><span class="hl-code">,</span><span class="hl-number">299</span><span class="hl-code">,</span><span class="hl-number">199</span><span class="hl-code"> ,</span><span class="hl-var">$lightgray</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-identifier">imagerectangle</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-var">$im</span><span class="hl-code">,</span><span class="hl-number">0</span><span class="hl-code">,</span><span class="hl-number">0</span><span class="hl-code">,</span><span class="hl-number">299</span><span class="hl-code">,</span><span class="hl-number">199</span><span class="hl-code">,</span><span class="hl-var">$black</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-identifier">imagefilledellipse</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-var">$im</span><span class="hl-code">,</span><span class="hl-number">150</span><span class="hl-code">,</span><span class="hl-number">100</span><span class="hl-code">,</span><span class="hl-number">210</span><span class="hl-code">,</span><span class="hl-number">110</span><span class="hl-code">,</span><span class="hl-var">$white</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-identifier">imagefilledellipse</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-var">$im</span><span class="hl-code">,</span><span class="hl-number">150</span><span class="hl-code">,</span><span class="hl-number">100</span><span class="hl-code">,</span><span class="hl-number">200</span><span class="hl-code">,</span><span class="hl-number">100</span><span class="hl-code">,</span><span class="hl-var">$darkgreen</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-identifier">header</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">Content-type: image/png</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-identifier">imagepng</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-var">$im</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?&gt;</span></pre></td></tr></table></div></div></div><br class="example-break">  <div class="figure"><a name="fig.checkgd2"></a><p class="title"><b>Figure 3.4. Verifying GD2 <code class="uri"><a class="uri" href="example_src/checkgd2.html" target="_top">(<code class="filename">checkgd2.php</code>)</a></code> </b></p><div class="figure-contents">  <span class="inlinemediaobject"><img src="images/checkgd2.png" alt="Verifying GD2 (checkgd2.php)"></span> </div></div><br class="figure-break">
                <p>In the same way as before store this file on the server and point the browser
                    to it. The result should be the same image as is shown in <a class="xref" href="ch03s02.html#fig.checkgd2" title="Figure 3.4. Verifying GD2 (checkgd2.php)">Figure 3.4. Verifying GD2 <code class="uri"><a class="uri" href="example_src/checkgd2.html" target="_top">(<code class="filename">checkgd2.php</code>)</a></code> </a></p>
                <p><span class="bold"><strong>In order to use the library it is absolutely necessary that the
                        above two scrips works as described. If this is not the case the
                            <code class="filename">php.ini</code> file needs to be checked as described in
                        the next section. </strong></span></p>
            </div>
            <div class="sect2" title="Enabling GD library in php.ini for PH5"><div class="titlepage"><div><div><h3 class="title"><a name="id2476056"></a>Enabling GD library in php.ini for PH5</h3></div></div></div>
                
                <p>If neither of the two example above worked and the GD section didn't exist in
                    the output from <code class="code">phpinfo()</code> the chances are that the GD library has
                    not been enabled in the <code class="filename">php.ini</code> file.</p>
                <p>The first problem to solve is therefore to locate the
                        <code class="filename">php.ini</code> file in the installation. Depending on the type
                    of server (and OS) this can be in different places. If the system is running on
                    a Unix server the <code class="filename">php.ini</code> file is most likely stored in
                    either <code class="filename">/etc/php.ini</code> , <code class="filename">/etc/php/php.ini</code>
                    , <code class="filename">/etc/php5/php.ini</code> or
                        <code class="filename">/etc/php5/apache/php.ini</code>
                </p>
                <p>
                    </p><div class="tip" title="Tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3>
                        <p>Check the output of <code class="code">phpinfo()</code> to find out what
                                <code class="filename">php.ini</code> file the installation is
                            reading.</p>
                    </div><p>
                </p>
                <p>On a windows server there is no standard location since it completely depends
                    on how the installation of the HTTP server and PHP was done. For example if the
                    WAMP server was installed and put in the top directory
                        <code class="filename">c:\wamp\</code> the <code class="filename">php.ini</code> file is
                    installed under <code class="filename">c:\wamp\bin\apache\apache2.2.11\bin\php.ini</code>
                </p>
                <p>Open <code class="filename">php.ini</code> in a editor and locate the line </p>
                <p><code class="code">extension_dir = &lt;some-path-here&gt;</code></p>
                <p>The directory path specified above is the directory where all PHP extension
                    modules are stored. On a Unix system this is typically specified as
                        <code class="filename">/usr/lib/php5/extensions</code> now examine that directory and
                    check if an extension called "<code class="filename">gd.so</code>" (for Unix) or
                        "<code class="filename">gd.dll</code>" (for Windows) exists (and is un-commented). If
                    this extension cannot be found then this extension needs to be installed. For
                    example, many Unix/Linux installation requires that the extra modules in PHP is
                    manually enabled/installed through the appropriate Packet manager as the example
                    below shows.</p>
                <p>
                    </p><div class="example"><a name="id2489639"></a><p class="title"><b>Example 3.3. Installing GD through RPM packet manager</b></p><div class="example-contents">
                        
                        <p>
                            </p><pre class="screen">$/&gt; sudo zypper install php5-gd</pre><p>
                        </p>
                    </div></div><p><br class="example-break">
                </p>
            </div>
            <div class="sect2" title="Verifying TTF fonts"><div class="titlepage"><div><div><h3 class="title"><a name="id2489648"></a>Verifying TTF fonts</h3></div></div></div>
                
                <p>This section is only intended to verify if that support exists for TTF fonts.
                    If this does not work or if it is already known that there are no support for
                    TTF fonts then please go directly to <a class="xref" href="ch03s04.html" title="Installing and configuring Font support">Installing and configuring Font support</a></p>
                <p>In order to check if basic TTF font support is available create the following
                    script in the document root and name it <code class="filename">checkttf.php</code>
                </p>
                <p>Then it is necessary to locate on the system exactly where the TTF fonts are
                    stored and update the defines for the paths and/or the name of the TTF fonts
                    that is know to exist. </p>
                <p>
                    </p><div class="example"><a name="example.checkttf"></a><p class="title"><b>Example 3.4. Verifying TTF with a known font (<code class="filename">checkttf.php</code>) </b></p><div class="example-contents">  <div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-inlinetags">&lt;?php</span><span class="hl-code"> </span><span class="hl-comment">//</span><span class="hl-comment"> content=&quot;text/plain; charset=utf-8&quot;</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-comment">//</span><span class="hl-comment"> Change this defines to where Your fonts are stored</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-reserved">DEFINE</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">TTF_DIR</span><span class="hl-quotes">&quot;</span><span class="hl-code">,</span><span class="hl-quotes">&quot;</span><span class="hl-string">/usr/share/fonts/truetype/</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;
 
</span><span class="hl-comment">//</span><span class="hl-comment"> Change this define to a font file that You know that You have</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-reserved">DEFINE</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">TTF_FONTFILE</span><span class="hl-quotes">&quot;</span><span class="hl-code">,</span><span class="hl-quotes">&quot;</span><span class="hl-string">arial.ttf</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;
 
</span><span class="hl-comment">//</span><span class="hl-comment"> Text to display</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-reserved">DEFINE</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">TTF_TEXT</span><span class="hl-quotes">&quot;</span><span class="hl-code">,</span><span class="hl-quotes">&quot;</span><span class="hl-string">Hello World!</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;
 
</span><span class="hl-var">$im</span><span class="hl-code"> = </span><span class="hl-identifier">imagecreatetruecolor</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-number">400</span><span class="hl-code">, </span><span class="hl-number">100</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$white</span><span class="hl-code"> = </span><span class="hl-identifier">imagecolorallocate</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-var">$im</span><span class="hl-code">, </span><span class="hl-number">255</span><span class="hl-code">, </span><span class="hl-number">255</span><span class="hl-code">, </span><span class="hl-number">255</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$black</span><span class="hl-code"> = </span><span class="hl-identifier">imagecolorallocate</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-var">$im</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-var">$border_color</span><span class="hl-code"> = </span><span class="hl-identifier">imagecolorallocate</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-var">$im</span><span class="hl-code">, </span><span class="hl-number">50</span><span class="hl-code">, </span><span class="hl-number">50</span><span class="hl-code">, </span><span class="hl-number">50</span><span class="hl-brackets">)</span><span class="hl-code">;
 
</span><span class="hl-identifier">imagefilledrectangle</span><span class="hl-brackets">(</span><span class="hl-var">$im</span><span class="hl-code">,</span><span class="hl-number">0</span><span class="hl-code">,</span><span class="hl-number">0</span><span class="hl-code">,</span><span class="hl-number">399</span><span class="hl-code">,</span><span class="hl-number">99</span><span class="hl-code">,</span><span class="hl-var">$white</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-identifier">imagerectangle</span><span class="hl-brackets">(</span><span class="hl-var">$im</span><span class="hl-code">,</span><span class="hl-number">0</span><span class="hl-code">,</span><span class="hl-number">0</span><span class="hl-code">,</span><span class="hl-number">399</span><span class="hl-code">,</span><span class="hl-number">99</span><span class="hl-code">,</span><span class="hl-var">$border_color</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-identifier">imagettftext</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-var">$im</span><span class="hl-code">, </span><span class="hl-number">30</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">90</span><span class="hl-code">, </span><span class="hl-number">60</span><span class="hl-code">, </span><span class="hl-var">$black</span><span class="hl-code">, </span><span class="hl-identifier">TTF_DIR</span><span class="hl-code">.</span><span class="hl-identifier">TTF_FONTFILE</span><span class="hl-code">,</span><span class="hl-identifier">TTF_TEXT</span><span class="hl-brackets">)</span><span class="hl-code">;
 
</span><span class="hl-identifier">header</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">Content-type: image/png</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-identifier">imagepng</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-var">$im</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?&gt;</span></pre></td></tr></table></div></div></div><p><br class="example-break">  </p><div class="figure"><a name="fig.checkttf"></a><p class="title"><b>Figure 3.5. Verifying TTF with a known font <code class="uri"><a class="uri" href="example_src/checkttf.html" target="_top">(<code class="filename">checkttf.php</code>)</a></code> </b></p><div class="figure-contents">  <span class="inlinemediaobject"><img src="images/checkttf.png" alt="Verifying TTF with a known font (checkttf.php)"></span> </div></div><p><br class="figure-break">
                </p>
                <p>As usual point the browser to this script and fetch the image. If thing works
                    an image identical to what is shown in <a class="xref" href="ch03s02.html#fig.checkttf" title="Figure 3.5. Verifying TTF with a known font (checkttf.php)">Figure 3.5. Verifying TTF with a known font <code class="uri"><a class="uri" href="example_src/checkttf.html" target="_top">(<code class="filename">checkttf.php</code>)</a></code> </a> should be visible.</p>
                <div class="sect3" title="Name of TTF font files"><div class="titlepage"><div><div><h4 class="title"><a name="sec3.name-of-ttf-files"></a>Name of TTF font files</h4></div></div></div>
                    
                    <p>The library has built in support for large number of TTF fonts, this
                        includes both the standard MS WEB core fonts as well as Vera and DejaVu
                        fonts. In addition a number of non-latin fonts are supported. This includes
                        both Japanese, Chinese, Hebrew and Russian fonts. See <a class="xref" href="ch03s04.html#sec2.using-non-latin-fonts" title="Using non-latin based fonts with JpGraph">Using non-latin based fonts with JpGraph</a> and <a class="xref" href="ch08s08.html" title="Character encoding">Character encoding</a> for more on how to use non-latin
                        fonts and encodings.</p>
                    <p>In order for the fonts to be usable by the library the font files must
                        have the following names (these are the standard names)</p>
                    <p>More information on how to use TTF fonts in scripts can be found in <a class="xref" href="ch08.html" title="Chapter 8. Text and font handling">Chapter 8. <i>Text and font handling</i></a></p>
                    <p>
                        </p><div class="table"><a name="table.ttf-font-files"></a><p class="title"><b>Table 3.1. Latin TTF font file names</b></p><div class="table-contents">
                            
                            <table summary="Latin TTF font file names" border="1"><colgroup><col class="c1"><col class="c2"><col class="newCol3"><col class="c3"><col class="c4"><col class="c5"></colgroup><thead><tr><th>Font family name</th><th>Symbolic name</th><th>Normal, <code class="code">FS_NORMAL</code></th><th>Bold, <code class="code">FS_BOLD</code></th><th>Italic, <code class="code">FS_ITALIC</code></th><th>Bold italic, <code class="code">FS_BOLDITALIC</code></th></tr></thead><tbody><tr><td>Courier</td><td>FF_COURIER</td><td><code class="filename">cour.ttf</code></td><td><code class="filename">courbd.ttf</code></td><td><code class="filename">couri.ttf</code></td><td><code class="filename">courbi.ttf</code></td></tr><tr><td>Georgia</td><td>FF_GEORGIA</td><td><code class="filename">georgia.ttf</code></td><td><code class="filename">georgiab.ttf</code></td><td><code class="filename">georgiai.ttf</code></td><td> </td></tr><tr><td>Trebuche</td><td>FF_TREBUCHE</td><td><code class="filename">trebuc.ttf</code></td><td><code class="filename">trebucbd.ttf</code></td><td><code class="filename">trebucit.ttf</code></td><td><code class="filename">trebucbi.ttf</code></td></tr><tr><td>Verdana</td><td>FF_VERDANA</td><td><code class="filename">verdana.ttf</code></td><td><code class="filename">verdanab.ttf</code></td><td><code class="filename">verdanai.ttf</code></td><td> </td></tr><tr><td>Times roman</td><td>FF_TIMES</td><td><code class="filename">times.ttf</code></td><td><code class="filename">timesbd.ttf</code></td><td><code class="filename">timesi.ttf</code></td><td><code class="filename">timesbi.ttf</code></td></tr><tr><td>Comic</td><td>FF_COMIC</td><td><code class="filename">comic.ttf</code></td><td><code class="filename">comicbd.ttf</code></td><td> </td><td> </td></tr><tr><td>Arial</td><td>FF_ARIAL</td><td><code class="filename">arial.ttf</code></td><td><code class="filename">arialbd.ttf</code></td><td><code class="filename">ariali.ttf</code></td><td><code class="filename">arialbi.ttf</code></td></tr><tr><td>Vera</td><td>FF_VERA</td><td><code class="filename">Vera.ttf</code></td><td><code class="filename">VeraBd.ttf</code></td><td><code class="filename">VeraIt.ttf</code></td><td><code class="filename">VeraBI.ttf</code></td></tr><tr><td>Vera mono</td><td>FF_VERAMONO</td><td><code class="filename">VeraMono.ttf</code></td><td><code class="filename">VeraMoBd.ttf</code></td><td><code class="filename">VeraMoIt.ttf</code></td><td><code class="filename">VeraMoBI.ttf</code></td></tr><tr><td>Vera serif</td><td>FF_VERASERIF</td><td><code class="filename">VeraSe.ttf</code></td><td><code class="filename">VeraSeBd.ttf</code></td><td> </td><td> </td></tr><tr><td>(Chinese) Simsun</td><td>FF_SIMSUN</td><td><code class="filename">simsun.ttc</code></td><td><code class="filename">simhei.ttf</code></td><td> </td><td> </td></tr><tr><td>Chinese</td><td>FF_CHINESE</td><td><code class="filename">bkai00mp.ttf</code></td><td> </td><td> </td><td> </td></tr><tr><td>(Japanese) Mincho</td><td>FF_MINCHO</td><td><code class="filename">ipamp.ttf</code></td><td> </td><td> </td><td> </td></tr><tr><td>(Japanese) P Mincho</td><td>FF_PMINCHO</td><td><code class="filename">ipamp.ttf</code></td><td> </td><td> </td><td> </td></tr><tr><td>(Japanese) Gothic</td><td>FF_GOTHIC</td><td><code class="filename">ipag.ttf</code></td><td> </td><td> </td><td> </td></tr><tr><td>(Japanese) P Gothic</td><td>FF_PGOTHIC</td><td><code class="filename">ipagp.ttf</code></td><td> </td><td> </td><td> </td></tr><tr><td>(Hebrew) David</td><td>FF_DAVID</td><td><code class="filename">DAVIDNEW.TTF</code></td><td> </td><td> </td><td> </td></tr><tr><td>(Hebrew) Miriam</td><td>FF_MIRIAM</td><td><code class="filename">MRIAMY.TTF</code></td><td> </td><td> </td><td> </td></tr><tr><td>(Hebrew) Ahron</td><td>FF_AHRON</td><td><code class="filename">ahronbd.ttf</code></td><td> </td><td> </td><td> </td></tr><tr><td>DejaVu Sans Serif</td><td>FF_DV_SANSSERIF</td><td><code class="filename">DejaVuSans.ttf</code></td><td><code class="filename">DejaVuSans-Bold.ttf</code>, </td><td><code class="filename">DejaVuSans-Oblique.ttf</code></td><td><code class="filename">DejaVuSans-BoldOblique.ttf</code></td></tr><tr><td>DejaVu Sans Serif Mono</td><td>FF_DV_SANSSERIFMONO</td><td><code class="filename">DejaVuSansMono.ttf</code></td><td><code class="filename">DejaVuSansMono-Bold.ttf</code></td><td><code class="filename">DejaVuSansMono-Oblique.ttf</code></td><td><code class="filename">DejaVuSansMono-BoldOblique.ttf</code></td></tr><tr><td>DejaVu Sans Serif Condensed</td><td>FF_DV_SANSSERIFCOND</td><td><code class="filename">DejaVuSansCondensed.ttf</code></td><td><code class="filename">DejaVuSansCondensed-Bold.ttf</code></td><td><code class="filename">DejaVuSansCondensed-Oblique.ttf</code></td><td><code class="filename">DejaVuSansCondensed-BoldOblique.ttf</code></td></tr><tr><td>DejaVu Serif</td><td>FF_DV_SERIF</td><td><code class="filename">DejaVuSerif.ttf</code></td><td><code class="filename">DejaVuSerif-Bold.ttf</code></td><td><code class="filename">DejaVuSerif-Italic.ttf</code></td><td><code class="filename">DejaVuSerif-BoldItalic.ttf</code></td></tr><tr><td>DejaVu Serif Condensed</td><td>FF_DV_SERIFCOND</td><td><code class="filename">DejaVuSerifCondensed.ttf</code></td><td><code class="filename">DejaVuSerifCondensed-Bold.ttf</code></td><td><code class="filename">DejaVuSerifCondensed-Italic.ttf</code></td><td><code class="filename">DejaVuSerifCondensed-BoldItalic.ttf</code></td></tr></tbody></table>
                        </div></div><p><br class="table-break">
                    </p>
                    <p>
                        </p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
                            <p>For the DejaVu fonts there are actually two common sets of name in
                                usage depending on how long it has been since the fonts where
                                installed. The library knows of both sets of names and will try them
                                in order selecting to use the first one available.</p>
                        </div><p>
                    </p>
                </div>
            </div>
            <div class="sect2" title="Support for different image formats"><div class="titlepage"><div><div><h3 class="title"><a name="id2490624"></a>Support for different image formats</h3></div></div></div>
                
                <p>By default the standard GD image library supports the PNG graphic format. </p>
                <p>Hence by default only PNG is supported. If JPEG support is needed this might
                    require additional libraries that must be installed and enabled for usage by
                    PHP/GD (in the <code class="filename">php.ini </code>file), again please see PHP
                    documentation for specifics. For most practical purposes PNG is a better format
                    since it normally achieves better compression then GIF (typically by a factor of
                    2 for the types of images generated by JpGraph). </p>
                <p>In comparison with JPEG format PNG is also better for the type of images
                    generated by this library. </p>
                <p>So, the bottom line is that there should be very good reasons to choose any
                    other image encoding formats than PNG. By default the image format is set to
                    "auto". This means that JpGraph automatically chooses the best available image
                    encoding format using the preferred order "PNG", "GIF" and "JPG".</p>
                <div class="note" title="No support for SVG" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">No support for SVG</h3>
                    
                    <p>We have received may requests to add support for SVG image output.
                        Unfortunately we have investigated this and concluded that it is
                        (surprisingly!) not technically possible to do this. The main reason is that
                        with the current standard there is no way to statically determine the
                        bounding boxes for texts. This is further described in <a class="xref" href="apk.html" title="Appendix K. Why it is not possible to add a SVG backend to JpGraph">Appendix K. <i>Why it is not possible to add a SVG backend to JpGraph</i></a></p>
                </div>
            </div>
        </div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"><a accesskey="u" href="ch03.html">Up</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>