diff --git a/font/opentype/example_test.go b/font/opentype/example_test.go
new file mode 100644
index 0000000..859b061
--- /dev/null
+++ b/font/opentype/example_test.go
@@ -0,0 +1,114 @@
+// Copyright 2020 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package opentype_test
+
+import (
+	"fmt"
+	"image"
+	"image/color"
+	"log"
+	"os"
+
+	"golang.org/x/image/font"
+	"golang.org/x/image/font/gofont/goitalic"
+	"golang.org/x/image/font/opentype"
+	"golang.org/x/image/font/sfnt"
+	"golang.org/x/image/math/fixed"
+)
+
+func ExampleNewFace() {
+	const (
+		width        = 72
+		height       = 36
+		startingDotX = 6
+		startingDotY = 28
+	)
+
+	f, err := sfnt.Parse(goitalic.TTF)
+	if err != nil {
+		log.Fatalf("Parse: %v", err)
+	}
+	face, err := opentype.NewFace(f, &opentype.FaceOptions{
+		Size:    32,
+		DPI:     72,
+		Hinting: font.HintingNone,
+	})
+	if err != nil {
+		log.Fatalf("NewFace: %v", err)
+	}
+
+	dst := image.NewGray(image.Rect(0, 0, width, height))
+	d := font.Drawer{
+		Dst:  dst,
+		Src:  image.White,
+		Face: face,
+		Dot:  fixed.P(startingDotX, startingDotY),
+	}
+	fmt.Printf("The dot is at %v\n", d.Dot)
+	d.DrawString("jel")
+	fmt.Printf("The dot is at %v\n", d.Dot)
+	d.Src = image.NewUniform(color.Gray{0x7F})
+	d.DrawString("ly")
+	fmt.Printf("The dot is at %v\n", d.Dot)
+
+	const asciiArt = ".++8"
+	buf := make([]byte, 0, height*(width+1))
+	for y := 0; y < height; y++ {
+		for x := 0; x < width; x++ {
+			c := asciiArt[dst.GrayAt(x, y).Y>>6]
+			if c != '.' {
+				// No-op.
+			} else if x == startingDotX-1 {
+				c = ']'
+			} else if y == startingDotY-1 {
+				c = '_'
+			}
+			buf = append(buf, c)
+		}
+		buf = append(buf, '\n')
+	}
+	os.Stdout.Write(buf)
+
+	// Output:
+	// The dot is at {6:00 28:00}
+	// The dot is at {41:32 28:00}
+	// The dot is at {66:48 28:00}
+	// .....]..................................................................
+	// .....]..................................................................
+	// .....]..................................................................
+	// .....]..................................+++......+++....................
+	// .....]........+++.......................888......+++....................
+	// .....].......+88+......................+88+......+++....................
+	// .....].......888+......................+88+.....+++.....................
+	// .....].......888+......................+88+.....+++.....................
+	// .....].................................888......+++.....................
+	// .....].................................888......+++.....................
+	// .....]....................++..........+88+......+++.....................
+	// .....]......+88+.......+888888+.......+88+.....+++....+++..........++...
+	// .....]......888......+888888888+......+88+.....+++....++++........+++...
+	// .....]......888.....+888+...+888......888......+++.....+++........++....
+	// .....].....+888....+888......+88+.....888......+++.....+++.......+++....
+	// .....].....+88+....888.......+88+....+88+......+++.....+++......+++.....
+	// .....].....+88+...+888.......+88+....+88+.....+++......+++......+++.....
+	// .....].....888....888+++++++++88+....+88+.....+++......+++.....+++......
+	// .....].....888....88888888888888+....888......+++......++++....++.......
+	// .....]....+888...+88888888888888.....888......+++.......+++...+++.......
+	// .....]....+88+...+888...............+888......+++.......+++..+++........
+	// .....]....+88+...+888...............+88+.....+++........+++..+++........
+	// .....]....888....+888...............+88+.....+++........+++.+++.........
+	// .....]....888....+888...............888......+++........++++++..........
+	// .....]...+888.....888+..............888......+++........++++++..........
+	// .....]...+88+.....+8888+....++8.....888+.....++++........++++...........
+	// .....]...+88+......+8888888888+.....+8888....+++++.......++++...........
+	// _____]___888________+88888888++______+888_____++++_______+++____________
+	// .....]...888...........+++.............++................+++............
+	// .....]..+88+............................................+++.............
+	// .....]..+88+...........................................+++..............
+	// .....].+888............................................+++..............
+	// ....888888............................................+++...............
+	// ....88888............................................++++...............
+	// ....+++.................................................................
+	// .....]..................................................................
+}
