Skip to main content

Fast and high quality Font Awesome icon to image renderer

Project description

Icon to Image

Crates.io | PyPI

A high-performance Rust library with Python bindings for rendering Font Awesome icons to images, with all the customizations you may want. This library natively includes the icons from Font Awesome 7.1.0 Free (solid, regular and brands).

Features:

  • Extremely fast icon rendering (~10ms for a 512x512 image)
  • Python bindings via PyO3
  • No Python dependencies: Pillow is optional only if using as an image object
  • Supersampling for high-quality antialiased output (2x by default)
  • PNG and WebP output formats, including transparency
  • Customizable icon and background colors (hex and RGB/RGBA)
  • Flexible icon positioning in large canvases with anchors and offsets
  • Command-line interface for both Rust and Python

Disclosure: This library was mostly coded with the assistance of Claude 4.5 Opus. However, I personally have reviewed all code to ensure it is accurate, have added numerous tests and demo examples to ensure it works as both intended and advertised, and have edited documentation and comments to provide greater signal as to how the package operates. I have given this project the same care and attention as I would give a project I have written from scratch.

Installation

Python

pip install icon-to-image
uv pip install icon-to-image

Rust

cargo install icon-to-image

Or, add to your Cargo.toml:

[dependencies]
icon-to-image = "0.1.6"

Command-Line Interface

Both the Rust binary and Python package provide a CLI for rendering icons.

Basic Usage

The list of included icons can be found on Font Awesome's Icon Grid and filtering to "Free" icons. The icon names do not use the fa prefix.

# View CLI documentation
icon-to-image --help

# Render a heart icon to PNG
icon-to-image heart heart.png

# Render with custom color and size
icon-to-image star star.png --color "#FFD700" --size 256

# Render with transparent background
icon-to-image github logo.png --color "#333333" --background transparent

# Output as WebP
icon-to-image rocket rocket.webp --color "#FF6B35"

# Render with rotation (45 degrees clockwise)
icon-to-image arrow-right rotated.png --rotate 45

List and Search Icons

# List all available icons
icon-to-image list

# Search for icons matching a pattern
icon-to-image search arrow

Rust Usage

See the documentation on docs.rs.

Python Usage

See also the demo Jupyter Notebook for more interactive examples.

Basic Rendering

To use render_icon(), you will also need to have Pillow installed.

from icon_to_image import IconRenderer

renderer = IconRenderer()

# Render a heart icon with default settings (512x512, solid weight, black on white)
# render_icon() returns a PIL.Image directly
img = renderer.render_icon("heart")
img.save("heart.png")

Custom Colors

# Red heart on default white background
red_heart = renderer.render_icon(
    "heart",
    icon_color="#FF0000",
)

# Blue star on yellow background
blue_star = renderer.render_icon(
    "star",
    icon_color="#0066CC",
    background_color="#FFD700",
)

# Semitransparent gray ghost on transparent background
gray_ghost = renderer.render_icon(
    "ghost",
    icon_color=(128, 128, 128, 128),
    background_color=None,
)

Brand Icons

github = renderer.render_icon("github", icon_color="#333333")
python = renderer.render_icon("python", icon_color="#3776AB")

Custom Sizes

# Small icon with padding (128px icon on 256px canvas)
small = renderer.render_icon(
    "rocket",
    canvas_width=256,
    canvas_height=256,
    icon_size=128,
    icon_color="#FF6B35",
)

Icon Positioning

# Position icon at bottom-right with padding
badge = renderer.render_icon(
    "check",
    canvas_width=256,
    canvas_height=256,
    icon_size=48,
    horizontal_anchor="right",
    vertical_anchor="bottom",
    offset_x=-16,
    offset_y=-16,
    icon_color="#4CAF50",
    background_color="#E8F5E9",
)

Icon Rotation

# Rotate an arrow 45 degrees clockwise
rotated = renderer.render_icon(
    "arrow-right",
    rotate=45,  # Positive = clockwise
    icon_color="#E91E63",
)

# Rotate counter-clockwise
rotated_ccw = renderer.render_icon(
    "egg",
    rotate=-30,  # Negative = counter-clockwise
    icon_color="#2196F3",
)

Font Styles

Some Font Awesome icons have different styles. You can explicitly specify which style to use:

# Solid style (filled) - default for most icons
solid_heart = renderer.render_icon("heart", style="solid")

# Regular style (outlined)
regular_heart = renderer.render_icon("heart", style="regular")

render_icon() and render_icon_bytes()

render_icon() returns a PIL.Image directly. render_icon_bytes() returns raw encoded bytes (PNG or WebP) without requiring Pillow, which can be useful for tasks such as APIs.

# render_icon() returns PIL.Image (requires Pillow)
img = renderer.render_icon("heart", icon_color="#FF0000")
img.save("heart.png")  # Use PIL's save method

# render_icon_bytes() returns raw bytes (no Pillow needed)
png_data = renderer.render_icon_bytes("heart", icon_color="#FF0000")
with open("heart.png", "wb") as f:
    f.write(png_data)

# render_icon_bytes() supports output format selection
webp_data = renderer.render_icon_bytes("heart", output_format="webp")

Save Directly to File

The save_icon() method writes the image to disk directly from Rust for maximum performance.

renderer.save_icon("check-circle", "check.png", icon_color="#4CAF50")
renderer.save_icon("times-circle", "times.webp", icon_color="#F44336")

Query Available Icons

# Get total icon count
print(f"Total icons: {renderer.icon_count()}")

# List all icons
all_icons = renderer.list_icons()

# Search for specific icons
arrow_icons = [name for name in all_icons if "arrow" in name]

# Check if an icon exists
if renderer.has_icon("heart"):
    print("Heart icon is available")

Rust Usage

use icon_to_image::{IconRenderer, RenderConfig, Color, ImageFormat, encode};

fn main() -> Result<(), icon_to_image::IconFontError> {
    // Use embedded assets
    let renderer = IconRenderer::new()?;

    let config = RenderConfig::new()
        .canvas_size(1024, 1024)
        .icon_size(800)
        .icon_color(Color::from_hex("#FF5733")?)
        .background_color(Color::transparent());

    let (width, height, pixels) = renderer.render("heart", &config)?;
    let png_data = encode(&pixels, width, height, ImageFormat::Png)?;
    std::fs::write("heart.png", png_data)?;

    Ok(())
}

API Reference

Python

Parameters

Applies to both render_icon() and render_icon_bytes():

Parameter Type Default Description
name str required Icon name
canvas_width int 512 Output width in pixels
canvas_height int 512 Output height in pixels
icon_size int 95% of canvas Icon size in pixels
supersample int 2 Antialiasing factor (1, 2, or 4)
icon_color str/tuple "#000000" Hex or RGB(A) tuple
background_color str/tuple/None "#FFFFFF" Hex, RGB(A), or None
horizontal_anchor str "center" "left", "center", "right"
vertical_anchor str "center" "top", "center", "bottom"
offset_x int 0 Horizontal offset in pixels
offset_y int 0 Vertical offset in pixels
rotate float 0 Rotation in degrees (+ = clockwise)
style str/None None "solid", "regular", or "brands"

Notes

  • This project is a recreation of my four year old Python project, icon-image. However, there were several issues with that project: the generations are slow, the generated icons were annoyingly aliased, and the Pillow code was a mess and prone to breaking. Therefore, I looked to Rust with Python bindings as it addressed all of the above issues: Claude 4.5 Opus handled them all easily. Normally this type of bespoke project would be kept as private personal project as I have a specific need for this workflow for a certain upcoming project, but Claude's generated code was good enough such that it wasn't a huge lift to polish it for public release.
  • Normally I would use fontdue for rendering the glyphs as it's more performant, however fontdue does not have the ability to render curves which is very important for most icons.
  • This library technically supports using provided Font Awesome files (e.g. the Pro variants) but I do not have access to Pro for testing.

License

MIT

Font Awesome CSS included per its MIT License.

Font Awesome font files included per their SIL Open Font 1.1 License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

icon_to_image-0.1.6-cp314-cp314-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.14Windows x86-64

icon_to_image-0.1.6-cp314-cp314-manylinux_2_34_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.34+ x86-64

icon_to_image-0.1.6-cp314-cp314-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

icon_to_image-0.1.6-cp313-cp313-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.13Windows x86-64

icon_to_image-0.1.6-cp313-cp313-manylinux_2_34_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

icon_to_image-0.1.6-cp313-cp313-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

icon_to_image-0.1.6-cp312-cp312-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.12Windows x86-64

icon_to_image-0.1.6-cp312-cp312-manylinux_2_34_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

icon_to_image-0.1.6-cp312-cp312-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

icon_to_image-0.1.6-cp311-cp311-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.11Windows x86-64

icon_to_image-0.1.6-cp311-cp311-manylinux_2_34_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

icon_to_image-0.1.6-cp311-cp311-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

icon_to_image-0.1.6-cp310-cp310-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.10Windows x86-64

icon_to_image-0.1.6-cp310-cp310-manylinux_2_34_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

icon_to_image-0.1.6-cp310-cp310-macosx_11_0_arm64.whl (1.1 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file icon_to_image-0.1.6-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for icon_to_image-0.1.6-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 d32e747c34979323ca75deae5aa7da7f34492b48b98d7977df0fc7ffbde0bf4d
MD5 02ef86f6ab54bd8433b398223656bed1
BLAKE2b-256 404233a4162f137c9d01194c8ee3c242f3576871b39a93857457993b541ae947

See more details on using hashes here.

File details

Details for the file icon_to_image-0.1.6-cp314-cp314-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for icon_to_image-0.1.6-cp314-cp314-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 068bebe43e629f9742bfd4b8de55fca4daf1faf836ceee687d524887ea380157
MD5 8f1a4a323338e93d7414c9656c26d663
BLAKE2b-256 7e92d74f34476702081de94754b52e349f846dc647a55f52252e0695274585ce

See more details on using hashes here.

File details

Details for the file icon_to_image-0.1.6-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for icon_to_image-0.1.6-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d6b4f426c8a58efaf1746fa1184fd94abaed78abd16701cca5ab8396bb6e9c22
MD5 75b760c8c0ba44a85b1c1d8da3865c1b
BLAKE2b-256 fe9c9784f906c748798ca89842341ba750bc0bdbbc302cda36e863197b74245d

See more details on using hashes here.

File details

Details for the file icon_to_image-0.1.6-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for icon_to_image-0.1.6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 1e1cb86f3c3bcc406af4cfed7e8209dd131dd19eb9e798a5c093521b3460ea17
MD5 cf03522553186e77722c4fe8d058743e
BLAKE2b-256 0d1c576ed374b2748e0356d8b0ee5552df3056c8813a2dce3ba6eb72e2d8dd0f

See more details on using hashes here.

File details

Details for the file icon_to_image-0.1.6-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for icon_to_image-0.1.6-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 423e59d696d07f798de9890821976fe5cae4538101195bd6d46257e4f21fa9ba
MD5 abdbb4ade8b4b6fda2ab055ad17c63ce
BLAKE2b-256 00c337568e6b01bdf37c3b9ca7dd152c95f5161e7c2f6bcb84ede206ad4f11dc

See more details on using hashes here.

File details

Details for the file icon_to_image-0.1.6-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for icon_to_image-0.1.6-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2e6e0b33a5d891651eff96c21ed895d21513e5b1ff021a671648fa3e36570f34
MD5 271185233e1a050b5b18a3b3b9af9789
BLAKE2b-256 6cb729a4c748669692768fed8674395ab4da76d6c43b8486239da6394ac1a0a2

See more details on using hashes here.

File details

Details for the file icon_to_image-0.1.6-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for icon_to_image-0.1.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 8b8828f2e8c77fbee88949c78ccaa61cc7e45ca00d174e8d523633712aeaf3d6
MD5 bddb28a7544b172197730dff04b1fe94
BLAKE2b-256 c62e5e0666dea63a1e3e3c6c22408c02f76d71cdb66783751e4ce525f6e2abfb

See more details on using hashes here.

File details

Details for the file icon_to_image-0.1.6-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for icon_to_image-0.1.6-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 76f2218879efcde44c7cdef906cbe0638726248f8ec50672fa58ee73b26f0d40
MD5 7257cbfcb3d73a2ef3d63c0cd3d272e2
BLAKE2b-256 6f63339c8e600c6f5986134b01a87d5004edc6e07fe5ab5ee8a1bda15d2b9243

See more details on using hashes here.

File details

Details for the file icon_to_image-0.1.6-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for icon_to_image-0.1.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 78092e8851b5099af81216b6a37c06a94b29acc2b728b11541d07091dd28bfd7
MD5 5390dd0eb9102394b2c8381883fd83ac
BLAKE2b-256 6d33232e735f23edb918901b67990562eb4734a07f155ae87783d483ba4b5ab6

See more details on using hashes here.

File details

Details for the file icon_to_image-0.1.6-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for icon_to_image-0.1.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 95221f2468c8454cc9a8a3e4bd84408c75c414269b91b3a3cb6d0072ddb23b9b
MD5 6f3bb71831c58f700547769852d048d7
BLAKE2b-256 ab567140efc46ffb55953a907a17d867c92082c17b8a25110188e97f1988f819

See more details on using hashes here.

File details

Details for the file icon_to_image-0.1.6-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for icon_to_image-0.1.6-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 06598b183e2c3a8b9761f3a5e74fd59a61dc4d722144de2c2e53819fbbbcb0fb
MD5 fa9e59ac9117c70a62a7d0f54a8658b9
BLAKE2b-256 42d75fb90bf2c40d91613cca1e60977f16760bdc12ca7daf15ff1559b666becb

See more details on using hashes here.

File details

Details for the file icon_to_image-0.1.6-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for icon_to_image-0.1.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c1265c87003ce750dcabb83b367ea15990fd14691ca358294d3ef3d529d60f14
MD5 2e3fe180bfaa03d581f974aa0e3a42ba
BLAKE2b-256 83365a4c13390246145f86c4a1ec790043c3e30219bc09695ffd52ea3ee4858d

See more details on using hashes here.

File details

Details for the file icon_to_image-0.1.6-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for icon_to_image-0.1.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d6e98ef4ea9c495493311994e9d0388aef053e1331c05710dddfa250cb80bb7c
MD5 1f72f579e3ffd0ee16294f94d0d8feb3
BLAKE2b-256 3383352b3a5c21279c99bc2fe9ab15c1f0738b50e3cb1d8d351f87ccea745cbe

See more details on using hashes here.

File details

Details for the file icon_to_image-0.1.6-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for icon_to_image-0.1.6-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 ddbc75612dc1b520f0d5af2596b54f60105d77c80147394d01765c566028d8a0
MD5 8f2ac0ca9b5ec2f7e9e9de97473bb9c2
BLAKE2b-256 3541d373dcee414da1636ca247c04c149e429ff239919d8b7dfab3d71f265bfd

See more details on using hashes here.

File details

Details for the file icon_to_image-0.1.6-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for icon_to_image-0.1.6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 99aa8848d24736a384733e0649a29b15bc1309569bd07d9a212851648444afd3
MD5 ec837ba7f621bd4099477f96cfa1daf5
BLAKE2b-256 cd5f27cbbd85f0e0676abdfe15eb9197da821f60fec4df589b4daba232032efa

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page