WCAG 1.4.5 · Level AA · EN 301 549 9.1.4.5

Images of Text

Requires real text instead of images of text to present information, except where the text can be customized or the image is essential, such as a logotype.

In brief

Text in an image cannot be enlarged without becoming blurry, cannot change color to suit a user's contrast needs, cannot be translated, selected or searched, and does not reflow. For people with low vision it is one of the biggest barriers.

This criterion requires that if the technologies in use can produce the visual presentation, real text is used to convey information instead of images of text. There are two exceptions: images of text that can be customized by the user, and images of text that are essential, such as a logotype.

What does it cover?

  • Where it applies: Banners, headings, buttons, navigation items, infographics, charts with text and promotional images that contain words.
  • How to fix it: Use HTML and CSS text, web fonts, and SVG or CSS effects to get the look you want.
  • Customizable: If the user can change the size, the color and the font of the image text, the exception applies.
  • Essential: A logotype (text that is part of a brand or a logo) and cases where a particular presentation of text is essential to the information, such as a typeface sample.
  • Alternative text: Where an image of text remains, its alternative must contain the same text. See 1.1.1.
  • Out of scope: Contrast of text, including in images, is covered by 1.4.3. Text spacing and reflow are covered by 1.4.10 and 1.4.12.

Who does it affect?

People with low vision, who cannot enlarge an image of text without losing sharpness. People with dyslexia or other reading differences who change the font or the color. People who use high contrast modes, translation tools or text-to-speech. Everyone who wants to search, copy or select text.

In the EAA and EN 301 549

The European Accessibility Act (Directive (EU) 2019/882) applies to in-scope products and services placed on the market after 28 June 2025. Recital 47 names four principles for websites and mobile applications: perceivable, operable, understandable and robust. Real text is part of "perceivable" and "robust".

The technical counterpart is the standard EN 301 549, which incorporates WCAG 1.4.5 by reference and turns it into separate clauses for each kind of ICT.

Where WCAG 1.4.5 appears in EN 301 549
ClauseType of ICTWhat it requires
9.1.4.5Web pagesWeb content must satisfy WCAG success criterion 1.4.5.
11.1.4.5Non-web software (native mobile apps)Software must use real text instead of images of text, except where essential.

Whether and how the criterion applies to non-web documents is stated in clause 10 of the standard. Clause numbers follow the "9. + WCAG number" pattern of EN 301 549. In V3.2.1 the software clause is divided into further subclauses for open and closed functionality. Check the exact numbers in the standard when you cite them.

Standard version: EN 301 549 V4.1.1 (September 2026) is based on WCAG 2.2 and is the first version prepared specifically for the EAA. It has not yet been cited in the Official Journal of the European Union, so for now it is best treated as a voluntary technical route to the EAA's requirements. Once cited, it will give a presumption of conformity. The text of criterion 1.4.5 is the same in WCAG 2.1 and 2.2. It is a Level AA criterion.

A note on EAA scope: Article 2(4) of the Directive excludes certain content from the requirements, for example office file formats published before 28 June 2025 and archives that are not updated after that date. Content you publish or change after that date is not covered by these exclusions.

Directive (EU) 2019/882, EUR-Lex, opens in a new tab

Code examples for the web

1. A banner with text

Text in a banner image is blurry when enlarged and cannot be translated. Use a background image and real text on top of it.

Incorrect
<img src="spring-sale-banner.png" alt="Spring sale, 20% off">
Correct
<div class="banner">
  <h2>Spring sale</h2>
  <p>20% off until Friday</p>
</div>

.banner {
  background: url("spring-bg.jpg") center / cover;
  color: #ffffff;
}

2. Headings as images

A heading in an image is not a heading for a screen reader.

Incorrect
<img src="about-us-title.png" alt="About us">
Correct
<h1>About us</h1>

3. Buttons as images

A button should be text, so it can be enlarged and recolored.

Incorrect
<a href="/buy"><img src="buy-now-button.png" alt="Buy now"></a>
Correct
<a class="btn" href="/buy">Buy now</a>

.btn {
  background: #2e7d32;
  color: #ffffff;
  padding: 12px 20px;
  border-radius: 8px;
}

4. Special fonts

Use web fonts, not images, to get a particular typeface.

Incorrect
<img src="tagline-fancy-font.png" alt="Accessibility for everyone">
Correct
@font-face {
  font-family: "BrandSans";
  src: url("brand-sans.woff2") format("woff2");
  font-display: swap;
}
.tagline { font-family: "BrandSans", sans-serif; }

5. Effects with CSS or SVG

Shadows, gradients and outlines can be done with CSS, and decorative shapes with SVG, while the text stays real.

Incorrect
<img src="title-with-shadow.png" alt="Summer">
Correct
.title {
  font-size: 3rem;
  text-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
}

6. When an image of text is essential

A logotype can remain an image. Give it the brand name as its alternative text.

Incorrect
<img src="logo.png" alt="logo">
Correct
<img src="logo.png" alt="Corpowid">

Code examples for mobile

The same rule applies in native mobile apps. Use text views with custom fonts instead of images that contain text, so the text follows the system text size.

iOS (SwiftUI)

import SwiftUI

struct PromoHeader: View {
    var body: some View {
        // Avoid: an image that contains the text
        // Image("promo-banner")

        // Use real text, with a custom font that scales
        VStack(alignment: .leading, spacing: 4) {
            Text("Spring sale")
                .font(.custom("BrandSans-Bold", size: 28, relativeTo: .title))
            Text("20% off until Friday")
                .font(.body)
        }
        .padding()
        .background(Color("PromoBackground"))
    }
}

Android (Jetpack Compose)

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.font.Font
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.unit.dp

val BrandSans = FontFamily(Font(R.font.brand_sans_bold)) // Your font resource

@Composable
fun PromoHeader() {
    // Avoid: an Image that contains the text
    Column(
        modifier = Modifier
            .background(Color(0xFF2E7D32))
            .padding(16.dp)
    ) {
        Text(
            text = "Spring sale",
            fontFamily = BrandSans,
            style = MaterialTheme.typography.headlineSmall,
            color = Color.White
        )
        Text("20% off until Friday", color = Color.White)
    }
}

How to test

  • Find the images that contain words: Check banners, headings, buttons, navigation, infographics and promotional images. Can you select the text with the mouse?
  • Zoom to 200 percent: Is the text in images blurry or pixelated? Real text stays sharp.
  • Check the code: Do img elements, CSS backgrounds and SVG images carry text? Is the text duplicated in the alternative?
  • Try to customize: Change the font and the colors with a browser extension or the high contrast mode. Does the text in images change? Real text does.
  • Check the exceptions: Is each remaining image of text a logotype or truly essential?
  • Check mobile: Does text in the app follow the system text size? Are there images that contain text?
  • Use a checker as a start: Automated tools cannot see words inside an image. Only a person can find them.

Common mistakes

  • Banners with the headline inside the image: The most common failure.
  • Using images of text for a special font: Use web fonts.
  • Using an image of text for effects: CSS can do shadows and gradients.
  • Buttons made from images: They cannot be enlarged or recolored.
  • Writing the text only in the alt attribute: It does not fix the image problem for sighted users.
  • Charts with text in pixels: Use SVG or real text for labels.
  • Calling anything a logo: Only text that is part of a logo or brand name is covered by the exception.
  • Forgetting emails and newsletters: Images that contain all the text are a problem there as well.

Sources

Standard version: EN 301 549 V4.1.1 (2026-09), WCAG 2.2. This page is for informational purposes only and is not legal advice. For binding requirements, refer to the official texts of the European Accessibility Act (Directive (EU) 2019/882) and EN 301 549.

Corpowid is recognized by Gartner

Corpowid has been recognized by Gartner, a leading global research and advisory firm, for our innovation and performance in digital accessibility. These badges reflect our commitment to creating inclusive, AI-powered web experiences.

Have questions about Corpowid?

Let’s connect.

We will get back to you as soon as possible.