#!/usr/bin/env python3 """ Делает значок файла проекта из значка программы. Зачем отдельный. Значок программы и значок её файлов — разные вещи: в списке файлов должно быть видно, что это документ, а не сама программа. Поэтому берётся лист с загнутым углом, а знак программы кладётся на него. Запуск: python3 tools/make_file_icon.py Итог: packaging/application-x-nlve-project.png """ from pathlib import Path from PIL import Image, ImageDraw ROOT = Path(__file__).resolve().parent.parent SRC = ROOT / 'packaging' / 'nlve.png' DST = ROOT / 'packaging' / 'application-x-nlve-project.png' SIZE = 128 # Лист занимает не всю клетку: значкам документов принято оставлять поля. MARGIN_X = 16 MARGIN_Y = 6 FOLD = 30 PAPER = (245, 245, 245, 255) FOLD_COLOR = (205, 205, 205, 255) EDGE = (120, 120, 120, 255) def main(): if not SRC.exists(): raise SystemExit(f'нет файла {SRC}') img = Image.new('RGBA', (SIZE, SIZE), (0, 0, 0, 0)) d = ImageDraw.Draw(img) left, right = MARGIN_X, SIZE - MARGIN_X top, bottom = MARGIN_Y, SIZE - MARGIN_Y # Лист с срезанным правым верхним углом. body = [ (left, top), (right - FOLD, top), (right, top + FOLD), (right, bottom), (left, bottom), ] d.polygon(body, fill=PAPER, outline=EDGE) # Сам загнутый угол. d.polygon([(right - FOLD, top), (right, top + FOLD), (right - FOLD, top + FOLD)], fill=FOLD_COLOR, outline=EDGE) # Знак программы поверх листа, в нижней его части: сверху угол. mark = Image.open(SRC).convert('RGBA') side = 66 mark = mark.resize((side, side), Image.LANCZOS) img.alpha_composite(mark, ((SIZE - side) // 2, bottom - side - 8)) img.save(DST) print('готов:', DST) if __name__ == '__main__': main()