File: examples.xml

package info (click to toggle)
php-doc 20081024-1
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 57,752 kB
  • ctags: 3,858
  • sloc: xml: 686,554; php: 19,446; perl: 610; cpp: 500; makefile: 336; sh: 114; awk: 28
file content (145 lines) | stat: -rw-r--r-- 4,679 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision: 1.3 $ -->

<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">
  <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: &lt;img
   src=&quot;button.php?text=text&quot;&gt;. The above button.php script
   then takes this &quot;text&quot; string and overlays it on top of a
   base image which in this case is &quot;images/button1.png&quot;
   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">
  <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>
     <imageobject>
      <imagedata fileref="figures/image.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">
  <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, 99, 0x0000FF);
imagefilledrectangle($stamp, 9,9, 90,60, 0xFFFFFF);
$im = imagecreatefromjpeg('photo.jpeg');
imagestring($stamp, 5, 20, 20, 'libGD', 0x0000FF);
imagestring($stamp, 3, 20, 40, '(c) 2007-8', 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 (transparency) 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>
     <imageobject>
      <imagedata fileref="figures/image.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 (another term for transparency).
   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:"../../../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
-->