SVG and Typography: Bells and Whistles

SVG and Typography: Bells and Whistles
by Fabio Arciniegas A. |

Image Within Type

The inverse of the previous effect is also a common typographic treatment: image within type, or, in SVG terms, using type as the mask.



<?xml version="1.0"?>

<svg xmlns="http://www.w3.org/2000/svg" 

xmlns:xlink="http://www.w3.org/1999/xlink"

width="400" height="300" version="1.1">

  <defs>

  <mask id="britannia">

      <text x="0" y="100" 

      style="font-size:50pt; 

      font-weight:bold;  

      fill:white;">BRITANNIA</text>

  </mask>

  </defs>

  <g mask="url(#britannia)">

    <image x="0" y="0" 

    width="400px" height="205px"

    xlink:href="brit.jpg" />

  </g>

</svg>

Listing 4. imageintype.svg

Figure 4. Image within type

Stroke

One very common effect applied to text in design programs is stroke. The idea is an effect similar to that of outline (which you can do with the CSS property), but slightly more subtle as it comes not from really outlining the text but from composing a dilated version of it (expanded) with the original.

<?xml version="1.0"?>

<svg xmlns="http://www.w3.org/2000/svg" 

     width="400" height="300" version="1.1">



<defs>

 <filter id="Stroke" 

            filterUnits="objectBoundingBox" 

            x="-10%" y="-10%"

	 width="150%" height="150%">

   <feMorphology in="SourceGraphic" radius="2" 

`                operator="dilate" result="dilated" />

   <feColorMatrix type="hueRotate" in="SourceGraphic" 

                  values="90" result="black" />

   <feMerge>

     <feMergeNode in="dilated" />

     <feMergeNode in="black" />

   </feMerge>

 </filter>

</defs>



<g filter="url(#Stroke)">

  <text x="0" y="80" style="font-size: 40pt; 

                           fill:#C62D13;">

         Stroke</text>

</g>



</svg>

Listing 5. stroke.svg

Figure 5. Stroke

Note that the code for stroke above uses the original color as the color of the stroke and provides a simple formula for calculating a complementary color in the inside. If this is not desirable, you can use dilate separately and simply superimpose normal text over dilated text as shown next.

Dilate

Dilate is commonly used on its own, as shown in the first line of text of Figure 7; or by superimposing another line of text on top of it. That creates the same effect as Stroke, without the restriction of a formula for colors as prescribed in Listing 5.

Figure 6. Dilate

<?xml version="1.0"?>

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"

     width="400" height="300" version="1.1">



<defs>

 <filter id="Dilate" filterUnits="objectBoundingBox" x="-10%" y="-10%"

	 width="150%" height="150%">

   <feMorphology in="SourceGraphic" radius="2" 

                operator="dilate" result="dilated" />

 </filter>

</defs>



  <text filter="url(#Dilate)" x="0" y="80" style="font-size: 40pt; 

                              fill:#00000; ">white</text>



  <text filter="url(#Dilate)" x="0" y="110" style="font-size: 40pt; 

                              fill:#FF0000; ">stripes</text>



  <text x="0" y="110" style="font-size: 40pt; 

                              fill:#FFFFFF; ">stripes</text>





</svg>

Listing 6. dilate.svg

Bevel

A true classic:

Figure 7. Bevel

<?xml version="1.0"?>

<svg xmlns="http://www.w3.org/2000/svg" width="150" height="150" version="1.1">

  <defs>

   <filter id="Bevel" filterUnits="objectBoundingBox" x="-10%" y="-10%"

  	   width="150%" height="150%">

	<feGaussianBlur in="SourceAlpha" stdDeviation="3" result="AlphaBlur" />

	<feSpecularLighting in="AlphaBlur" surfaceScale="4" 

                            specularConstant="0.5"

  	                    specularExponent="10" result="AlphaBlurSpecular"

		            style="lighting-color:rgb(255,255,255)">

    	    <fePointLight x="-10000" y="-10000" z="20000" />

	</feSpecularLighting>

	<feComposite in="AlphaBlurSpecular"  in2="SourceAlpha" 

                        operator="in" result="output" />

	<feComposite in="SourceGraphic" in2="output" operator="arithmetic" k1="0"

			k2="1" k3="1" k4="0" result="litPaint" />

   </filter>

  </defs>



<rect x="0" y="0" width="150" height="150" style="fill:gray; stroke:black" />

<rect x="0" y="60" width="150" height="30" style="fill:white;" />

<rect x="40" y="0" width="40" height="150" style="fill:white;" />

<text filter="url(#Bevel)" 

      x="20" y="85" 

      style="font-family:Arial; font-weight:bold; font-size: 30pt; fill:Black;

	     letter-spacing:-3;">S.K.G.</text>



</svg>

Listing 7. Bevel.svg

Gradient

Unlike filters, gradients don't need to be defined inside the defs element. The syntax for gradients is pretty self-explanatory, as you can see for the case of linear gradients in Listing 8. However, if you would like the technical specification of each parameter, please refer to the the SVG Specification.

Figure 8. Gradient

<?xml version="1.0"?>

<svg xmlns="http://www.w3.org/2000/svg" 

      width="350" height="350" version="1.1">



    <linearGradient id="orangeGrad" 

        gradientUnits="userSpaceOnUse"

         x1="0" y1="0" x2="350" y2="350">

      <stop offset="0"   stop-color="#ff7b00" />

      <stop offset=".33" stop-color="#ffDF01" />

      <stop offset="1"   stop-color="#ff7b00" />

    </linearGradient>





<g style="font-family:Arial; font-weight:bold;

      font-size: 30pt; fill:url(#orangeGrad);">

<text x="20" y="85"> If you're fond of</text>

<text x="20" y="115"> sand dunes and</text>

<text x="20" y="145"> salty air</text>

</g>



</svg>

Listing 8. Gradient.svg

A little word of advice about gradients: less is more. Subtle gradients between colors close to each other in the wheel or between hues of a color usually work a lot better than rainbowesque gradients of complementary (or many) colors

Prev  [1] [2] [3] Next

Close    To Top
  • Prev Article-XML:
  • Next Article-XML:
  • Now: Tutorial for Web and Software Design > XML > Muitimedia > XML Content
    Photoshop Tutorial
     

    Special Effect

      3D Effect
      Photoshop Articles
    Programming Tutorial
     

    C/C++ Tutorial

      Visual Basic
      C# Tutorial
    Database Tutorial
     

    MySQL Tutorial

      MS SQL Tutorial
      Oracle Tutorial
    Geek Tutorial
     

    Blogging Tutorial

      RSS Tutorial
      Podcasting Tutorial
    Graphic Design Tutorial
      Coreldraw Tutorial
      Illustrator Tutorial
      3D Tutorials
    Webmaster Articles
     

    Domain Service

      Web Hosting
      Site Promotion
    Java Tutorial/ Articles
     

    Java Servlets

      JavaEE Tutorial
     

    JavaBeans Tutorial

    XML Tutorial/ Articles
     

    XML Style

      AJAX Tutorial
      XML Mobile
    Flash Tutorial/ Articles
     

    Flash Video

      Action Script
      Flash Articles
    OS Tutorial/ Articles
      Linux Tutorial
      Symbian Tutorial
      MacOS Tutorial
    Personal Tech
      Hardware Tutorial
      Software Tutorial
      Online Auction