I would like to create a blind color test similar to the one below using ggplot.

The main idea is to use geom_hex as a starting point (or, possibly, a voronoi diagram or, possibly, even circles, as in the figure above), and define a data frame that, when built in ggplot, creates an image.
Let's start by creating a dataset, for example:
df <- data.frame(x = rnorm(10000), y = rnorm(10000))
then build this:
ggplot(df, aes(x, y)) + geom_hex() + coord_equal() + scale_fill_gradient(low = "red", high = "green", guide = FALSE) + theme_void()
which gives the image below:

The main missing step is to create a dataset that actually displays a meaningful character (letter or number), and I'm not sure how best to do this without carefully matching the coordinates. Ideally, you could read the coordinates, possibly from an image file.
Finally, you can remove a little around the edges of the plot, removing distant points.
All suggestions are welcome!
EDIT
Going closer to what I need, we can use the image below the letter "e":

Using the imager package, we can read this and convert it to a data framework:
img <- imager::load.image("e.png") df <- as.data.frame(img)
then build this data file with geom_raster :
ggplot(df, aes(x, y)) + geom_raster(aes(fill = value)) + coord_equal() + scale_y_continuous(trans = scales::reverse_trans()) + scale_fill_gradient(low = "red", high = "green", guide = FALSE) + theme_void()

If we use geom_hex instead of geom_raster , we can get the following graph:
ggplot(df %>% filter(value %in% 1), aes(x, y)) + geom_hex() + coord_equal() + scale_y_continuous(trans = scales::reverse_trans()) + scale_fill_gradient(low = "red", high = "green", guide = FALSE) + theme_void()

so get there, but obviously still far away ...