<?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> <chapter xml:id="image.examples" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> &reftitle.examples; <section xml:id="image.examples-png"> <title>PNG creation with PHP</title> <para> <example> <title>PNG creation with PHP</title> <programlisting role="php"> <![CDATA[ <?php header("Content-type: image/png"); $string = $_GET['text']; $im = imagecreatefrompng("images/button1.png"); $orange = imagecolorallocate($im, 220, 210, 60); $px = (imagesx($im) - 7.5 * strlen($string)) / 2; imagestring($im, 3, $px, 9, $string, $orange); imagepng($im); imagedestroy($im); ?> ]]> </programlisting> </example> This example would be called from a page with a tag like: <literal><img src="button.php?text=text"></literal>. The above <filename>button.php</filename> script then takes this <literal>"text"</literal> string and overlays it on top of a base image which in this case is <literal>"images/button1.png"</literal> and outputs the resulting image. This is a very convenient way to avoid having to draw new button images every time you want to change the text of a button. With this method they are dynamically generated. </para> </section> <section xml:id="image.examples-watermark"> <title>Adding watermarks to images using alpha channels</title> <para> <example> <title>Adding watermarks to images using alpha channels</title> <programlisting role="php"> <![CDATA[ <?php // Load the stamp and the photo to apply the watermark to $stamp = imagecreatefrompng('stamp.png'); $im = imagecreatefromjpeg('photo.jpeg'); // Set the margins for the stamp and get the height/width of the stamp image $marge_right = 10; $marge_bottom = 10; $sx = imagesx($stamp); $sy = imagesy($stamp); // Copy the stamp image onto our photo using the margin offsets and the photo // width to calculate positioning of the stamp. imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp)); // Output and free memory header('Content-type: image/png'); imagepng($im); imagedestroy($im); ?> ]]> </programlisting> <mediaobject> <alt>Adding watermarks to images using alpha channels</alt> <imageobject> <imagedata fileref="en/reference/image/figures/watermarks.png" /> </imageobject> </mediaobject> </example> This example is a common way to add watermarks and stamps to photos and copyrighted images. Note that the presence of an alpha channel in the stamp image as the text is anti-aliased. This is preserved during copying. </para> </section> <section xml:id="image.examples.merged-watermark"> <title>Using <function>imagecopymerge</function> to create a translucent watermark</title> <para> <example> <title>Using <function>imagecopymerge</function> to create a translucent watermark</title> <programlisting role="php"> <![CDATA[ <?php // Load the stamp and the photo to apply the watermark to $im = imagecreatefromjpeg('photo.jpeg'); // First we create our stamp image manually from GD $stamp = imagecreatetruecolor(100, 70); imagefilledrectangle($stamp, 0, 0, 99, 69, 0x0000FF); imagefilledrectangle($stamp, 9, 9, 90, 60, 0xFFFFFF); imagestring($stamp, 5, 20, 20, 'libGD', 0x0000FF); imagestring($stamp, 3, 20, 40, '(c) 2007-9', 0x0000FF); // Set the margins for the stamp and get the height/width of the stamp image $marge_right = 10; $marge_bottom = 10; $sx = imagesx($stamp); $sy = imagesy($stamp); // Merge the stamp onto our photo with an opacity of 50% imagecopymerge($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp), 50); // Save the image to file and free memory imagepng($im, 'photo_stamp.png'); imagedestroy($im); ?> ]]> </programlisting> <mediaobject> <alt>Using imagecopymerge() to create a translucent watermark</alt> <imageobject> <imagedata fileref="en/reference/image/figures/watermark-merged.png" /> </imageobject> </mediaobject> </example> This example uses <function>imagecopymerge</function> to merge the stamp with our original image. Using this we can set the opacity of our stamp - in our example we've set it to 50% opacity. In practice this would be useful in copyright protection as semi-transparent watermarks are hard to remove yet allow viewers to see the image. </para> </section> </chapter> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"~/.phpdoc/manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 -->