CooperToons HomePage Caricatures Alphabetical Index Random Selection Previous Next

Flannery O'Connor

(With a Bit of Explanation of the Method of Digital Imaging Called Scaleable Vector Graphics Which by Incorporating the Graphics Code with Popular Scripting Languages Can Display Art in a Most Flexible and Useful Manner As Will Be Evident By Looking At Various Images of Jazz Clarinetist Pete Fountain)

Yes, this is another picture of the American writer, Flannery O'Connor. This was created from scaleable vector graphics and can be compared to the earlier rendering - which was from a hand-inked pencil drawing - by clicking on the image.1

The astute reader will note the subtle nuance when stating that the picture of Flannery is created from scaleable vector graphics - SVG for short - and is not the SVG drawing itself. Unlike the previous drawing of Pete Fountain which is the actual SVG image, the picture of Flannery is a Graphical Interchange Format (GIF) image which was created from the SVG image.

This brings up two questions.

Why SVG in the first place?

And why make a traditional bitmap once you have an SVG?

First things first. Why SVG?

Scaleable vector graphics are used - as those who read the previous and revised tribute to rock and roll star Bill Haley will remember - when there is the need for an image that can be expanded without loss of resolution. Such cases include creating variable sized icons for webpages as well as images for t-shirts and posters.

As beginning web programmers quickly learn, zooming in or expanding an image from the common bitmap formats - GIFS, JPEGS, PNGS, and TIFFS - can produce a jagged and fuzzy look. If you want to enlarge a bitmap, you have to create a new one at a higher resolution. But larger images come at a cost of computer memory and file space.

On the other hand when you zoom in on SVG pictures, they maintain their crisp and sharp look. So the image can be displayed large or small without actually making the file bigger or smaller.

OK. But why make a traditional bitmap GIF of Flannery from the SVG image rather than display the original SVG? We'd really like to know that.

I thought you would as Captain Mephisto said to Sidney Brand. But the explanation may take some time before you can say "I understand."

For one thing it ain't - to quote Sportin' Life - necessarily so that SVG's take less memory than the traditional bitmaps. Sometimes they do and sometimes they don't.

Fairly simple images generally have low SVG memory requirements. For that reason SVG has become popular for making icons and buttons. But more complex images - say a copy of Michelangelo's Sistine Chapel - might not only be oppressively demanding on memory, but it might be difficult to make a faithful SVG copy. On the other hand, if you need flexibility because you're not sure if the image needs to be made larger or not, SVG images might have the advantage.

For now, though, it will be useful to see exactly how the SVG images work. For our example we'll take the drawing of Pete Fountain as displayed below. This is an actual SVG picture, not a GIF copy, and is (obviously) black and white.

Now if you try to snitch the image by right-clicking the picture for downloading, you will fail miserably. And if the failure prompts you to view the actual source code, you won't see something like <img src="petefountain.svg"> which would mean there is a separate SVG file embedded in the page.

Instead this SVG picture is written directly into the webpage. That is, it is an inline image.

If you display the source code - easy if you know how - you won't see a link to a picture. You'll see the following equations (and to skip this rather lengthy bit of numerical brouhaha click here):

<svg width="100%" height="60%" viewBox="0 0 715 736" >

<g transform="translate(0 0)"> <path d="m575 671c0.301-7.28 3.65-14.6 4.76-21.9 6.27-28.3 11.6-56.7 16.8-85.2-9.93 11.7-22.1 23.9-38.3 25-12.3-1.42-23-8.68-33.1-15.3-32.2-23.2-58.7-53.4-83.1-84.6-21.7-28.3-41.3-58.4-56.6-90.7-12.8-6.59-24.9-14.9-34.1-26-5.25-0.332-1.69 11.4-3.41 15.7-1.07 24.6-0.953 49.3 0.0208 74 2.5 58.5 11.6 116 18.8 174-0.341 5.13 3.25 14-0.585 17.2-4.47-24.1-7.42-48.4-10.7-72.7-2.11-16.6-4.1-33.3-5.85-49.9-6.81-2.1-14-4.29-20.6-7.53-29.3-13.7-56.6-31.4-83.8-48.8-4.31 4.52-7.41 10.2-11.2 15.2 3.65 5.53-2.13 5.09-5.02 6.95-25.4 35.6-47.7 73.7-63.5 115-3.43 9.51-8.2 18.8-8.49 29.1-2.14 7.66-6.79 16.1-15.6 17.1-17.3 1.51-33.3-7.33-47.3-16.5-22.9-16.1-43.6-38.6-50.1-66.6-2.33-8.45 1.7-18.6 10.6-21.2 7.42-3.24 15.8-2.58 23.6-1.32 45.4-24.5 83.6-59.9 120-96.3-3.05-3.74-13.9-5.19-18.6-10.4-7.03-5.19-10.9-14.1-9.23-22.8 0.135-9.32-1.56-19.9 5.19-27.5 2.33-4.27 6.33-4.68 9.4-2.88 1.51-5.25 6.08-7.92 10.4-10.8 3.43-2.1 3.73-6.94 6.9-9.5 5.52-5.86 12.9-10.2 20.6-12.4 7.5 5.53 13.9-5.42 22.1-5.39 7.58 3.16 13.7 9.42 21.1 13.2 2.87 0.406 6.55 5.8 9.09 3.64 0.777-1.65 6.16-4.24 2.74-5.04-4.48-5.06 5.78-4.11 7.89-6.51 3.83-4.53 8.01-8.82 11.6-13.5-3.53-5.06 6.01-1.7 6.5-7.14 5.83-6.73 11.7-13.4 17.5-20.2-6.51-2.3-14.8-4.51-17.3-11.7-0.458-7.18 10.1 0.765 14.9-0.882 4.67-0.566 11.3 2.27 14.9-1.34 7.43-6.27-9.51-5.83-10.4-12.3-4.85-10.2 10.8-2.06 15.9-3.43 6.04 1.93 6.96-0.972 8.23-6.2 4.52-8.15 13.4-12.4 18.2-20.4 6.9-4.32 13.1-9.23 18.1-16.1 4.95-5.95 9.82-12 15.7-17 4.11-5.77 9.95-10.7 12.8-17.1-1.58 1.03-9.03 10.9-4.26 2.65-4.47-6.59-13.2-12.4-16.7-20.7-7.93-14.9-8.34-33.9-0.754-49 5.21-8.6 16.1-9.52 25.1-8.51 4.1 0.575 8.16 0.671 1.74-1.02-0.782-2.56-0.946-4.26 3.46-1.52 0.946-0.822-2.91-8.89 0.887-3.86-0.539-3.29-1.73-11.8 0.584-6.05 0.142-3.48-1.31-7.56 1.58-7.14-3.18-5.72-3.1-12.6-0.171-18.3 0.638-5.09 4.3-9.5 1.76-14.5 0.604-2.9 1.42-5.19 3.09-8.04 4.5-1.63 3.95-4.21 0.141-0.956-4.52 0.266 3.48-5.82 4.99-7.49 2.6-1.23 9.72-2.55 2.9-2.14-3.53 0.0416-12 6.88-6.22 0.108 6.26-3.83-4.23 0.556 0.511-3.48 2.43-3.98 12-1.41 12.7-3.03-2.27-3.45-15.1 3.71-7.64-2.28 4.29-3.54 18.7 0.524 11.6 6.19-4.04 5.57-7.41 11.6-9.99 17.8-1.58 4.73-4.39 8.41-5.91 14.4-0.823 5.79-3.68 11.5-4.42 17.9 0.132 4.53-0.881 6.93-0.75 10.6 0.102 1.43-5.34 14 3.66 11.3 8.25-0.717 14.4-7.19 20.1-12.4 1.27 2.43-6.33 7.63 0.104 2.78 1.92 2.83-9.14 8.2-13.2 9.68-3.35 2.68-11.8-0.21-12.5 3.86-0.864 2.42 6.18 5.08 0.324 3.49-9.31-4.4-22.3-7.98-30.6 0.3-8.66 9.4-7.23 23.9-3.88 35.2 2.57 8.47 6.92 16.5 13.3 22.7 0.844-3.28 5.74-8.97 2.62-2.18-3.97 10.3 5.23-8.99 5.05-0.192 0.629 3.43-5.69 15.5-1.94 12.8 1.82-2.38 1.64-13.7 3.92-11.8-0.359 4.05-2.5 13.3-0.173 4.24-0.111-4.05 2.05-8.09 3.25-2.93-0.244 2.59-6.35 12.4-1.17 9.04 4.5-3.61-2.82-0.133 1.16-5.42 0.268-4.15 2.76-2.48 2.5-2.56 3.85-4.69-1.88 8.01 2.92 0.516 2.31-3.54 9.5-9.19 9.07-11.7-4.39-0.223-14.7 9.35-9.42-0.288 3-7.42 5.73-15.8 3.43-23.8-5.66 0.295-11.2 3.11-17 3.17 3.8-3.71 13.5-2.76 18.3-7.85 9.65-7.03 20.9-13.6 25.1-25.5 3.81-8.41 4.51-17.8 5.87-26.7 6.63-2.72 0.699 9.3 0.954 12.6-2.47 11.4-6.49 23.6-16.7 30.4-4.63 3.08-15.4 10.8-5.3 14.5 13.8 4.78 29.6 1.03 41.4-7.21 4.23-0.31-0.634-14.1 3.27-6.5 2.62 9.51 7.97 19.2 17.5 23.2-1.76 3.24-10.1-7.39-9.15 1.89-1.52 7.77-0.997 15.8-0.405 23.6-4.27 0.67-1.25-8.88-2.23-12.1 1.25-5.35-1.36-6.22-6.22-3.21-7.07 1.03-13.6 8.85-19 9.78-2.73 3.52-8.73 8.74-1.13 9.89 5.44 3.73 12.5-6.28 15.1-3.66-1.04 9.37-15.5 10-19.6 2.67-4.42 4.94-8.06 12.2-12.2 18-3 6.37-10.4 11.5-9.42 19 0.948 3.24-5.52 13-2.43 4.72 1.87-3.92 1.38-9.63-1.9-3.19-5.45 6.08-7.07 11.8-8.52 19.6 0.198 2.34-1.43 8.07-1.9 2.57-3.9 2.2-8.87 3.18-11.1 7.41-3.53 4.53-7.56 8.62-11.6 12.7 10.6 7.06 19.2 16.8 25.2 28 11.3 19.1 23.2 38.4 28.8 60.1 0.226 4.47 1.17 8.25 6 8.9 32.5 14.1 61.3 35.3 89 57.1-0.0787-5.03-0.367-10-0.56-15.1-1.41-2.1-5.48-3.39-4.83-6.11 5.17-22.7 20-41.8 36.3-57.8 5.61-2.98-3.61 6.23-5.11 8.11-11.9 13.6-20.4 30.3-22.5 48.4 27.5 27.7 55.2 55.7 76.6 88.5 3.29 3.5 5.39 12.7 8.37 13.7 18.7-42.9 30.4-90.2 25.7-137-2.91-26.9-13.7-53.1-30.9-74.1-25.5-29.7-63.2-45.6-101-53.6-2.66 10.1-11.7 16.5-19 23.3-15.2 12.4-32.4 24.1-52.2 27-10.3 1.37-21.5-1.48-28.1-10-3.4-7.03-0.543-17.1-5.05-24.9-0.8-3.04 2.65-16.6 0.128-7.04 0.131 2.59-2.45 10.5-1.99 3.48 0.211-3.71 2.51-14.6 6.13-11.5-1.26 4.74-3.38 12.3-2.02 16.1 0.774-2.72 1.72-14.7 2.27-5.89-0.346 8.87 0.176-1.65 1.49-4.3 0.505-2.9 1.85-6.87 2.07-0.844 0.493 4.11-4.02 11.1-2.78 12.9 3.85-3.36 1.94-13.3 4.71-14.4-0.0327 3.44-0.656 11.5 0.474 3.74-1.57-6.17 4.97-6.39 2.66 0.266 0.715 7.78-9.59 10.4-6.13 17.2 0.386 6.55-2.86 14.1 5.71 16.9 12.7 5.44 27.2 1.7 39.6-2.81 19.4-7.5 36.7-20.4 49.3-36.9 4.07-14.9 8.73-29.6 13.6-44.2-12.4 11.7-28 19.3-44 24.7 0.846 3.26-1.34 7.48-1.22 0.976-0.758-0.745-0.844 8.1-1.88 2.14 0.378-2.26-1.56 12.9-1.72 3.76-0.0645-7.32-0.573 3.78-2.06 5.56-0.764 7.44-1.81-0.255-1.55-3.32-0.173 4.1-1.53 10.4-3.75 11.2 0.472-4.33-0.0166-7.01-0.534-1.04-2.57 6.17-0.0663-8.19-1.71-10.4-2.02-3.57 2.11 11.8-1.72 12.7-0.0201-4.81-1.65 3.41-2.28-0.451 0.0296 4.28-3.09 6.15-1.75 0.804-0.309 4.9-3.59 5.55-1.7 0.277 0.112-4.4 2.74-13.6 0.471-14.3-3.12 4.89-0.0225-8.59 0.501-10.3 2.56 7.96 1.32-15.9 3.46-6.88 0.444 6.71-3.36 15.1-0.715 20.8-0.442-9.42 2.38 1.94 1.82 5.74 0.522 0.563 0.693-9.4-0.99-12.1-0.868-4.32 0.508-11.9 1.7-15.2 2.06 5.01-0.217-14.4 2.19-5.63 0.123 3.3 0.139 15.3 0.849 6.05-0.443-2.95 0.216-11 1.46-3.68 0.665 4.74-1.23 10.1-2.41 11.1 2.31 1.62 4.29 5.98 4.7 7.9-1.08-3.35-1.26-10.4 1.12-7.82 9e-3 2.71 1.16 12.6 1.03 4.95 2.32-6.58-2.63-11.3-1.84-18.2-0.786-4.65-0.639-14.5 1.71-15.9-0.397 4.22 0.489 10.6 1.09 2.59 1.66-1.6 2.34-13.1 3.17-5.45-0.344 3.1-0.172 16.9 0.153 8.78-0.223-2.48 1.41-15.7 1.99-7.11 0.149 9.25-0.84-3.92 2.11-3.55 0.705 5.25-2.47 13.1-3.15 15.9 2.94-1.19 3.66-14.8 5.16-8.48 1.06-6.25 3.83-2.74 1.29 1.44-2.49 8.82 3.79-8.48 3.43-1.68 3.78-7.27-0.214 8.48-2.64 10.2-2.04 2.43-6.88 10.5-9.06 8.4 2.08-2.5 7.14-6.22 0.954-4.7 1.98-3.58-4.15 0.446-1.96-4.2 0.51-3.39-0.342-10.5-0.56-3.27 1.44 4.54-3.29 13.6 0.847 15.1 1.12 2.31 0.647-3.94 2.44 0.33 21.6-4.31 40.4-18.5 53.6-35.7 7.86-10.8 15.5-24.6 11.6-38.4-3.7-11.8-17-15.1-27.9-15.9 1.82-2.87 11.7 0.705 16.3 2 4.74-0.923 8.48-6.43 11.5-10.2 4.66-7.17 7.93-18 1.86-25.3-4.8-6.48-12.2 8.26-12.9 4.28 3.31-8.77 17.4-9.09 17.2 1.77 1.19 10.8-0.931 22.5-8.61 30.7 7.13 13.5 6.89 30 0.33 43.7-5.21 11-10.8 21.9-15.3 33.2-3.48 8.77-7.58 17.4-10.1 26.5 32.1 7.64 63.5 22.1 86.7 46.1 17.3 17.9 31.7 39.2 38.2 63.4 13.1 42 12.1 88.3-2.74 130-4.76 13.5-11.8 26.2-20.2 37.6-2.39 0.158-7.52-5.06-9.01-1.64-5.34 9.55-11.6 18.7-17.2 28-7.61 36.7-14.7 73.6-26.2 109-1.5 3.39-2.72 9.17-5.28 10.9zm-432-18c3.81 0.407 13-6.38 4.25-4.27-19.7-0.195-37.2-11.1-52.4-22.5-16.4-13.3-32.4-28.8-40.7-48.6-2.76-6.99-3.44-15.9 1.79-21.9-7.1 0.724-11.6 7.94-10.2 14.7 2.07 14 10.9 25.8 19.7 36.4 17.5 19.6 38.8 37 64.1 44.9 4.32 1.16 8.86 1.99 13.3 1.39zm224-5.18c-0.549-0.55 0.276 1.79 0 0zm-210-13.5c-1e-3 -13.6-7.97-25.6-15.7-36.2-15.8-19.8-36.4-37-61-44.3-7.51-1.94-15.7-2.27-23.1 0.15 20.1 0.264 37.8 11.6 53.4 23.3 11.1 8.78 20.7 19.4 30.1 29.9 7.69 10.1 14.7 21.8 15.4 34.8 1-2.43 0.948-5.09 0.96-7.68zm409-58.1c18.5-5.65 30.9-21.9 41.1-37.4 6.31-9.93 11.7-20.4 16.4-31.2-19.5-26.5-43.7-49.1-67.1-72.1-3.05-3.5-6.4-6.91-6.89-0.641-2.17 2.9 1.34 4.43 2.98 6.42 14.6 14.7 29.5 29.2 43.8 44.3-6.9-0.367-12.2-11.2-18.7-15.2-38.5-34.9-82.5-63.5-129-86-2.47-4.3-2.31-10.6-4.1-15.6-5.35-19.9-12-40.8-27.2-55.6-6.87-10.8-15-21.1-25.3-28.7-12.6 2.66-25.4 5.54-38.4 5.74-9.66 0.37-19.4 0.0264-28.9-1.77 3.44 6.54 12 7.84 18.4 9.97 11.4 2.41 23.3 5.85 34.9 2.78 7.04-2.04 14.6-3.44 17.2 5.23 1.92 4.44 10.1 11.9 8.15 14.8-3.62-1.57-6.4-7.04-9.36-12.6-2.47-3.32-3.4-10.3-8.76-7.43-23.1 3.96-46.7 7.78-70.2 5.68-3.44 0.0334-13.7-4.59-6.97 1.88 11.3 6.37 24.7 6.96 37.3 8.58 7.92 1.08 16.3 0.571 24 2.15 4.6 6.88 10.6 11.9 18.1 15.5-1.07 3.47-10.7-3.77-14.5-5.09-5.58-5.11-12.3-3.35-19-2.8-7.55 1.37-15.9-2.92-22.1-3.5-7.35 9.58-17.3 18-29.5 20.3 3.24 3.81 14.7 2.42 21.1 1.17 7.68-1.99 14.6-5.49 22.5-2.68 3.89 1.28 9.17-3.33 11.9 0.0602 2.76 2.75 3.84 7.35 8.2 7.88 4.85 2.05 10.4 3.15 14.6 6.13-6.37-0.217-14.6-3.31-21.1-6.11-3.75-4.9-8.15-0.393-12.8 0.0713-6.94 2.24-14.4-0.659-21.2 0.678-7.25 4.43-15.3 8.22-23.7 8.97 8.67 5.89 19.9 3.96 29.4 1.29 7.09 2.04 14.6 2.77 21.6 4.73 6.76 11.7 19.6 17.9 31.1 24 8.02 2.47 14.3 6.63 15.4 15.5 16.7 43.8 47.7 80.4 81.5 112 24 22.1 49.9 42 77.5 59.4 2.67-0.154 5.34-0.339 7.93-1.02zm-388-8.25c4.24-3.52 0.767-7.26-1.1-10.9-11-17.3-30-29.7-50.4-32.3-3.78-1.2-6.01 2.81-8.96 4.36-1.66 2.86 9.03 1.82 12 3.81 20 5.36 36.7 19.6 47.3 37.1l0.404-0.634zm-17.6-42.8c22.8-25.7 45.5-51.5 68.2-77.2 3.33 0.603 6.66 4.09 8.82-0.271 6.41-3.55-3.12-9.82-5.92-11.6-26.4 29.4-52.6 58.9-79.9 87.4 1.96 2.4 6.49 4.72 8.84 1.71zm189-4.9c-4.18-40.9-7.27-81.9-7.65-123-2.61-1.92-7.69-10.8-8.39-3.82-2.62 8.62-2.58 17.7-2.79 26.6-13.8 1.2-27.8 1.22-41.6 2.71-6.08 4.07-9.55 11.8-14.5 17.4-7.67 10.2-15.5 20.4-22.9 30.8 27.9 17.9 56.4 35.2 87.4 47.2 2.62 0.0208 9.69 5.15 10.5 2.19zm281-2.15c-2.29-6.26-4.19 3.02 1.18 2.85-0.265-1-0.764-1.92-1.18-2.85zm-414-25.9c3.9-9.69 14.8 6.17 17.7-0.0786-1.29-6.21-13.5-9.06-5.56-14.6 27.6-35.4 56-70 83.3-106 1.46-7.49-6.43 1.5-9.45-1.64-6.82-2.81-13.3-6.79-20.6-8.25-8.85 3.6 9.81 5.39 12.6 8.67 3.9 1.82 10.2 4.44 4.68 8.25-29.7 37.6-59.5 75.2-89.1 113-1.02 4.34 5.27 4.38 6.32 0.438zm21.2-14c27.1-38 56.7-74.2 86.3-110-4.35 1.9-14.4-3.31-9.53 4.75-3.94 7.5-10.3 13.7-15.2 20.6-23.4 29.8-47.2 59.2-71.1 88.5 4.74 7.32 5.5 1.14 9.59-3.66zm-25.9-36.3c3.62-4.04 11.4-9.3 1.58-10.6-5.33-2.45-10.2-5.76-15-9.08-3.72 1.67-15.9 5.18-7.3-0.075 3.94-0.926 7.29-9.36 10.6-4.11 10.4 9.01 24.2 15.1 38.1 14-3.36-5.6-9.44-9.83-14.2-14.6-5.16-3.75-9.13-10.1-12.9-14.3-11.3-0.256-23.2-2.65-31.7-10.6-7.38 4.64-6.89 14.7-6.88 22.4 0.901 7.31-3.94 16.1 2.92 21.9 7.32 7.21 17.7 9.67 27.1 13 2.66-2.51 5.14-5.22 7.68-7.86zm37.1-17c5.58-3 2.01-3.52-2.02-1.53-2.96 0.384-12.8-3.47-5.95 1.27 2.45 1.19 5.44 1.24 7.97 0.259zm-13.7-2.75c-3.07-3.75-0.66 1.99 0 0zm59.4-1.4c-3.51-0.565-8.03 0.583-1.95 0.24l0.924-0.0636zm4.27-0.343c-3.33-0.292-1.04 0.435 0 0zm-45-1.26c-3.64-3.77-12.2-9.61-17.4-14.7-8.73-7.51-17.7-15.6-21.8-26.7-6.67-0.187-13.3 3.52-19.1 6.73-6.43 1.38-11.3 11.9-1.82 12.7 6.37 5.07 17.3 0.571 22.2 5.27 2.49 8.62 10.2 13.8 18.8 14.5 6.27 1.41 12.6 3.01 19.1 2.26zm62.7-0.642c2.9-0.0626 5.8-0.125 8.7-0.188 0.527-5.94 2-11.8 2.59-17.7-3.89-5.67-8.61-14.3-3.63-20.6 2.24-4.32 8.53-11.8 8.67-14.4-14.4 16.7-27.8 34.3-41.4 51.7-0.388 3.54 10.1 0.576 13.9 1.39 3.73-0.0744 7.45-0.154 11.2-0.235zm-63.1-3.88c-0.95-3.94-11.4-6.44-3.83-1.7 0.819 0.184 5.28 4.95 3.83 1.7zm-9.48-8.2c3.05-1.91-6.68-3.18-6.21-3.42 1.89 1.17 4.12 6.16 6.21 3.42zm25.9-1.69c-2.24-4.59-10.3-9.37-14.8-14-10.9-9.62-21.6-19.5-32-29.6-9.61 2.59-17.9 9.25-22.5 18.1 4.89-0.686 11.7-5.4 16-2 4.78 6.12 9.14 12.8 14.8 18 11.2 4.67 22.8 9.56 35.1 9.81 1.13-0.0668 2.26-0.126 3.37-0.334zm-1.13-6.57c-1.5-3.53-8.07-5.42-2.48-1.11 0.912 0.889 4.93 4.74 2.48 1.11zm61.2-11.7c-6.74-6.65-3.49 5.45-0.834 7.83 0.127-1.94 3-6.51 0.834-7.83zm12.1-1.97c-1.17-5.79 4.83-15.6-3.57-16.7-3.43 2.18-6.29 6.78-9.15 10.1-5.39 6.36 8.88 7.72 11.8 12.8 1.63-0.115 0.427-4.78 0.968-6.18zm-80.9 3.15c7.08-3.92-14.1-5.67-5.58-0.308 2.13 2.3 3.49 3.51 5.58 0.308zm20.2 0.384c4.24-1.24 6.2-7.55 0.461-2.91-1.96 3.87-15-2.28-8.05 2.89 2.26 1.39 5.24 0.875 7.59 0.0168zm381-1.04c-0.549-0.55 0.276 1.79 0 0zm-383-1.75c-1.85-0.246-0.782 0.457 0 0zm-26.6-4.77c3.49-2.42 7.81 0.431 11.7 0.133 8.43 0.582 17.4 1.84 25.5-1.31-15.6-5.01-31.6-11.5-42.9-23.7-6.17 0.829-11.6 4.22-15.8 8.75 6.37 5.75 12.6 11.7 19.1 17.3 0.869-0.295 1.68-0.728 2.5-1.13zm96.4-31.8c3.96-0.893 8.46-3.21 1.43-2.27-2.86-0.576-4.9 0.847-6.65 2.96-1.08 1.04 4.92-0.743 5.22-0.686zm-35.4-10.2c3.18-1.6 7.59-4.94 1.16-2.88-2.61-0.273-6.04 5.9-1.16 2.88zm13.5-13.5c-0.25-2.76-0.45-8.56-2.84-3.12-1.95 3.86 4.74 9.45 2.84 3.12zm9.91-2.86c-3.69-3.5-2.41 2.45 0 0zm-0.575-16.9c1.6-3.31-2.55 3.45 0 0zm2.54 0.429c1.78-5.38 14.4 1.79 6.01-2.55-1.67-3.19-10.5 4.31-6.01 2.55zm14.2-0.935c-4.07-1.37-4.28 0.843 0 0zm-13.8-2.54c1.43-1.67-2.89 1.63 0 0zm12.4-14.1c6.83-3.13 9.86-10.4 13.7-16.2 8.34-3.91 6.44 6.38 3.89 10.6-2.08 6.57 6.03 5.32 4.46-0.731 0.313-3.86 10.7-11.8 3.74-12.6-2.83 4.24-4.99 2.86-7.51-0.479-0.758-2.34 10-10.2 2.31-9.06-6.91 4.94-11.4 12.6-18.4 17.8-2.06 1.89-11.3 14.4-2.26 10.6zm67.8-26.5c3.58 0.27 4.2-10.4 1.1-3.21-0.121 0.697-4.5 4.96-1.1 3.21zm17.1-2.04c-0.499 0.0201 0.295 2.83 0 0zm-17.7-4.96c3.91-3.9 6.04-8.65 0.119-11.5-6.21-3.98-16.3-15.2-23.3-7.72-6.46 3.97-3.01 6.18 2.61 7.2 7.24 3.15 13.8 8.12 18.3 14.7 0.89-0.771 1.58-1.73 2.33-2.63zm58.9 0.64c-0.555-0.104 0.336 2.14 0 0zm7.7-7.44c0.259-3.74-2.08-10.3-0.845-3.07 0.233 1.9 0.926 12.1 0.901 4.82zm-2.96-3.23c-1.17-2.54 0.303-10.4-2.4-3.65-1.21-2.09 1.96-11.5-0.517-3.12-1.78 4.49 4.19 6.49 3.46 11.9 0.459-1.71 0.109-3.53-0.544-5.15zm-7.04-3.01c-0.0588-4.69-1.2 6.53 0 0zm-40.4-11.5c3.53-2.77 0.753-4.98-1.82-7.17-4.6-3.61-14-13.7-18.8-7.14-5.68 4.79 3.4 3.77 6.19 6.73 5.56 0.364 11.2 15.5 14.5 7.58zm53.9-6.06c0.273-2.95-0.983-8.06-0.705-1.8-0.0455 4.48 0.943 9.76 0.705 1.8zm-40.3-14.7c-5.23-5.76-11.7-12.1-20-12-0.592 1.57-5.88 5.02-2.93 5.18 8.14 0.841 14.1 7.5 18.6 13.8 1.46-2.31 3.05-4.54 4.33-6.96zm-38.9-5.58c0.846-4.01-1.85 2.7 0 0zm53-8.31c-1.03-0.241-1.03 1.46 0 0zm4.47-3.41c6.77-4.01 13.4-8.55 20.7-11.5-4e-3 -3.99 2.83-8.71-1.5-11.3-2.84-3.51-3.81-9.39-8.21-3.89-5.24 3.27-11 5.56-17 7.22-0.766 2.51-2.52 12.4-3.5 8.31 1.75-4.58 3.66-10.6-3.16-6.74 0.624 3.18-5.31 11.8-3.27 4.25 1.89-5.03 0.624-4.32-0.572 0.114-1.18 1.99-7.47 6.89-4.26 1.1 1.56-3.92 1.5-7.98 0.0455-1.81-0.59 3.39-7.02 10.7-3.9 2.97 0.476-3.16 5.11-9.61 1.09-5.23 0.813 5.59-9.44 13.8-5.32 4.06 0.389-5.33 4.98-4.87 2.14 0.145-1.35 3.83 5.54-8.41-0.932-7.08-4.63-0.0365-8.82-7.51-11.4-6.9 0.478 7.61-0.263 15.4-2.86 22.6 5.4-2.12 11.2-1.02 16.7-0.152 7.79 1.22 15.5 3.09 23.2 4.96l0.813-0.364 1.15-0.758zm-33.7-7.71c-0.542-3.64 7.56-15.6 5.07-6.66-0.931 2.01-1.91 7.8-5.07 6.66zm33 2e-3c-0.434-4.28 7.97-14 5.8-4.93-1.8 6.51-2.39 0.361-1.49-0.444-1.3 1.51-1.35 6.8-4.31 5.38zm-35.1-0.241c-1.79-3.09 5.76-14.1 3.54-5.8-1 1.62-1.06 6.04-3.54 5.8zm27.9-0.0506c-0.874-3.97 4.85-16 3.26-5.58 0.569-2.76 5.3-9.66 2.95-2.95-1.46 2.67-3 8.68-6.2 8.54zm3.5-9e-3c0.208-3.13 5.48-14.7 6.08-7.61-1.29 3.05-2.39 8.07-6.08 7.61zm8.74-0.126c0.375-3.3 2.18-8.46 3.83-6.3 0.812-4.94 3.8-4.09 1.28 0.546-1.4 1.26-2.84 7.2-5.1 5.76zm-41.7-1.46c-0.897-2.89 2.84-10.6 1.79-3.36-0.504 0.659-0.344 4.25-1.79 3.36zm46.1-0.38c-0.0873-5.54 7.54-13.4 7.35-4.32-2.18 6.77-3.46 1.49-1.76-2.49-0.123 0.822-2.87 7.56-5.59 6.8zm-25.5-7.06c-1.18-3.09-1.33 6.72 0 0zm-4.21-45.7c1.64-2.29-2.39 2.33 0 0zm-20.9-16.4c-1.65-6.07-1.87 2.07 0 0zm-1.05-3.87c-1.27-2.05-1.36 0.727 0 0zm1.98-0.903c-1.9-0.863 0.841 1.75 0 0zm1.01-8.9c0.518-1.06 3.96 0.286 0.318-2.14-2.33-0.766 0.0811 5.18-0.318 2.14zm3.09-3.4c-2.67-6.27-1.12 0.838 0 0zm-3.75-1.4c-0.957-2.09 0.101 2 0 0zm5.67-3.85c-2.46-2.91-0.577 1.92 0 0zm-2.88-1.88c-1.26-1.79-1.26 1.23 0 0zm4.28-1.79c-0.332-2.11-2.04 1.88 0 0zm-5.24-0.601c-1.04-1.48-1.13-0.251 0 0zm3.2-0.359c-0.793-1.69-0.793 1.69 0 0zm-1.25-2.66c-0.222-5.92-4.18 2.82-0.182 1.42 0.155-0.455 0.579-0.983 0.182-1.42zm3.67 1.69c-3.03-1.64 1.44 1.59 0 0zm1.55-2.65c0.641-5-8.34-2.33-1.68 0.258 0.863 0.0203 0.862 1.71 1.68-0.258zm1.15-2.78c-1.02-1.8-0.127 1.76 0 0zm-2.97-1.63c-1.18-0.363-0.588 0.557 0 0zm4.84-2.22c-1.76-4.05-5.08 3.62 0 0zm-1.13-2.39c3.71 0.943 4.17-4.45 5.6-6.66-2.17-1.75 0.098 2.38-3.73 0.823-3.75 1.33-7.11 2.79-1.07 1.88 8.03 2.6-12.2 4.84-0.796 3.96zm0.133-2.75c-1.18-0.363-0.588 0.557 0 0zm8.2-7.47c2.01-4.62-16.7 1.55-6.72-0.0416 2.14-0.881 5.81 2.78 6.72 0.0416zm1.17-4.02c-5.38-4.1 2.9 3.72 0 0zm1.63 216c0.438-3.09 3.38-10.9-0.133-3.72-2.17 4.9-7.55 3.41-2.5-1.46 2.01-1.79 1.89-12.7 3.88-7.33 3.05-9.4 0.904 15.3 2.28 5.54-0.983-3.96 2.6-5.85 1.73-0.944 0.665-2.46 1.88-12.8 2.35-4.8-0.426 4.95-2.7 12.5-7.61 12.7zm4.87-0.0557c2.82-4.04 2.76-11.2 4.61-14.4 0.858 2.93-0.585 10.4 0.77 3.2-0.622-5.83 2.02-2.72 2.03-1.36 0.754-6.43 3.36-3.13 1.01 1.21-2.32 4.07-3.74 11.6-8.42 11.4zm-18.8-0.574c2.82-4.44 2.84-11.2 4.84-14.9 0.717 5.86 0.873-7.36 3.14-9.23-0.195-4.93 6.97-8.13 3.87-1.06-0.766 6.47-6.96 6.63-5.05 13.9-1.09 8.28 3-12.7 2.22-1.48-0.9 3.75-1.74 7.93 0.0345 1.65-0.486-6.19 4.26-6.82 3.41-0.634-0.611 5.2-3.93 11-8.3 12.1-1.48-1.53-2.72-0.0608-4.17-0.264zm10.9-10.7c1.58-8.89-1.74 5.44-1.77 4.86 0.717-1.57 1.32-3.19 1.77-4.86zm-0.0775-16.5c0.016-1.68-0.825 2.02 0 0zm13.1 25.5c2.64-3.33 4.1-10.1 6.62-12.5-1.4 10.7 2.78-12.6 2.7-2.1-0.452 5.97-3.35 12.5-8.88 14.8zm8.49-4.61c0.613-2.26 2.37-16.9 2.93-8.33-0.745 2.04-0.269 8.37-2.93 8.33zm1.92-0.641c0.207-5.44 3.87-13.3 2.78-16.6-1.84 8.5-1.01-10.9-1.76-1.06-1.34 9.89-1.66-3.09-1.13-6.46-0.518-6.1 2.13-1.25 1.83 0.4-0.432-3.17 2.41-14.6 2.15-5.03-0.209 4.27-2.12 9.46 0.542 12.2 0.141 5.45-0.823 13.5-4.41 16.6zm-23.4-10.6c0.764-2.74 3.54-15 3.21-5.76 0.0168 0.875 1.88-8.55 2-2.16-0.576 5.54 3.38-10.3 2.53-1.34-0.485 4.71-3.88 8.92-6.66 9.26-0.217 0.39-0.883 0.449-1.08-5e-3zm6 0.0584c0.0278-2.69 5.39-16.3 3.66-6.78-1.25-0.134 5.08-10.2 3.25-2.86-2.09 3.74-2.93 9.75-6.91 9.64zm3.89-1.14c2.76-4.16 5.29-12.6 8.42-13.2-1.01 4.63-2.88 13.5-8.42 13.2zm-16.8-0.829c1.53-4.7-4.21 0.435-1.22-4.85 0.999-2.95 3.31-13.2 2.74-4.3-1.33 10 1.02-11.2 3.1-1.92-0.919 3.33-2.01 9.68-4.62 11.1zm23.3-0.901c-0.903-1.64 4.34-14.6 3.8-8.34 1.25-2.54 1.17-11.9 2.19-3.94 0.574 2.51-0.996 15.9-1.68 7.49-0.991 2.99-1.49 4.23-4.32 4.78zm2.65-4.39c-1.12 0.233-0.311 2.06 0 0zm-31.3 2.79c2.13-3.02 1-10.3 3.31-11.6-0.456 6.55 1.91-5.54 2.03 1.68-0.135 3.81-0.912 10.2-5.35 9.97zm50.9-19c1.52-6.24-1.1-15.4 0.57-20 1.61 6.66 2.46 15.2-0.169 21.3l-0.504-0.218zm10.1-2.96c3.67-5.93 11-10.8 11.4-18.8 2.43-0.603 0.278 6.3 1.72 0.272 3.13-2.34-0.769 8.49-3.18 10.3-2.64 2.97-5.86 8.21-9.92 8.16zm-62.2-83.9c4.01-2.39 10.2-9.6 14.3-11.1-1.58 6.18-8.49 10.3-14.3 11.1zm52.4-1.67c-5.36 0.137-11.2-10.5-6.19-11.6-0.59 6.2 6.39 9.56 9.34 12-1.03 0.483-2.17-0.218-3.15-0.427zm24.1-0.198c-13-1.84-25.4-10.3-30.7-22.5 3.7-5.71 4.55 6.77 8.88 9.57 6.25 7.91 16.7 9.91 26.2 10.6-0.271 2.33-6.5-0.116-1.16 1.95 0.128 1.36-2.63 0.085-3.26 0.407zm22.5-9.11c2.08-2.92 13.7-4.56 5.61-0.457-1.78-0.0181-4.04 2.2-5.61 0.457zm18-0.958c1.3-2.23 6.15-7.8-0.0821-7.32-3.91 7.32 1.07-10.1 3.68-12.5 2.85-6.36 8.27-2.07 4.99 0.169 4.54 2.58-0.422 17.2-0.312 6.01-0.588-7.81-8.79 0.996-5.51 3.56 4.6 2.62 1.49 11.2-2.77 10.1zm-15.8-2.57c1.83-2.35 11.1-5.44 4.61-0.697-1.39-0.371-3.84 2.53-4.61 0.697zm-31.9-0.189c-1.12-4.71 1.34-8.04 3.08-3.09 0.0681 1.76-0.817 4.69-3.08 3.09zm-70-1.49c-1.01-4.2 0.418-10.4 2.88-4.19-0.208-2.73 0.507-7.34 2.51-4.27-0.104-3.61 0.552-4.66 2.58-3.02-0.296-4.44 1.28-3.86 3.35-1.39-1.35-5.8 3.37-6.07 3.18-1.44 0.749 2.84-1.48 9.06-3.14 4.16-1.13 5.2-6.73 9.29-8.64 9.68 1.06 2.59-2.61 2.5-2.73 0.48zm66.1 0.535c-0.216-5.04 0.776-2.77-3.02-2.66-0.696-5.03 1.65-11.6 4.73-5.29 1.47 1.37 3.14 9.96-1.71 7.95zm30.8-0.386c3.18-1.89 10.2-6.44 14.2-5.22-3.35 3.24-9.48 5.03-14.2 5.22zm1.74-3.59c2.26-2.03 5.26-2.95-7e-3 -1.24-6.91-1.08 6.22-3.34 8.34-4.83 8.88-1.79-0.658 4.56-4.65 5.61-1.04-0.12-3.17 2.2-3.68 0.457zm-39.5-0.323c-0.393-3.93-4.06-5.18-1.05-10.5 0.0152-4.71 2.11-8.64 3.77-3.41 3.44 3.56 2.36 10.6-1.47 14.2l-1.26-0.259zm39-4.1c-0.179-4.07 7.77-4.27 11.3-7.22 7.27-1.64 0.566 4.33-4.3 4.75-2.37 0.619-4.57 2.03-6.97 2.46zm-44.6-0.671c-1.66-3.4 1.76-15.4-1.62-6.18-6.47 3.83-0.314-10.2 2.57-12.7 0.444 2.64 3.64 1.53 1.42 5.32 3.11 1.51 0.0759 11-1.15 13.8l-1.22-0.193zm-37.8-1.86c-0.822-3.8-1.2-11.2 1.97-9.22 0.151-3.59 0.604-5.51 2.85-3.09-1.34-6.02 4.08-4.17 3.11-0.115 0.32 5.97-4.33 9.93-7.93 12.4zm84.5-3.53c2.62-1.84 3.2-1.06 1.52-2.59 7.08-4.37 15.2-7.63 20.9-13.9-7 2.02-11.8 8.66-18.9 10.8-2.19 1.11-0.17-3.6-3.8-0.28-7.27-1.03 8.6-5.92 11.2-8.28 3.04-1.5 8.48-4.86 1.95-1.63-5.85 2.43-11.8 7.05-18 6.19 3.78-3.99 11.8-4.88 16.6-8.64 2.69-1.28 13.5-9.24 5.07-4.33-5.91 1.9-10.7 6.3-16.8 8.14-2.24 3.04-7.97 0.868-1.74-0.466 6.48-2.25 10.8-6.32 16.1-9.85 3.16-0.283 12.6-11.3 5.14-5.77-2.8 2.77-14.1 7.61-6.41 2.16 2.84-1.09 11.3-7.38 3.55-3.78 2.13-2.53 10.2-8.9 2.02-4.81-9.62 0.297 6.99-6.82 5.58-11.8 0.824-3.89 1.66-5.68-1.36-0.71-0.771 2.77-8.77 10.1-8.11 6.48 1.85-0.525-12.3-2.33-5.86-2.95 2.52 0.736 6.01-1.38 8.16-0.47-1.4 3.41 5.44-2.77 3.46-4.52 1.21-2.06 3.83-12.2 0.538-4.89-0.419 3.48-5.19 9.99-3.68 2.72 1.63-2.14 4.44-11.7 2.02-10.8-1.99 6.04-1.82 17.4-10.9 15.9-5.18-2.27-6.98-6.37-14.1-4.53-8.49-2.24 6.46-0.284 6.57-3.66 2.55 0.132 9.21-6.4 4.66-0.639-4.75 3.74 8.98-2.81 6.9-7.15 0.817-9.87-2.4 10.3-5.67 1.16-3.3 4.03-10.6 8.59-17 6.98 4.27-3.28 9.43-10.7 8.63-17.8 4.05 3.89-3.42 14.4-3.74 16.4 7.25-2.58 7.91-16.5 4.15-19-3.56 3.57-1.18 10.5-5.42 13.9-4.27 5.05-9.6 11.8-15.7 12.4-7.08 2.86-13.3 10.9-10.5 18.8 3.48 4.22-0.79 5.16-1.52 0.129-2.3-4.33 1.88-11.5 2.21-13.4-5.72 4.73-4.48 12.1-2.12 17.7-3.32 2.53-6.84-9.48-5.75-13.9 0.811-7.23 7.18-11.5 10.6-17.4 2.99-1.71 0.551-8.28 3.3-6.53-0.184-3.45-4.11-14.1 0.24-6.61 1.48 4.92 1.54 15.5 2.95 16.5 3.95-4.11-1.59-4.07 1.63-9.37 2.64-5.25-2.83-9.91-1.19-13.8 0.815-2.46 10.7-12.9 3.85-8.8-2.76 1.87-5.41 11.1-6.65 9.18 0.706-4.81 4.53-11.5 4.57-14.9 0.129 7.29 11.4-2.11 6.2 4.91 0.0233 2.78 9.67-6.46 5.07 0.206 2.63-1.74 6.69-1.64 5.07 2.5 3.65-3.19 4.94-2.46 3.33 1.68 0.674 6.84 6.82-7.03 3.96 1.48-2.77 2.17 3.23 14.8 1.78 6.95 1.94-2.24-0.389-3.77 0.0803-6.57 5.2 5.13 3.65 12.9 3.59 19.6 4.11-5.01 0.412-12.4 0.107-16.9 4.82 5.22 7.3 13.3 3.74 20.1-2.38 2.87-12.8 6.19-7.05 6.17 2.7-0.116 9.89-3.77 4.56 0.891 2.8 0.47 8.47-6.43 4.39-4.96-4.63 6.28 1.08-5.71 1.13-8.16 1.56-2.99-2.14-14.8 2.3-6.8 2.59 2.93 3.84 8 5.72 2.37 0.286 3.38 2.89 6.17 4.29 8.36 2.14 4.61-3.08 11.9-1.1 14.9 3.92-1.5 2.01-13.4 4.14-4.13-1.61 4.99-6.95 12-7.29 15.2 3.99-2.52 5.55-7.2 6.85-10.3 0.57 7.28-6.29 11.6-9.4 17.6-3.18 3.77 5.86-3.22 5.37-5.5 4.54-3.1-3.91 8.03 1.82 2.02 3.87 1.52-6.38 9.96 0.692 4.86 0.205 2.5-6 6.54-0.149 2.86 4-4.43 2.62 1.07-0.111 2.3 0.118 6.79-7.72 10-12.6 13.3-4.47 2.9-9.83 8.47-15.5 7.26zm5.59-2.33c-1.97-0.544-0.374 1.44 0 0zm0.854-5.99c2.83-2.37-7.13 2.63-1.06 0.531zm3.16-2.25c-1.82 0.372-1.32 1.69 0 0zm9.15-0.455c2.3-2.37-3.28 2.51 0 0zm2.43-1.2c4-1.17 8.04-12.3 3.15-4.4-0.336 1.26-6.82 6.05-3.15 4.4zm-3.34-7.82c1.73-1.94-6.44 3.8-0.859 0.458zm2.48 0.301c1.26-1.46-4.05 2.76 0 0zm3.45-8e-3c2.85-3.86-3.94 4.05 0 0zm-1.97-1.04c0.988-1.44-1.79 1.7 0 0zm-0.281-1.62c4.31-2.89-0.0432-2.69-1.03 0.702l1.03-0.702zm3.7-5.67c-0.906 0.619-0.38 1.39 0 0zm-63.1-13.5c2.17-6.28 9.13-9.62 10.9-16.1-1.27-0.922-6.3 7.25-8.67 9.78-2.76 1.17-3.93 13.7-3.05 9.78 0.197-1.16 0.311-2.37 0.81-3.45zm62.2 1.71c1.05-2.84-1.95 2.87 0 0zm-1.86-0.688c-1.72 0.402-1.51 1.59 0 0zm1.85-2.01c3.46-5.91-3.95 5.07 0 0zm-54-6.59c4.01-1.34 6.07-14.4 3.05-5.43-1.17 4.21-8.58 8.38-8.35 11.2 1.74-1.94 3.5-3.85 5.3-5.72zm5.09-2.35c-1.18-0.502-6.27 6.28-1.51 1.41l0.659-0.605 0.852-0.809zm36 2c4.98-1.9-10.2-0.86-1.78 0.426l0.293 0.0566zm-26.7-5.88c4.98-1.56 5.61-10.7 8.02-11.2-1.57 8.55 6.78-10.9 0.145-5.02-0.19-1.86 2.89-5.67 5.16-5.89 1.73-8.15-4.48 3.18-7 4.8-6.53 4.43 3.23-5.25 4.63-7.63 2.74-7.09-6.53 2.62-6.9 5.52-1.01 4.7-1.87 1.04-2.36 0.868-0.335 2.76 0.0567 10.2 0.293 11.1 3.13-9.58 1.49 5.44-2.48 6.91-2.46 2.47-4.33 5.22-0.276 1.09l0.773-0.48zm38.8 2.04c1.69-4.55-2.16 4.01 0 0zm-42.8-0.96c2.89-2.39 3.91-8.12 0.316-2.38-1.91 1.24-4.31 6.58-0.316 2.38zm45.4-0.921c1.6-3.39-1.35-7.91-0.987-1.44-0.809 0.352 1.14 3.96 0.987 1.44zm-25.5-4.79c3.45-2.55 2-7.07-0.0792-1.17-2.61 2.08-3.2 4.27 0.0792 1.17zm-26 0.41c-0.549-0.55 0.276 1.79 0 0zm8.36-2.04c3.22-3.15 2.94-14.4-0.463-10.8 0.162-6.3 8.71-12.2 10.9-14.4-7.17 1.07-9.29 8.8-12.4 12.5 2.35 3.59 0.332 13.5 1.03 14l0.861-1.31zm2.83 1.06c1.17-3.04-2.17 3.44 0 0zm38.6-0.581c-1.35-10.6-1.47 5.53 0 0zm-43.6-1.4c1.24-2.81-0.897-14-0.652-5.46 0.437 1.33-1.14 11.7 0.652 5.46zm35.2 1.34c-0.472-1.61-0.606 2.08 0 0zm-9.89-4.32c1.92-3.31-0.198-15.3-0.486-5.76-0.816 1.88-2.27 12.7 0.486 5.76zm15.9 0.82c-0.549-0.55 0.276 1.79 0 0zm-4.16-1.78c-0.499 0.0201 0.295 2.83 0 0zm-15-0.476c-0.536-0.341 0.424 3.44 0 0zm-0.836-3.68c-1.3-0.389 1.03 4.31 0 0zm-0.0459-4.46c-1.69-3.97 1.19 6.29 0 0zm-13.4-2.34c1.65-2.48 7.19-9.8 1.15-4.39-2.1 1.3-8.44 11.5-1.15 4.39zm-8.44 1.49c2.04-3.65 3.11-9.35-0.379-2.88-0.962 0.724-1.5 5.73 0.379 2.88zm7.02-9.11c-1.39 0.38-0.619 0.906 0 0zm-27.6 58.2c-3-2.96-7.8-7.55-8.47-13.1-2.38-6.53 2.03-12 5.2-17.3 5.61-5.05 1.68-12.5 0.354-16.9 4.17-1.51 7.59 6.2 7.1 11-0.383 9.47-12.7 15-9.46 25.2 1.6 4.5 3.04 5.34 1.67-0.288-2.26-8.83 4.6-14.8 8.9-21.6 4.52-4.5-1.09-11.3-0.201-15.2 4.99 2.68 8.14 9.68 5.29 15.4-3.06 7.55-11.3 12.7-11.8 21.3 0.813 4.53 1.75 8 3.44 12.8-0.77 1.04-1.7-0.847-2.01-1.28zm-1.89-4.49c-1.07-2.26-0.115 2.26 0 0zm-0.883-1.58c-1.7-0.852 0.369 1.58 0 0zm3.25-14.6c4.32-6.44 13.1-13.8 8.07-22.2 2.86 5.97-1.92 12.2-5.05 17.3-1.56 0.938-7.41 11.6-3.02 4.88zm-6.41 0.411c0.605-3.24-1.98 4.66 0 0zm4.08-6.26c4.43-3.51 6.02-13.8 3.14-15.9 3.18 6.95-2.2 13.3-5.75 18.9-3.28 5.08 2.63-3.03 2.61-3zm0.512-4.22c0.785-2.27-1.52 2.3 0 0zm-4.05 30c-4.97-5.95-11.4-12.4-10.7-20.7 1.01-6.32 6.9-10.8 8.4-16.9 0.189-4.25-8.07-12.1-0.0993-7.28 7.6 3.41 4.99 14.4 0.555 19.8-4.59 5.92-5.28 14.9 0.283 20.4 1.47 0.27 5.57 7.18 1.57 4.6zm-7.91-15.2c-0.695-7.34 5.48-13.4 7.21-20.2-3.41 5.35-9.68 11.2-8.54 18.1 0.38 1.37 2.05 6.54 1.33 2.09zm4.08-9.19c0.0265-1.35-0.949 1.6 0 0zm1.98-3.37c2.6-3.36 4.7-10.8 1.12-13.1 4.46 4.42-2.88 13.6-2.22 14.9l0.504-0.823zm1-8.99c-0.549-0.55 0.276 1.79 0 0zm-7.22 32.5c-4.8-4.91-9.24-12-6.23-18.8 3.26-4.2 4.09-12.3 2.07-14.3 0.988 8.06-1.05 3.4-1.21 3.82-4.72 5.92 1.79-3.9-1.3-6.35-0.545-8.07-8.66-6.91-13.7-8.93-2.77-1.81-14.6-0.427-6.68-2.93 4.53-2.17 14.6 4.05 14.8 2.27-1.88-6.15-13.8-1.99-12.5-4.98 2.66-1.73 8.8-1.23 4.66-3.49 7.7-1.46 16.1-1.61 22.8 3.06 7.01 6.27-3.96-1.07-7-0.982-3.14-0.831-15-1.52-5.81-0.314 3.31 0.238 11.1 3.49 10.4 6.3-5.46-2.96 2.27 7.27 1.67 9.82 4.12 7.77-5.29 13.6-6.5 20.8-2.26 6.54 6.49 12.5 6.27 16.7l-0.641-0.548zm-2.33-23c2.75-2.95 3.76-8.91 0.982-2.19-1.08 1.48-3.8 6.2-0.982 2.19zm1.74-6.75c2.39-3.59-5.72-13.3-2.1-4.62 1.04 1.54-0.0702 10.4 2.1 4.62zm0.599-6.35c-1.17-1.46 0.869 2.36 0 0zm-4.84-1.06c-1.55-2.31 0.823 2.27 0 0zm4.13-2.8c-1.49-7.16-9.93-12.1-16.5-10.4 7.64-0.595 9.84 8.91 15.9 10.5l0.798 0.726-0.207-0.826zm-6.18-1.76c-1.98-3.5-6.87-6.67-1.53-1.57 0.138 0.772 3.74 5.08 1.53 1.57zm-6.39 16.4c2.98-4.3 1.38-14.8-6.07-13.8-2.38-1.63-16.7 2.29-8.67 1.26 2.54-0.116 14.7-0.142 11.7 2.16-2.86 0.428-15-1.11-6.27 1.16 4.08 1.19 2.77 6.01 0.308 1.59-3.02-2.33-13.6-2.36-12.2-0.32 4.52-0.702 12.7 3.57 9.77 5.75-0.23 3.39-6.92-6.49-10.8-2.14-4.58 1.79 0.49-3.34-4.8 0.163-6.13 4.12-2.89-1.99 1.58-3.03-0.489-3.41 11.8-6.48 3.21-6.1-4.71-1.72 7.42-3.57 9.88-2.52 10.1 1.17-4.07-2.25-7.31-0.949 1.71-3.25 10.4-2.79 14.2-0.855 6.7 1.43 12.1 7.28 9.85 14.5-0.355 3.06-2.15 4.27-4.37 3.17zm2.31-1.57c4.32-3.86-4.12-16.1 0.404-6.41 1.63 1.08-2.29 9.85-0.404 6.41zm35.6-18.9c1.44-4.73 3.34-11.4 2.96-16.3 2.02 2.85 1.04 9.56 3.19 2.39 3.04 2.07-4.55 11-6.15 13.9zm-2.88-1.91c-0.257-2.95-0.121-9.9-2.48-3.25-1.06 4.59-5.61-6.66-3.48-0.214-3.63 2.45-7.48-5.59-12.1-6.07-2.03-1.88-12.6-0.825-5.89-2.89 5.7-0.534 13.5 6.65 15.7 6.85-1.08-4.19-11.1-5.99-9.7-8.18 5.74 1.48 12 4.41 14.6 10.3 4.82-6.06-8.24-8.64-6.02-10.9 3.61 1.62 8.89 6.74 6.09-0.522 2.43-0.343 3.01 12.3 4.16 7.11-1.41-3.11 0.0125-8.4 1.13-2.4 1.25 5.28-0.668-8.96 1.8-1.74 0.693 4.17-1.28 9.55-3.81 12zm-6.8-6.29c-1.93-2.19-1.94-1.36 0 0zm-6.64 4.52c-4.29-1.55-11.2-6.85-17.8-5.83-6.91 0.329-1.23-5.25 3.24-2.65 5.34 0.327 16.3 5.64 15.4 9.19zm-18.5-7.29c0.397-1.18-4.27 1.17 0 0z" fill="#333" stroke-width=".32"/>
</g>

</svg>

(To return to the top of the SVG code, click here.)

A crucial difference between vector graphics and bitmap "rasters" is how the image is actually displayed. A bit map is displayed by the computer defining a region of the screen and alters the individual pixels to be light or dark or of certain colors.

But a scaleable vector graphics drawing takes the text and numbers from the code and puts them into equations. The computer draws the equations on the screen. With the right type of equations and enough of them you end up with pictures.

That SVG's are made from equations is why the code is nothing more than text and numbers and can be viewed with a simple text editor. Opening a bitmap with a text editor shows gibberish.

Next, although the text and numbers needed to create the picture of Pete look pretty lengthy, the computer memory requirement is only 28 kilobytes. This is a nice, small, and compact size for any image and well suited for fast loading and display on the internet. In fact - an important point - this 28 kilobyte image is comparable in size to a GIF file which has similar resolution on a computer monitor.

All right. To demonstrate one advantage of an SVG over the bitmaps, we'll take a part of the picture and zoom in for a closeup. You can do that by turning to the top two lines of the SVG code, which to save you from having to move back to the top of the SVG equations, is:

<svg width="100%" height="60%" viewBox="0 0 715 736">

Here the width and height parameters refer to the actual display size of the picture. Since we're using percents, it means the space allocated for the image is 100% of the web page width and 60% of the height. You can also specify the dimensions in pixels, vw, or em designations. Pixels, of course, are the smallest dots on a computer display, vw is 1/100 of the viewing width of the display, and em is the current font-size.

The viewBox parameters refer to how much and where you zoom in on the image. The units are in pixels. From left to right the parameters are the minimum x value and minimum y value - the upper left hand corner is 0 0 - then the last two numbers are the width and height of the image. So without additional formatting the picture of Pete as created by the code is 715 pixels wide and 736 high.

But you can change the viewBox numbers to zoom in and out and pan left and right. There are also translate parameters that shifts the image up and down and left and right. The width, height, viewBox, and translate parameters all interact with each other to form the image as displayed.2

The original settings for Pete are set to display the entire drawing. But if you twiddle the numbers so the top line is changed to:

<svg width="100%" height="100%" viewBox="410 10 125 220">

Hey, presto!, you'll get a zoomed in Pete:

So by changing the viewBox numbers the display brackets only part of the image. Then with the width and height both being kept at 100% the image looks expanded and cropped.

But note that when zooming in on Pete's face, the image still has nice smooth lines. But if you were to take a GIF image created from the original SVG picture and crop and zoom in, what you get is:

Now this picture really isn't that bad. But if you look closely (and aren't using too small a device) you'll see that there is some blurred and jagged look to the edges.

But now let's finagle the SVG numbers some more. That is, we'll change the first line of the SVG code to read:

<svg width="100%" height="100%" viewBox="440 127 25 48" >

... and the image will now be:

And although the usefulness of such an view may be questioned, it serves to show that even with this much zooming and expansion, the lines are still smooth and crisp.

As to what the corresponding zoomed in and expanded bitmap looks like:

... which wouldn't look that great if printed out.

By more twiddling you can actually display a complete SVG image of Pete at poster size but with the high resolution maintained. This could be done by changing the first line to read:

<svg width="500%" height="1500%" viewBox="0 0 715 736">

... you'll get the picture of Pete in poster size (which you can view in a separate window if you click here). And if you look at the URL directory you can verify the file size is only about 20 kilobytes.

So we see that if a printed image needs to be small, large, or enormous, you only need one SVG image. Best of all the larger display doesn't take up any more memory or file space than a small one.

A particular advantage of the SVG is when you want to toggle back and forth between a close up and far view by clicking the mouse. Often this procedure requires two images, one of the wide shot and the other one for the close up.

But with vector graphics you only need one image regardless of how much or how often you want to zoom in. If you click on the picture of Pete below, you'll see how this works.

Click on the Image to Zoom In and Out

Both views are from the same picture.

At this point curmudgeons will point out that, OK, you can paste the SVG code into a webpage for an in-line image and use no more memory than a separate bitmap file. And you can zoom in and out using a single picture.

But look at all the repeats of the pictures! Posting multiple images with the same SVG code means you're actually using more memory than a bitmap file. After all, you have to put new code at each place where you want the picture.

Weeeeehhhhheeeeelllll, that's true and false. There are short cuts. For instance if you've posted code for an in-line SVG image once, you can use the <use> command - a little poetic alliteration here - where you don't write the whole SVG code again. Instead you snitch just a part - for Pete's picture it's the <path> attribute.

To grab the <path> you simply add an identification reference - such as id="basicPath" - when you write the entire SVG code.

That is for:

<path d="m575 671c0.301-7.28 ...>


etc., etc.,

... 1.17 0 0z" fill="#333" stroke-width=".32"/>

... you slip in the id tag:

<path id="basicPath" d="m575 671c0.301-7.28 ...>


etc., etc.,

... 1.17 0 0z" fill="#333" stroke-width=".32"/>

So now when you want the in-line SVG image in another place, rather than rewriting the whole <svg> stuff with all the path numbers - which took 28 kilobytes - all you need to write in toto for subsequent pictures is:

<svg width="100%" height="60%" viewBox="0 0 715 736" >
<g transform="translate(0 0)">

<use href="#basicPath" />

</g>
</svg>

... and lo and behold!, we see:

... our picture of Pete.

But instead of 28 kilobytes needed for the first picture, this second rendering only takes about 0.1 kilobyte.3

Now it is true that using in-line SVG's for something other than small icons can really clutter up a webpage. A webpage where you have, if not billion and billions then at least hundreds or thousands of numbers in a row, can be a pain to navigate and maintain. That's why people prefer using importable external files where instead of the in-line code all you see is <img scr="petefountain.svg">. So the webpage source code looks nice and uncluttered.

So external SVG files are generally the preferred route. And with proper software you can create SVG files from traditional bitmaps.

But ...

There's one thing that might bother new SVG users if they open an external .svg file with a text editor. At the top of the file they see there's an awful lot of Uniform Resource Locator addresses (URL's) to other web pages they've never heard of. If you edit out the URL references, even though what remains works perfectly for an in-line SVG image, if you import it from the file, you'll find the image won't display.

Although in reality the presence of the URL's are rarely a problem, you still may wonder if you can make external SVG files with no outside links or references. That way you can have the advantages of the external files which can be used by multiple webpages. But you don't have to worry if something messes up the link to another website.

Well, as Arte Johnson might have said, there are ways.

Today virtually all webpages use scripting languages. Although their number seems to be growing exponentially each year - Javascript remains popular. Like all web programming languages, Javascript can be used to write changeable or "dynamic" web pages. Best of all, if you can write an in-line section of a web page as Javascript, then you can cut it out of the page and put it in separate file. Then the file can be simply referenced into as many webpages as you like.

But rather than show how this is done using Pete - whose SVG code may seem rather intimidating for those just starting out - we'll follow Thoreau's advice: Simplify! Simplify! Simplify!

So we'll start off with something simple, simple, simple. Like a circle.

OK. If you draw a circle using in-line SVG, you'll write something like:

<svg height="40%" width="100%">

<circle cx="15vw" cy="15vw" r="14vw" stroke="black" stroke-width="1vw" fill="white"/>

</svg>

Simple enough. What this means is the svg element (as it's called) designates part of the window for the circle. In this case it's a rectangle taking up 40% of the window height and 100% of the width. The (x,y) origin of the svg drawing is the upper left hand corner of the rectangle and the x axis extends from left to right while - contrary to what we did in middle school geometry - the y axis goes downward.

Next we can see that we're going to draw a circle where the origin is at (15vw, 15vw) - remember 1vw unit is 1/100 the width of the window. The radius is 14vw units in length and the circumference is drawn with a black line 1vw thick. The interior is filled in with white.

So what you get is what you draw:

By changing the origin - the cx and cy - to percents and setting them to 50%, you can center the circle better:

Now here's where the Javascript comes in. If you're not familiar with it, don't worry too much about it. You'll pick up enough of it pretty quick. As an American President once said, "Trust me!"

What we do is to take the SVG code for the circle and convert it into a JavaScript function. This is actually pretty simple. You just write on the page:

<script>

function DrawCircle()
{

document.getElementById("circlePlace").innerHTML="<svg height='100%' width='100%'><circle cx='50%' cy='50%' r='14vw' stroke='black' stroke-width='1vw' fill='white'/></svg>";

}

</script>

Now note that everything between the double quotes is simply the code for drawing the SVG image. It's simply written as a single line. And to actually draw the circle, you write somewhere below the function:

<p id="circlePlace"></p>

<script>
DrawCircle();
</script>

The paragraph with the id="circlePlace" reference is put where you want the circle. Also you don't have to position the circle with the paragraph element <p>. For displaying pictures, the somewhat nondescript <div id="circlePlace"></div> is probably more typical.

A word of caution, though. If you want to draw more than one circle you have to use new id references - like circlePlace1, circlePlace2, etc. It's easy to make mistakes, but the point is you do not need to write the actual function again for the extra circles.

And the advantage?

The advantage is that you only have to write the actual function once. Afterwards you can draw as many circles as you like.

Some expert programmers may comment that this function uses the rather pedestrian innerHTML command. The innerHTML is used to write text to a webpage's source code. But using Javascript, you can control when and how the code gets written. So you can change what the viewer sees on the fly as it were.

But as we pointed out, you do have to put all the SVG code into one line without any line breaks. You also have to replace the double quotes (") in the SVG code with single quotes (') - double quotes are used to enclose the text of the innerHTML command. That is, they specify the content of the innerHTML element. Double quotes within double quotes don't work.

But once you've got everything written, you'll get:.

Yep. Exactly the same circle as before.

At this point it may seem that a Javascript function offers no real advantage to the <use> command which also lets us use the same code more than once without writing it again.

But functions also let you replace the numbers with variables. So you only need to write the function once to draw circles that look different.

Specifically you can rewrite the function as:

<script>

function DrawCircle( locationID, height, width, centerX, centerY, radius, color, strokeWidth, fill )
{

document.getElementById(locationID).innerHTML="<svg height='" + height + "' width='" + width + "'><circle cx='" + centerX + "' cy='" + centerY +" ' r='" + radius + "' stroke='" + color + "' stroke-width='" + strokeWidth + " ' fill='" + fill + "'/></svg>";

}

</script>

If you look carefully you can see that the innerHTML command does indeed write the code for drawing the circle. But you don't write the numbers. Instead you use variables like "height", "width", "centerX", "centerY", "radius", and the others are used instead.

And to actually draw the circle you write.

<p id="circlePlace1"></p>

<script> DrawCircle( "circlePlace1", "50%", "100%", "50%", "50%", "14vw", "black", "1vw", "white" ); </script>

...and now you get:

Exactly the same circle.

Now it's about at this point that once more the grumps come in and say, Huh! What's the big deal? A lot of work and gibberish to draw the same circle. And it's harder to read than the regular SVG code!

And what if you have something bigger to draw than this "simple" circle? It's going to make a big mess on your web page. And although we haven't made a deal about it, there are ways to change the attributes of inline SVG code without writing the whole thing as the Javascript function.

Some "improvement"!

Well, now we'll see the big advantage of Javacript. Instead of writing the function on the webpage, you put it in its own file.

Javascript files are recognizable by the .js at the end. Also you don't include the <script> and </script> header and footers. Just the function works fine, thank you.

For the circle we'll call this file drawCircle.js. So now with the function tucked away in its own file, to draw the circle all you see on the webpage itself is:

<p id="circlePlace2"></p>

<script src="drawCircle.js"></script>

<script>

DrawCircle( "circlePlace2", "50%", "100%", "50%", "50%", "14vw", "black", "1vw", "white" );

</script>

... and wherever the webpage sees <script src="drawCircle.js"></script>, then it thinks it's actually the whole function.

The net result is with the simple and compact code written above, you get:

And yes, it's the same circle. But at least the webpage isn't cluttered up with the whole inline function.

All right. The function's in its own file, and it's referenced in the web page. But now we can twiddle with the picture just as if the code was in the file itself:

So further down the page we can write:

<p id="circlePlace3"></p>

<script> DrawCircle( "circlePlace3", "70%", "100%", "50%", "50%", "28vw", "green", "3vw", "red" ); </script>

... and we get:

Note that even though this circle has a lot of changes, you didn't even have to rewrite the <script src="drawCircle.js"></script> line again. If we may paraphrase an Italian politician, once it's written, it stays written.

But as you expect, here the curmudgeons step in again! The circle, they say, whether inline SVG, inline Javascript, or external Javascript file, is a simple example. How about doing something both more complex and useful. Let's see you take the SVG code for Pete and make it suitable for using innerHTML

I thought you'd never ask.

Believe it or not, despite its considerable length, you CAN take the SVG code that draws the picture of Pete and make it into a Javascript function. That is, you can take the SVG code in its raw state and weed out the external URL's and other external references and metadata. They're all at the top of the file for easy weeding.

Then you make sure the blank spaces are only single spaces - sometimes you'll have multiple blanks in a row. Next make sure the adjacent brackets touch ( >< ), and that any line breaks are replaced with blank spaces. And don't forget to replace all double quotes with single quotes. If you do this all correctly, you'll find the SVG code is all on a single line that can be enclosed in double quotes for use in the innerHTML command.

Although what we've described seems like a truly Herculean task, the changes are easy and quick enough with a decent text editor - in fact, it's not necessarily that hard on a cruddy text editor. And the first part of the function with the variables isn't really any more complex that that of the circle. You now have variables for drawing Pete regarding size, position, viewBox, and translation.

So when all is said and done, the Javascript function for Pete ends up looking like:

<script>

function DrawPete( imageID, imageWidth , imageHeight , viewBoxXMin, viewBoxyYMin, viewBoxWidth, viewBoxHeight, translateX, translateY )

{

document.getElementById(imageID).innerHTML = "<svg width=" + imageWidth + " height=" + imageHeight + " viewBox='" + viewXMin + " " + viewYMin + " " + viewWidth + " " + viewHeight + "'>" + "><path d='m575 671c0.301-7.28 3.65-14.6 4.76-21.9 6.27-28.3 11.6-56.7

..... [the rest of the path] .....

1.17 0 0z" fill='#333' stroke-width='.32'/></g></svg>";

}

</script>

Of course, you could use this as an inline Javascript function. But what we want is the function in its own file. And that's easy. Just open a new file with a text editor and cut and paste the function into the new file. Save it and name it something like petefountainsvg.js.

Then all you need on the webpage is:

<script src="petefountainsvg.js"></script>

<center>
<div id="imageLocation" style="width:100%;"></div>
</center>

<p class="caption">Pete Fountain</p>


<script>
DrawPete( "imageLocation1" , "100%" , "60%", "0", "0", "700", "700", "0", "0" )
</script>

... and eins mehr we get our picture of Pete:

Pete Fountain

And remember you can call the function and draw Pete as often as you want without even rewriting the <script src="petefountainsvg.js"></script> part.

And now we can see the big advantage of the external Javascript approach. We have a page of nice looking web code. And since it uses a Javascript function we wrote ourselves, we have the flexibility we want and no external links or metadata references. Nice and simple.

Without going into the boring details, by twiddling with the variables - and there's not really all that many - you can change Pete in lots of ways. For instance, you can make Pete smaller:

Pete Fountain
Le Petit

Shift him to the right:

Pete
A la droite

Or to the left:

Pete
A la gauche

Make him larger:

Pete
Le grand

And with a bit more Javascript you can even zoom in and out like we did before:

Click on Pete to Zoom In and Out

 

Pete Fountain

The point to remember is that all these pictures are from a single file with only a little bit of extra coding. So we can now enjoy the luxury of having all of the confusing numbers and elements of the SVG code conveniently tucked away out of sight. You can use the same file on multiple web pages and yet you can still twiddle the number just like each was an inline SVG image.

But it should be hastened to say that for all the personal satisfaction that programmers may garner by making their own homegrown external Javascript files, there's nothing wrong with using an .svg file that the various vector graphic software programs give you. This is after all the standard practice and the external files can often be be handled using the same syntax as any of the other graphic files.

Well, even though we can now say "I understand" about displaying SVG files and how they are suited for many image sizes, why isn't the original SVG file of Flannery posted rather than the GIF copy? We'd really like to know that.

As Captain Mephisto would say, as computer images become more and complex, particularly as more colors are added, the size advantage of an SVG graphic quickly reaches diminishing returns. And at some point bitmaps can become more memory economical.

In this case, the actual SVG file of Flannery used to make the GIF file takes up about 80 kilobytes. But the GIF file only needs a minuscule 19 kilobytes. True, 80 kilobytes is almost nothing compared to the gargantuan images posted today, but increasingly complex SVG images can quickly ramp up to the high megabyte sizes. Like so much in life, in selecting bitmaps or scaleable vector graphics, you have to look at the particular circumstances to make the correct decision.

As for Flannery O'Connor, you can read a bit about her life and books and stories if you just click here.

But wait a minute! Just hold on there!

... say the curmudgeons as they step in yet again. Don't think you can weasel out of doing the same for Flannery that you did for Pete. After all, Pete's file took only about 20 kilobytes; Flannery's was 80. We need proof that what was possible for Pete's simple black and white SVG image is also as easy with Flannery's multicolored picture.

So maybe if you take the SVG code that drew the picture of Flannery and make that into an external Javascript function, THEN maybe we'll accept there's a point for drawing SVG images from their own homegrown Javascript functions!

Well, certainly as files get bigger the editing requirements will increase. So in this case your purpose is both good and reasonable.4

First we'll take Flannery's SVG code as saved by a graphics program. What you'll see is - and we've blanked out the specifics for the type of software and the websites referenced - is:


<?xml version="xxx" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://xxxxxxxx"
xmlns:cc="http://xxxxxxxx"
xmlns:rdf="http:xxxxxxxx"
xmlns:svg="http://xxxxxxxx"
xmlns="http://xxxxxxxx"
xmlns:sodipodi="xxxxxxxx"
xmlns:xxxxxxxx="http://xxxxxxxx"
version="xxxxxxxx"
id="svg10"
width="645.12"
height="645.12"
viewBox="0 0 645.12 645.12"

sodipodi:docname="flanneryoconnor_vector_xxxxxxxx_b_ver1.svg"
xxxxxxxx:version="xxxxxxxx">
id="metadata16">

rdf:about="">
image/svg+xml
rdf:resource="http://xxxxxxxx/>




id="defs14" />
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
xxxxxxxx:pageopacity="0"
xxxxxxxx:pageshadow="2"
xxxxxxxx:window-width="978"
xxxxxxxx:window-height="719"
id="namedview12"
showgrid="false"
xxxxxxxx:zoom="0.97346231"
xxxxxxxx:cx="322.56"
xxxxxxxx:cy="322.56"
xxxxxxxx:window-x="0"
xxxxxxxx:window-y="23"
xxxxxxxx:window-maximized="0"
xxxxxxxx:current-layer="g18" />
xxxxxxxx:groupmode="layer"
xxxxxxxx:label="Image"
id="g18">
<g
id="g22">
<path
id="path62"
style="fill:#fefefe;stroke-width:0.32"
d="M 0.06165749,488.88 C 0.09867557,437.49335 0.07634221,386.1064 0.214135,334.72 c 2.6059802,69.70278 28.381676,138.32381 ...

... A lot of numbers and other stuff ...

-8.00207,-6.997841 -8.50509,6.12784 -7.02823,11.43376 0.44959,9.98705 0.32489,19.99948 0.96113,29.97516 2.81728,-0.013 7.32591,2.26733 9.03414,-1.0357 z" />
</g>
</svg>

But then after we remove the external URL references, metadata, and references to the actual graphics software, we're left with:

<svg
id="svg10"
width="645.12006"
height="645.12"
viewBox="0 0 645.12006 645.12"
<g
id="g22">
<path
id="path62"
style="fill:#fefefe;stroke-width:0.32"
d="M 0.06165749,488.88 C 0.09867557,437.49335 0.07634221,386.1064 0.214135,334.72 c 2.6059802,69.70278 28.381676,138.32381 ...

... A lot of numbers and other stuff ...

-8.00207,-6.997841 -8.50509,6.12784 -7.02823,11.43376 0.44959,9.98705 0.32489,19.99948 0.96113,29.97516 2.81728,-0.013 7.32591,2.26733 9.03414,-1.0357 z" />
</g>
</svg>

Even now the file still has a lot of sequential spaces and a number of line breaks. And it is pretty big. If viewed in a text editor with word wrapping and with a 12 point font, the file takes up about 20 pages. The memory required to store the file is 80 kilobytes, which is, of course, the same as the image.

Admittedly simplifying Flannery's SVG code has been a bit more involved than for Pete. But not that much. For one thing we don't need all the id=" references nor do we need two <g> attributes. Once those are gone, we can now change the width and height from inches to percents, remove spaces between the end and beginning brackets so they come together (><), remove extra blank spaces, replace the line breaks with a blank space, and change the double quotes to single quotes. And this was all done pretty quick with a text editor.

So we end up with everything in one long line:

<svg width='60%' height='60%' viewBox='0 0 645.12006 645.12' <g transform='translate( 0 0 )'><path style='fill:#fefefe;stroke-width:0.32' d='M 0.06165749,488.88 C 0.09867557,437.49335 0.07634221,386.1064 0.214135,334.72 c 2.6059802,69.70278 28.381676,138.32381

... About 20 pages of other stuff ...

-8.00207,-6.997841 -8.50509,6.12784 -7.02823,11.43376 0.44959,9.98705 0.32489,19.99948 0.96113,29.97516 2.81728,-0.013 7.32591,2.26733 9.03414,-1.0357 z' /></g> </svg>

Now if you stick this directly in-line into a web page, it will create the SVG image. So you'll get our picture of Flannery:

And this is in fact an SVG. Not just a GIF copy.

And we didn't cheat. What you see really is from twenty pages of inline SVG code.

But now we can take this SVG code and alter it to a Javascript function like we did for Pete. That is, we write:

<script>

function DrawFlannery( imageID, imageWidth , imageHeight , viewXMin, viewYMin, viewWidth, viewHeight, translateX, translateY )
{

document.getElementById(imageID).innerHTML = "<svg width=" + imageWidth + "' height='" + imageHeight + "' viewBox='" + viewXMin + " " + viewYMin + " " + viewWidth + " " + viewHeight + "'>" + "<g transform='translate(" + translateX + " " + translateY + ")'<g transform='translate(" + translateX + " " + translateY + ")'><path style='fill:#fefefe;stroke-width:0.32' d='M 0.06165749,488.88 C 0.09867557,437.49335 0.07634221,386.1064 0.214135,334.72 c 2.6059802,69.70278 28.381676,138.32381

... The rest of the function ...

-8.00207,-6.997841 -8.50509,6.12784 -7.02823,11.43376 0.44959,9.98705 0.32489,19.99948 0.96113,29.97516 2.81728,-0.013 7.32591,2.26733 9.03414,-1.0357 z' /></g></svg>";

}

</script>

If you put this in the page, and underneath you add:

<center>
<div id="flannery0" style="width:100%;"></div>
</center>

<script>DrawFlannery( "flannery0" , "100%" , "60%", "0", "0", "700", "650", "0", "0" )</script>

... you'll get Flannery again.

Again we didn't cheat. We really did put the massive Javascript function in-line. Seeing is believing and if you look at the file size of this webpage, you'll find it's over 260 kilobytes - huge by the standards of webpages. Looking at the source code will show you the whole function.

But now you know there are ways to avoid what we can call Javascript bloat.

As we did for Pete, we take the in-line SVG function and stick it in an external Javascript file. That's easy. Just copy and paste the function into its own file but without the <script> and </script> header and footer.

Now name the file flanneryoconnorsvg.js. Then instead of the whole function, just write in the webpage:

<script src="flanneryoconnorsvg.js"></script>

... and write below it:



<center>
<div id="flannery1" style="width:100%;"></div>
</center>

<script>DrawFlannery( "flannery1" , "100%" , "40%", "0", "0", "700", "650", "0", "0" )</script>

... and we get our picture of Flannery:

And again as with our picture of Pete we can reuse the external function and modify the image as often as we want. By changing the variables, we can make Flannery smaller:

Ms. Flannery O'Connor
From afar

Shift to the right:

Flannery
A la droite

Shift to the left:

Flannery
A la gauche

Make her larger:

Flannery Close Up

And even zoom in and out:

Click on Flannery to Zoom In and Out

 

Flannery Zoomed

... at no loss of resolution.

There is of course other things you can do with SVG images whether homegrown or software created. For instance, you can even have Flannery float around in the text.

Floating images are useful for illustrating webpages when you want to have an image close to the text it refers to. Floating an image is pretty easy and is mostly done from the formatting in the webpage rather than changes to the SVG parameters.

But although the size of the SVG image of Flannery is larger than the corresponding GIF file, there are advantages to the vector graphics. Remember the last seven images were drawn simply by calling the one external Javascript function. If these were bitmaps then making the different sizes would take pictures totaling around 100 kilobytes. But the single SVG function only takes about 80 kilobytes. So there's a net savings of 20 kilobytes.

There are of course many other ways to handle scaleable graphics. This demonstration was a simple one, and others, as Aragorn said to Gimli and Legolas, might be devised.