Graphics Programming with Perl is a guide to the graphics and imaging modules and tools available to the Perl programmer. It covers subjects ranging from. Graphics Programming with Perl - Manning pdf - Ebook download as PDF File .pdf), Text File .txt) or read book online. How to Write a Better Thesis What Is a Thesis? David Evans†, Paul Gruba, Justin Zobel · Download PDF Chapter. Page.
|Language:||English, Spanish, Hindi|
|Genre:||Science & Research|
|ePub File Size:||26.35 MB|
|PDF File Size:||14.55 MB|
|Distribution:||Free* [*Regsitration Required]|
Geared toward Perl users and webmasters, Perl Graphics Programming and PDF--then you'll explore the most powerful tools and Perl modules available for. Perl Graphics Programming. Shawn Wallace Part I. Raster Images and Web Graphics. 1. Creating Creating PDF Documents with Perl. Perl. Graphics. Programming. Shawn Wallace. Creating SVG, SWF (Flash), JPEG , and PNG The Perl interface consists of 14 modules in the SWF namespace.
Even better. Image object and leaves it up to the user to save the image data to a file. Graph programs over to GD:: Placing bars on top of each other can be used. Image formats store graphics as a two-dimensional array of pixels. However, after doing some research I noticed that, in fact, there was a gap in the published material. The width and height of the image are the next two 4-byte integers:
The RenderMan module cannot be compiled against version 2.
The standard commercial one is Photorealistic RenderMan. It offers a set of drawing primitives useful for any drawing task. Gnuplot was created and is maintained by Ilya Zakharevich. Some examples of how to use Term:: Gnuplot are found in section 4. The RenderMan module is further described in section 9. Changing the output format of a program simply becomes a matter of changing the output driver.
When you start using newer versions than those mentioned here— and that time will come—there are no guarantees that the code will still perform identically. Magick has been released with only minor version number changes. Refer to this chapter whenever you need to install modules or programs used in the example code in this book. When minor numbers change. In general. We are not seers. Chapter 8 shows various ways in which whole images can be manipulated and combined.
In chapter 4 we will look at how to create your own drawings. Chapter 6 offers methods to dynamically create and serve graphics on your web site. The subject matter ranges from the use of lowlevel drawing of squares. Chapter 5 provides an introduction to the various ways you can create graphs and charts in your Perl program.
In the most basic sense. This part of the book covers how to do this. All drawing packages also have in common a coordinate space in which to work. Gnuplot 55 4. When the result needs to be imported in another package. Magick 53 4. Throughout the book you will find many ways in which to create graphics. It is always possible to translate between these different coordinate systems.
Magick 46 4. What these coordinates express depends on the drawing package: No matter which drawing package you use. For some graphics applications. Perl modules or otherwise. Many primitives can be specified in several ways. Even though most drawing packages provide these primitives. The differences between drawing packages starts with the definition of a coordinate system. GD and Image:: Some drawing packages work in real-life coordinates. Figure 4.
The drawing primitives for almost all graphics packages. The handling of text is generally more complex than the other primitives. One could argue that all that is really needed are a line and an arc. A circle can be specified as the coordinate of its center and a radius. These issues will be discussed in section 4. One other previously mentioned primitive. It can also be specified as three points that are not on a straight line. The only way to find out which of these specifications a drawing package uses.
Image object setStyle color-list Set the line style to the specified color list. In order to deal with all these ways of representing objects on a canvas. These methods are listed in table 4. Most drawing methods accept a color argument. Each element of the list represents a single pixel on the line to be drawn. All of these methods should be called on a GD:: Image object. Table 4.
NOTE 4. When subsequently one of the fill methods is called. Because of little rounding errors it is possible that there are gaps between the arc that forms the outside bit of the slice. This means that all pixel coordinates are offset at 0. If there were an arc command that allowed one to specify start and end points. This new version supports true color images and a real alpha channel.
At the moment of writing. Once this version of libgd stabilizes. There also is no variant of the arc primitive which allows you to specify a start and end point of the arc. The total number of colors in a GD:: Image object is limited to I suspect that Lincoln Stein will release a new version of GD.
Thomas Boutell has a beta version of version 2 of libgd available for download. In order to use colors in GD you first need to allocate them for your object. When all points have been added. Polygon objects. The circle and the ellipse now form the outlines of the big letter O that can be seen in figure 4. In this case the polygon takes the shape of an arrowhead. To fill the space between these two. Once that is done.
The documentation that comes with GD is quite clear and extensive. The hardest job in graphics programming is defining what needs to be done. This example shows how to use most of the primitives provided by the GD module. Real-life programs that need drawing capabilities will be only superficially more complex than the one presented here. A new image is created and a blue-filled rectangle is drawn around its horizontal center in the left half of the image.
You draw the partial ellipse and the boundary lines with the black color that you obtained from the colorResolve method. But what if the image already has lines or blobs in the area that you need to fill.
The element you want to add is a partial ellipse. The fillToBorder method can be used to change the color of all adjacent pixels until another specified color is encountered. The fill method will color all the pixels that have the same color and that are adjacent to the target pixel.
If however. You solve that problem by keeping one special color around. Then you use fillToBorder to fill the resulting figure with green. You decide to use the colorResolve method to get at those colors. This last method can be used to create some interesting shapes. You can solve this by creating a temporary color that you use as a boundary. This works fine provided your drawing is not complex. Since colors in GD are always specified as an index. As long as these shapes can be limited on all sides by a unique color and this should be a temporary color.
Font objects. If you ever move your code fragment that draws this complex shape into a subroutine. It requires a few more lines of code.
The result of this code can be seen in figure 4. It matters little which RGB values you choose for the temporary border color. For fully solid shapes. This serves mainly to prevent repeated reads and writes of the same image.
See section Using this technique you can create shapes as complex as you wish. These fonts are all of a fixed width and height. To resolve this. These can be scaled to virtually any size and drawn at any angle. The last two methods are an inheritance from the C interface of libgd. Font package method associated with them. The TrueType fonts in GD are not wrapped in an object. These fonts are not pretty.
Either of these names can be used anywhere a GD:: Image method requires a font name. For the built-in fonts. The built-in fonts can only be drawn horizontally or vertically. In later versions of GD. The fonts and their character sizes in pixels are: The list returned from this method consists of eight elements. The following code first requests the bounding box for a string. There are some methods available for the GD:: Font objects that can be used to retrieve information.
The top part of the table shows all methods that work on the built-in fonts. The width and height methods return the dimensions of a single character in the font. This ensures that the string is aligned to the requested coordinates with its upper left corner. The coordinates that these functions expect denote the upper left corner for string and char.
Note that the possibilities of drawing TrueType strings are more flexible and advanced than for built-in fonts. This example uses both the short name and the full GD:: Font object name as arguments to the methods. The stringTTF method draws the string aligned to the left side of the baseline of the font. The nchars method tells us how many characters this font provides.
Magick possesses a wealth of methods. You might wonder why we bother recalculating the x coordinate as well as the y coordinate. That is because sometimes the bounding box returned by stringTTF is slightly offset to the right. There are quite a large number of options that can be passed to the method. The border lines need to be wide to avoid the fill color bleeding out of the circles.
To understand what the various parameters to the Draw method mean. As you can see. Magick will anti-alias all objects it draws. Anti-alias and fuzz 4. We will look at why. You immediately notice that the lines in this image are much wider than the lines in figure 4.
You might have also noticed that these wide lines have been explicitly requested in the code. Magick is much more verbose than that for GD. By default. It is very similar to figure 4. Even with anti-aliasing turned off.
Apart from that. Another solution could have been to draw the circle with an anti-aliased line width of 5. As it is. The higher the value specified for fuzz. Either of the two methods can be used. O transparent O Combine with other image The output of this code can be seen in figure 4. In the code in the previous section.
The fuzz attribute allows the color matching algorithms to match a color near the one we have specified. If at all possible. This is due to the fact that Image:: Magick has antialiased the edge of the circle it drew against the background of the secondary image.
Drawing by combining images Another way to achieve the drawing we want is to create two images and combine them. In this particular case that would probably work well. This leaves the pixels on the inside of the O. The artifacts on the outside can be removed by starting with a transparent image.
If we could fill the inner ellipse with a fully transparent color. Magick by overlaying several separate images which each represent part of the complete drawing. Magick employs. There is a third way to draw this figure: Magick have introduced the path drawing primitive.
The letters in the string define a drawing instruction. The mask is created by repeating the drawing instructions on the new image. The path primitive is explained in more detail in appendix A. More discussion on how image composition works in Image:: A fully black pixel in the mask will result in an opaque pixel after the composition with the ReplaceMatte method.
Lowercase letters take relative coordinates to the current point. Magick images. While the result of this method is reasonably acceptable. Overlaying images can be a very useful tool see for example sections 8. Calls to Transparent are eliminated because the transparency is created by the mask.
The remainder of the code stays exactly the same. With paths. The first line of the path specified in the example positions the pen at the coordinates Which technique to use depends on your needs and the complexity of what you want to achieve. The path is closed by ending the command string with a z.
The arguments to the arc command a are the horizontal and vertical radius. Magick With Image:: The coordinates of this second point are specified relative to the current position of the pen which is.
The code to draw just the O shape is: This can easily cause your code to look ugly when the coordinates and the text are all variables. New Image'.
Magick is described in quite some detail in appendix A. Annotate is described in more detail on page Splitting up your string and concatenating it. The Draw method is described in further detail on page More information on combining images with Image:: Magick can be found in section 8. The global image options are discussed in section A. The coordinates and the contents of the string have to be passed as a single parameter as the value of the points attribute. The following are possible ways in which we can draw text with Image:: This can be used to approximately predict the size of the string to be drawn.
The second call customizes almost everything that can be customized. We will see more on this in section The Draw method is discussed in the section. The first call uses the default font and colors to draw a string. One good reason to do this is to make use of the many image filters and special effects that Image:: Magick provides. Instead of rewriting all your code. Magick does.. Since version 1. O Make the rectangle look 4 from GD to Image:: Magick like a wavy flag As if that is ever going to happen.
The following example code illustrates how to transport an image in both directions: One way of transporting the image data between the modules is to save the image to a file with one module. But the point is that there might be situations.
This is doable. Whether that is acceptable depends on the image. Magick to GD. There is. Magick supports full RGB color as well as an 8-bit alpha channel for transparency. Magick is designed to preserve as much as possible from any image that gets imported.
In this case. Magick object directly. Thus we know that GD will be able to read it. The latter is limited to working with a color palette but also see the note on page This is done mainly to show that it is actually possible.
In real production code it might not be a bad idea to make this into two separate steps. The flag was drawn with GD.
What exactly those options do. The actual results cannot always be as finely controlled as one would like to see in a generic drawing package. Use this only if you have an absolutely genuine need to do so. All terminal drivers. Because these routines have been specifically designed and written for gnuplot. Gnuplot do what it does best: Gnuplot provides an interface to the drawing routines and terminal drivers that are used internally by gnuplot see section 5.
In part. Magick again. The point is that it is easy to do this. As said. Font support is another feature that differs markedly between the various terminals. How exactly a particular line type gets drawn is up to the driver. But even with the few primitives that Term:: Gnuplot provides. Gnuplot documentation. One feature that makes Term:: Gnuplot worth looking at is the large number of output devices that it supports.
GnuplotTerminals documentation. Gnuplot lend themselves well for plotting functions. Gnuplot ': Calling reset is optional if you are going to exit from the program anyway. These three lines are the only output-specific code in the program. O Plot some functions c And end the output Figure 4. This last parameter is relative to the total size. The subroutine that plots the functions is: We set the line type and width. If the x or y values to be plotted include 0.
It accepts as its first argument a reference to a subroutine that can be used to calculate the y value.
We then draw the box with the four vector calls. The plotting code will use those numbers for the resolution with which the functions are going to be plotted. To complete the box. It accepts 5 arguments: The minimum and maximum x value to plot. To determine the resolution and boundaries of the plot. All you need to do is write some wrapper functions that allow you to draw some circles. Magick offers many more features. To describe the PostScript language or Scalable Vector Graphics format in this book is not really possible.
Thus you can easily create output files in these formats. Perl is a text processing language. Magick can be combined to attain the best of both worlds. Gnuplot is fairly minimal at this time. Even better. Using Term:: Gnuplot can seem daunting at first. If you need to produce graphics that are not bitmaps.
The terminals and output devices that are supported by this module are documented in a separate manual page: The output of this code can be seen in figure 4. Gnuplot offers drivers that allow you to create some vector formats. Postscript and SVG. Gnuplot is a possibility. Gnuplot will never take the place of GD or Image:: Whenever scientific research is performed.
When sets of data need to be reported. In this way. In this chapter. While these lines are 1 The terms graph. Stock values and oil and gold prices are invariably represented as a squiggly line. If you follow financial markets. Traffic flows. Often the relationship that needs to be shown is the change of a parameter over time: Results of physics research frequently include lines. Computers are good at working with tables of numbers. Apart from these modules. An example of this could be a plot of the incidences of malaria in parts of the USA and the population sizes of the malaria mosquitoes Anopheles freeborni and Anopheles quadrimaculatus.
Because all types of data have their own peculiarities and needs. Graph or one of the Chart modules. What you choose. Sometimes the relationship that needs to be expressed is of a different nature: When the relative amounts or contributions of the members of a data set need to be shown.
Some modules are strongly geared toward creating business graphics. If the plots of these numbers show similar trends. A general rule of thumb that you can use to select the tool you are going to work with is that if you want to create business graphics. Professional groups have adopted their own standard set of graphs that they frequently use. Each of the mentioned types of charts has numerous variants.
Another example of this is a plot of the rainfall in parts of Australia and the Southern Oscillation Index against time see section 5. Business data and other time-related series are often shown with the help of bar and line charts. We view the data in the way that makes the most sense to us.
There are several modules available for the creation of charts and graphs with Perl. Gnuplot see section 4. If you were looking at numbers in a table. Other times the differences. This is why using the computer to translate tables into graphs is useful.
It used getstats for its input and gnuplot and HTML for output. Graph and Chart:: Are you looking to create an image for inclusion on a web page. GIFgraph implemented the drawing of charts itself. Lincoln Stein followed of course by doing the same for the GD module.
While getgraph used gnuplot to create charts. If you need to create charts for a print publication. Do you require the same chart to be available in multiple formats? At this moment in time. Much information is accessible nowadays via the Web. Another factor in the decision process should be the destination for your chart. One of the areas in chart creation that has seen a tremendous growth over the last years is the creation of charts on the fly.
I decided to instead take the code and create a new module GD:: Graph which worked with GD. Any module or program that can generate GIF. In practical terms. Chapter 6 explains the issues related to creating graphics dynamically for display in a web browser.
Because of time restraints. Graph supports different types of charts through subclasses. If you are looking for a module that allows you to draw scientific charts. GIFgraph became a wrapper around that. Steve Bonds. Because of the troubles associated with manipulating this structure.
But rest assured. Magick to convert the PNG output of the newer versions. Suppose you have a data file containing the quarterly income and expenditure numbers in cents for your squash club: PNGgraph is now.
The most important method. The Chart distribution 5. Pareto charts. Graphics and the Web 6. The Common Gateway Interface 6. Suitable image formats 6. Web safe color palettes. CGI and dynamically generated graphics. Forms and encapsulated graphics.
Image collections and thumbnailing 6. Thumbnails with Image:: Contact sheets with Image:: An example application: A web photo album. Animations for the Web 7. Animation file formats 7.
Repeatedly applying a filter 7. Zooming in on an object. Resizing and combining images 8. Scaling and cropping an image 8. Magick geometry specification. Combining Images 8. Combining GD images. Combining Image:: Magick images. Adding a watermark to an image. Three-dimensional graphics 9. OpenGL 9. OpenGL library functions in Perl. RenderMan 9. How to use the module and the BMRT. The RenderMan language binding for Perl. A rotating cube of cubes. Writing your own graphics modules Interface design Coordinate transformation.
Choosing your drawing primitives. An OO implementation of a clock. Controlling text placement Determining text size Text sizes in GD. Aligning text in graphics Aligning text with GD. Aligning text with Image:: Wrapping text The GD:: Manipulating pixels and transparency Published in: Full Name Comment goes here.
Are you sure you want to Yes No. Be the first to like this. No Downloads. Views Total views. Actions Shares. Embeds 0 No embeds. No notes for slide. Book details Author: Shawn Wallace Pages: O Reilly Media Language: