Table of Contents

preface xiii
About this book xiii
Who should read this book? xiv
Coding practices xv
Source code downloads xvi
author online xvii
acknowledgments xix
about the cover illustration xxi

Part 1 Foundations 1

1 Overview of graphics 3
1.1 Perl and graphics 4
1.2 The bits and pieces in graphics programming 5
1.3 Color spaces and palettes 7
RGB 7 . CMY and CMYK 8 . HSV and HLS 9
YUV, YIQ and YCbCr 12 . Grayscale 12
Color distance 13 . Reducing the number of colors in an image 13
1.4 Summary 14
2 Overview of graphics file formats 15
2.1 Some graphics formats 16
GIF 17 . JPEG, JFIF 18 . PNG 18
MNG 19 . SVG 19 . TIFF 19
2.2 Finding the size and type of an image 20
Image::Size 20 . Image::Magick 21
Do it yourself 22 . More on file size and information 24
2.3 Conversion of graphics formats 24
2.4 Summary 26
3 Overview of tools and modules 27
3.1 CPAN 28
3.2 The tools 29
The Chart::* modules 29 . Gnuplot 29
GD 29 . GD::Graph, GIFgraph and Chart::PNGgraph 30
GD::Text 30 . The Gimp 30 . Image::Magick 30
Image::Size 31 . Inline 31 . OpenGL 32
PGPLOT 32 . RenderMan 33 . Term::Gnuplot 33
3.3 A note on module versions 34
3.4 Summary 34

Part 2 Creating graphics 35

4 Drawing 37
4.1 Drawing with GD 39
An example drawing 40 . Filling objects 42
Drawing text with GD 43 . GD.s built-in fonts 44
TrueType fonts and GD 45
4.2 Drawing with Image::Magick 46
An example drawing 46 . Anti-alias and fuzz 47
Drawing by combining images 48 . Drawing with paths 50
Drawing text with Image::Magick 51
4.3 Combining GD and Image::Magick 53
4.4 Drawing with Term::Gnuplot 55
4.5 PostScript and SVG 59
4.6 Summary 59
5 Creating charts 60
5.1 GD::Graph and friends 62
Preparing your data sets for GD::Graph 63
Controlling the look of your chart 65
GD::Graph and fonts 65 . Saving your chart to a file 66
Bar and area charts 68 . Lines, Points and LinesPoints charts 70 . Mixed charts 72
5.2 The Chart distribution 74
Pareto charts 75
5.3 PGPLOT 76
PGPLOT devices 76 . Example: A simple X-Y plot 77
Example: A contour plot 81 . Example: Plotting a galaxy 84
5.4 Interfacing with gnuplot 85
5.5 Summary 89
6 Graphics and the Web 90
6.1 The Common Gateway Interface 91
HTTP and CGI 91
6.2 Suitable image formats 92
Web safe color palettes 92
6.3 CGI and dynamically generated graphics 94
6.4 Forms and encapsulated graphics 96
6.5 Image collections and thumbnailing 100
Thumbnails with Image::Magick 101
Thumbnails with GD 102 . Contact sheets with Image::Magick.s . visual directory 103
Contact sheets with Image::Magick::Montage 104
An example application: A web photo album 105
Designing the data 107
6.6 Summary 121
7 Animations for the Web 122
7.1 Animation file formats 123
GIF 123 . MNG 124
Macromedia Flash 124 . SVG 125
7.2 GIF animations 125
7.3 Perl and animations 126
7.4 Repeatedly applying a filter 127
Example: making objects appear 127
Example: Zooming in on an object 129
7.5 Animated text 131
7.6 Animated charts 132
7.7 Animations with the Gimp 134
7.8 Summary 137
8 Resizing and combining images 138
8.1 Scaling and cropping an image 139
Image::Magick geometry specification 139
Cropping an image 140
8.2 Combining Images 140
Combining GD images 140
Combining Image::Magick images 142
Adding a watermark to an image 145
8.3 Summary 151
9 Three-dimensional graphics 153
9.1 OpenGL 154
OpenGL library functions in Perl 155
Capturing your OpenGL output 157
Example: a planetary system 160
OpenGL summary 164
9.2 RenderMan 164
How to use the module and the BMRT 165
The RenderMan language binding for Perl 166
Example: A rotating cube of cubes 167
9.3 Summary 172

Part 3 Special topics 173

10 Writing your own graphics modules 175
10.1 Interface design 176
Coordinate transformation 180
Choosing your drawing primitives 181
Implementing the interface 182
10.2 An OO implementation of a clock 186
10.3 Summary 188
11 Controlling text placement 190
11.1 Determining text size 191
Text sizes in GD 191
Text sizes in Image::Magick 192
11.2 Aligning text in graphics 194
Aligning text with GD 194
Aligning text with Image::Magick 196
11.3 Wrapping text 197
The GD::Text modules 207
11.4 Summary 209
12 Manipulating pixels and transparency 210
12.1 GD and pixels 211
Example: rotating RGB values 211
Removing duplicate color palette entries 212
12.2 Image::Magick and pixels 213
Rotating RGB values 214
12.3 Convolution 215
Convolution with Image::Magick 217
Using Image::Magick's Convolve() method 224
Convolution with PDL 226
12.4 Alpha channels and transparency 229
Transparency and the GD module 229
Transparency and Image::Magick 230
How to view partially transparent images 233
12.5 Fast manipulation of image pixels 233
Using Inline::C 234
12.6 Summary 238

Part 4 Appendices 239

A Image::Magick introduction & reference 241
B Color space conversion algorithms 284
C Module code 288

 
references 293
index 295