Favicon generator for Python 3 with strongly typed sync & async APIs, CLI, & HTML generation.
Project description
Favicons
Favicon generator for Python 3 with strongly typed sync & async APIs, CLI, & HTML generation.
Installation
pip3 install favicons
Documentation
More docs are coming. Remember, this is a work in progress.
Supported Formats
- SVG
- PNG
- JPEG
- TIFF
CLI
$ favicons --help
Usage: favicons [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
generate Generate Favicons
html Get favicons as HTML.
json Get favicons as JSON.
names Get favicon file names.
generate
Generate Favicons from the command line:
Usage: favicons generate [OPTIONS]
Generate Favicons
Options:
--source PATH Source Image [required]
--output-directory PATH Output Directory [required]
--background-color TEXT Background Color [default: #000000]
--transparent / --no-transparent Transparent Background [default: True]
--base-url TEXT Base URL for HTML output [default: /]
--help Show this message and exit.
html
Generate HTML elements (same options as generate
).
json
Generate JSON array of favicon objects (same options as generate
).
names
Generate list of favicon file names (same options as generate
).
Python Sync API
from favicons import Favicons
YOUR_ICON = "/home/user/icon.jpg"
WEB_SERVER_ROOT = "/var/www/html"
with Favicons(YOUR_ICON, WEB_SERVER_ROOT) as favicons:
favicons.generate()
for icon in favicons.filenames():
print(icon)
# favicon.ico
# favicon-16x16.png
# favicon-32x32.png
# favicon-64x64.png
# favicon-96x96.png
# favicon-180x180.png
# apple-touch-icon-57x57.png
# apple-touch-icon-60x60.png
# apple-touch-icon-72x72.png
# apple-touch-icon-76x76.png
# apple-touch-icon-114x114.png
# apple-touch-icon-120x120.png
# apple-touch-icon-144x144.png
# apple-touch-icon-152x152.png
# apple-touch-icon-167x167.png
# apple-touch-icon-180x180.png
# mstile-70x70.png
# mstile-270x270.png
# mstile-310x310.png
# mstile-310x150.png
# favicon-196x196.png
Python Async API
from favicons import Favicons
YOUR_ICON = "/home/user/icon.jpg"
WEB_SERVER_ROOT = "/var/www/html"
async with Favicons(YOUR_ICON, WEB_SERVER_ROOT) as favicons:
await favicons.generate()
for icon in favicons.filenames():
print(icon)
# favicon.ico
# favicon-16x16.png
# favicon-32x32.png
# favicon-64x64.png
# favicon-96x96.png
# favicon-180x180.png
# apple-touch-icon-57x57.png
# apple-touch-icon-60x60.png
# apple-touch-icon-72x72.png
# apple-touch-icon-76x76.png
# apple-touch-icon-114x114.png
# apple-touch-icon-120x120.png
# apple-touch-icon-144x144.png
# apple-touch-icon-152x152.png
# apple-touch-icon-167x167.png
# apple-touch-icon-180x180.png
# mstile-70x70.png
# mstile-270x270.png
# mstile-310x310.png
# mstile-310x150.png
# favicon-196x196.png
HTML
Get HTML elements for each generated favicon:
from favicons import Favicons
YOUR_ICON = "/home/user/icon.jpg"
WEB_SERVER_ROOT = "/var/www/html"
async with Favicons(YOUR_ICON, WEB_SERVER_ROOT) as favicons:
await favicons.generate()
# As generator
html = favicons.html_gen()
# As tuple
html = favicons.html()
print(html)
# (
# '<link rel="None" type="image/ico" href="/favicon.ico" />',
# '<link rel="icon" type="image/png" href="/favicon-16x16.png" />',
# '<link rel="icon" type="image/png" href="/favicon-32x32.png" />',
# '<link rel="icon" type="image/png" href="/favicon-64x64.png" />',
# '<link rel="icon" type="image/png" href="/favicon-96x96.png" />',
# '<link rel="icon" type="image/png" href="/favicon-180x180.png" />',
# '<link rel="apple-touch-icon" type="image/png" '
# 'href="/apple-touch-icon-57x57.png" />',
# '<link rel="apple-touch-icon" type="image/png" '
# 'href="/apple-touch-icon-60x60.png" />',
# '<link rel="apple-touch-icon" type="image/png" '
# 'href="/apple-touch-icon-72x72.png" />',
# '<link rel="apple-touch-icon" type="image/png" '
# 'href="/apple-touch-icon-76x76.png" />',
# '<link rel="apple-touch-icon" type="image/png" '
# 'href="/apple-touch-icon-114x114.png" />',
# '<link rel="apple-touch-icon" type="image/png" '
# 'href="/apple-touch-icon-120x120.png" />',
# '<link rel="apple-touch-icon" type="image/png" '
# 'href="/apple-touch-icon-144x144.png" />',
# '<link rel="apple-touch-icon" type="image/png" '
# 'href="/apple-touch-icon-152x152.png" />',
# '<link rel="apple-touch-icon" type="image/png" '
# 'href="/apple-touch-icon-167x167.png" />',
# '<link rel="apple-touch-icon" type="image/png" '
# 'href="/apple-touch-icon-180x180.png" />',
# '<link rel="None" type="image/png" href="/mstile-70x70.png" />',
# '<link rel="None" type="image/png" href="/mstile-270x270.png" />',
# '<link rel="None" type="image/png" href="/mstile-310x310.png" />',
# '<link rel="None" type="image/png" href="/mstile-310x150.png" />',
# '<link rel="shortcut icon" type="image/png" href="/favicon-196x196.png" />'
# )
Tuple
Get a Python tuple containing each generated favicon's properties:
from favicons import Favicons
YOUR_ICON = "/home/user/icon.jpg"
WEB_SERVER_ROOT = "/var/www/html"
async with Favicons(YOUR_ICON, WEB_SERVER_ROOT) as favicons:
await favicons.generate()
as_tuple = favicons.formats()
print(as_tuple)
# (
# {
# 'dimensions': (64, 64),
# 'image_format': 'ico',
# 'prefix': 'favicon',
# 'rel': None
# },
# {
# 'dimensions': (16, 16),
# 'image_format': 'png',
# 'prefix': 'favicon',
# 'rel': 'icon'
# },
# {
# 'dimensions': (32, 32),
# 'image_format': 'png',
# 'prefix': 'favicon',
# 'rel': 'icon'
# },
# {
# 'dimensions': (64, 64),
# 'image_format': 'png',
# 'prefix': 'favicon',
# 'rel': 'icon'
# },
# {
# 'dimensions': (96, 96),
# 'image_format': 'png',
# 'prefix': 'favicon',
# 'rel': 'icon'
# },
# {
# 'dimensions': (180, 180),
# 'image_format': 'png',
# 'prefix': 'favicon',
# 'rel': 'icon'
# },
# {
# 'dimensions': (57, 57),
# 'image_format': 'png',
# 'prefix': 'apple-touch-icon',
# 'rel': 'apple-touch-icon'
# },
# {
# 'dimensions': (60, 60),
# 'image_format': 'png',
# 'prefix': 'apple-touch-icon',
# 'rel': 'apple-touch-icon'
# },
# {
# 'dimensions': (72, 72),
# 'image_format': 'png',
# 'prefix': 'apple-touch-icon',
# 'rel': 'apple-touch-icon'
# },
# {
# 'dimensions': (76, 76),
# 'image_format': 'png',
# 'prefix': 'apple-touch-icon',
# 'rel': 'apple-touch-icon'
# },
# {
# 'dimensions': (114, 114),
# 'image_format': 'png',
# 'prefix': 'apple-touch-icon',
# 'rel': 'apple-touch-icon'
# },
# {
# 'dimensions': (120, 120),
# 'image_format': 'png',
# 'prefix': 'apple-touch-icon',
# 'rel': 'apple-touch-icon'
# },
# {
# 'dimensions': (144, 144),
# 'image_format': 'png',
# 'prefix': 'apple-touch-icon',
# 'rel': 'apple-touch-icon'
# },
# {
# 'dimensions': (152, 152),
# 'image_format': 'png',
# 'prefix': 'apple-touch-icon',
# 'rel': 'apple-touch-icon'
# },
# {
# 'dimensions': (167, 167),
# 'image_format': 'png',
# 'prefix': 'apple-touch-icon',
# 'rel': 'apple-touch-icon'
# },
# {
# 'dimensions': (180, 180),
# 'image_format': 'png',
# 'prefix': 'apple-touch-icon',
# 'rel': 'apple-touch-icon'
# },
# {
# 'dimensions': (70, 70),
# 'image_format': 'png',
# 'prefix': 'mstile',
# 'rel': None
# },
# {
# 'dimensions': (270, 270),
# 'image_format': 'png',
# 'prefix': 'mstile',
# 'rel': None
# },
# {
# 'dimensions': (310, 310),
# 'image_format': 'png',
# 'prefix': 'mstile',
# 'rel': None
# },
# {
# 'dimensions': (310, 150),
# 'image_format': 'png',
# 'prefix': 'mstile',
# 'rel': None
# },
# {
# 'dimensions': (196, 196),
# 'image_format': 'png',
# 'prefix': 'favicon',
# 'rel': 'shortcut icon'
# }
# )
JSON
Get a JSON array containing each generated favicon's properties:
from favicons import Favicons
YOUR_ICON = "/home/user/icon.jpg"
WEB_SERVER_ROOT = "/var/www/html"
async with Favicons(YOUR_ICON, WEB_SERVER_ROOT) as favicons:
await favicons.generate()
as_json = favicons.json(indent=2)
print(as_json)
# [
# {
# "image_format": "ico",
# "dimensions": [
# 64,
# 64
# ],
# "prefix": "favicon",
# "rel": null
# },
# {
# "image_format": "png",
# "dimensions": [
# 16,
# 16
# ],
# "prefix": "favicon",
# "rel": "icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 32,
# 32
# ],
# "prefix": "favicon",
# "rel": "icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 64,
# 64
# ],
# "prefix": "favicon",
# "rel": "icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 96,
# 96
# ],
# "prefix": "favicon",
# "rel": "icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 180,
# 180
# ],
# "prefix": "favicon",
# "rel": "icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 57,
# 57
# ],
# "prefix": "apple-touch-icon",
# "rel": "apple-touch-icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 60,
# 60
# ],
# "prefix": "apple-touch-icon",
# "rel": "apple-touch-icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 72,
# 72
# ],
# "prefix": "apple-touch-icon",
# "rel": "apple-touch-icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 76,
# 76
# ],
# "prefix": "apple-touch-icon",
# "rel": "apple-touch-icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 114,
# 114
# ],
# "prefix": "apple-touch-icon",
# "rel": "apple-touch-icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 120,
# 120
# ],
# "prefix": "apple-touch-icon",
# "rel": "apple-touch-icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 144,
# 144
# ],
# "prefix": "apple-touch-icon",
# "rel": "apple-touch-icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 152,
# 152
# ],
# "prefix": "apple-touch-icon",
# "rel": "apple-touch-icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 167,
# 167
# ],
# "prefix": "apple-touch-icon",
# "rel": "apple-touch-icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 180,
# 180
# ],
# "prefix": "apple-touch-icon",
# "rel": "apple-touch-icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 70,
# 70
# ],
# "prefix": "mstile",
# "rel": null
# },
# {
# "image_format": "png",
# "dimensions": [
# 270,
# 270
# ],
# "prefix": "mstile",
# "rel": null
# },
# {
# "image_format": "png",
# "dimensions": [
# 310,
# 310
# ],
# "prefix": "mstile",
# "rel": null
# },
# {
# "image_format": "png",
# "dimensions": [
# 310,
# 150
# ],
# "prefix": "mstile",
# "rel": null
# },
# {
# "image_format": "png",
# "dimensions": [
# 196,
# 196
# ],
# "prefix": "favicon",
# "rel": "shortcut icon"
# }
# ]
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file favicons-0.2.2.tar.gz
.
File metadata
- Download URL: favicons-0.2.2.tar.gz
- Upload date:
- Size: 12.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.12.2 Linux/6.2.0-1019-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 57749e6b3145b485d9ea9b6239dc679fbc00d092a873545c018c03597abce1c9 |
|
MD5 | 7c3de2eb075a36a99a195a8401c2ac17 |
|
BLAKE2b-256 | 8b676f701e807ca31d76b63fd2ff90d6c1a0f2ead70b59dd031d34a47ae6a071 |
File details
Details for the file favicons-0.2.2-py3-none-any.whl
.
File metadata
- Download URL: favicons-0.2.2-py3-none-any.whl
- Upload date:
- Size: 13.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.12.2 Linux/6.2.0-1019-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b94fb2312ed33afb65873d04a0354d70a45f99207e78fa59d68ba64c37e368d4 |
|
MD5 | 468b3fe135e8b651c1b528aa1811a1d8 |
|
BLAKE2b-256 | 071fb1e89aee2260f9dfd31a60b78ee048a098af05fed83a0d2161a17897e74c |