add multisize favicon and apple files automatically
This commit is contained in:
parent
d45933782e
commit
46f71a9f4a
4 changed files with 79 additions and 1 deletions
|
@ -30,6 +30,8 @@ INDEX_PROJECTS = links.index_projects()
|
||||||
# Extra config
|
# Extra config
|
||||||
REPO = Repo(search_parent_directories=True)
|
REPO = Repo(search_parent_directories=True)
|
||||||
BUILD_PRODUCTION = 'BUILD_PRODUCTION' in os.environ
|
BUILD_PRODUCTION = 'BUILD_PRODUCTION' in os.environ
|
||||||
|
import image_resizer
|
||||||
|
META_IMAGES = image_resizer.generate()
|
||||||
|
|
||||||
# Disable some pages
|
# Disable some pages
|
||||||
TAG_URL = False
|
TAG_URL = False
|
||||||
|
|
69
plugins/image_resizer.py
Normal file
69
plugins/image_resizer.py
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
import os
|
||||||
|
from PIL import Image
|
||||||
|
from resizeimage import resizeimage
|
||||||
|
|
||||||
|
OUTPUT_DIR = os.path.realpath('theme/static/build/img')
|
||||||
|
ORIGINAL_IMAGE_PATH = os.path.realpath('content/assets/img/logo-transparent.png')
|
||||||
|
|
||||||
|
FAVICON_SIZES = (
|
||||||
|
(16, 16),
|
||||||
|
(32, 32),
|
||||||
|
(96, 96),
|
||||||
|
(128, 128),
|
||||||
|
(196, 196)
|
||||||
|
)
|
||||||
|
|
||||||
|
APPLE_SIZES = (
|
||||||
|
(152, 152),
|
||||||
|
(144, 144),
|
||||||
|
(120, 120),
|
||||||
|
(114, 114),
|
||||||
|
(72, 72),
|
||||||
|
(60, 60),
|
||||||
|
(57, 57)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def merge_dicts(*dict_args):
|
||||||
|
result = {}
|
||||||
|
for dictionary in dict_args:
|
||||||
|
result.update(dictionary)
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def get_size_string(w, h):
|
||||||
|
return "{0}x{1}".format(w, h)
|
||||||
|
|
||||||
|
|
||||||
|
def build_apple_filenames():
|
||||||
|
return {s: "apple-touch-icon-{0}.png".format(get_size_string(*s)) for s in FAVICON_SIZES}
|
||||||
|
|
||||||
|
|
||||||
|
def build_favicon_filenames():
|
||||||
|
return {s: "favicon-{0}.png".format(get_size_string(*s)) for s in APPLE_SIZES}
|
||||||
|
|
||||||
|
|
||||||
|
def get_all_files():
|
||||||
|
favicon_filenames = build_favicon_filenames()
|
||||||
|
apple_filenames = build_apple_filenames()
|
||||||
|
return merge_dicts(favicon_filenames, apple_filenames)
|
||||||
|
|
||||||
|
|
||||||
|
def generate():
|
||||||
|
print("Removing old files...")
|
||||||
|
for size, image_file in get_all_files().items():
|
||||||
|
try:
|
||||||
|
os.remove(os.path.join(OUTPUT_DIR, image_file))
|
||||||
|
except FileNotFoundError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
with open(ORIGINAL_IMAGE_PATH, 'rb') as original_image_file:
|
||||||
|
with Image.open(original_image_file) as original_image:
|
||||||
|
for size, image_name in get_all_files().items():
|
||||||
|
new_image = resizeimage.resize_contain(original_image, size)
|
||||||
|
new_image.save(os.path.join(OUTPUT_DIR, image_name), original_image.format)
|
||||||
|
|
||||||
|
favicon_image_details = [('icon', get_size_string(*size), filename) for size, filename in build_favicon_filenames().items()]
|
||||||
|
apple_image_details = [('apple-touch-icon-precomposed', get_size_string(*size), filename) for size, filename in build_apple_filenames().items()]
|
||||||
|
|
||||||
|
return favicon_image_details + apple_image_details
|
|
@ -7,3 +7,5 @@ git+https://github.com/ryneeverett/python-markdown-comments.git
|
||||||
pelican==3.6.3
|
pelican==3.6.3
|
||||||
pelican-minify==0.9
|
pelican-minify==0.9
|
||||||
pyembed-markdown==1.1.0
|
pyembed-markdown==1.1.0
|
||||||
|
python-resize-image==1.1.3
|
||||||
|
sh==1.11
|
||||||
|
|
|
@ -6,13 +6,18 @@
|
||||||
<meta http-equiv="Content-Language" content="{{ DEFAULT_LANG }}" />
|
<meta http-equiv="Content-Language" content="{{ DEFAULT_LANG }}" />
|
||||||
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width" />
|
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width" />
|
||||||
<link rel="alternate" type="application/atom+xml" href="/{{ FEED_ATOM }}" />
|
<link rel="alternate" type="application/atom+xml" href="/{{ FEED_ATOM }}" />
|
||||||
|
<meta name="application-name" content="{{ SITENAME }}" />
|
||||||
|
<link rel="shortcut icon" href="/static/img/logo-transparent.png" type="image/png" />
|
||||||
|
|
||||||
{% block metadata %}{% endblock %}
|
{% block metadata %}{% endblock %}
|
||||||
|
|
||||||
|
{% for rel, size, filename in META_IMAGES %}
|
||||||
|
<link rel="{{ rel }}" sizes="{{ size }}" href="/static/img/{{ filename }}" />
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
<title>{% block htmltitle %}Page{% endblock %} - {{ SITENAME }}</title>
|
<title>{% block htmltitle %}Page{% endblock %} - {{ SITENAME }}</title>
|
||||||
|
|
||||||
<link rel="stylesheet" href="/static/css/index.css" type="text/css" />
|
<link rel="stylesheet" href="/static/css/index.css" type="text/css" />
|
||||||
<link rel="shortcut icon" href="/static/img/logo-transparent.png" type="image/png" />
|
|
||||||
</head>
|
</head>
|
||||||
<body id="page-top">
|
<body id="page-top">
|
||||||
{% block navbar %}
|
{% block navbar %}
|
||||||
|
|
Reference in a new issue