概要
MSPowerPointからLibreOfficeImpressに移行を試みたが不満に感じる点がいくつかある.
不満の1つにカラーパレットを作るのが面倒なことが挙げられる.
本記事ではカラーパレットを作るためのpythonスクリプトの例を示す.
環境
- Ubuntu 16.04
- LibreOffice 5.1.6.2
- Python 3.6 (Anaconda 4.3.14)
使い方:スクリプト内の変数に適当な値を入れて走らせる.
すると,カラーパレットができるので,LibreOfficeから呼び出して使う.
get_color_pallete.py
import getpass
import colour # pip install colour
USERNAME = getpass.getuser()
PALLETE_PATH = "/home/"+ USERNAME + "/.config/libreoffice/4/user/config/"
# 出来上がったカラーパレットの置き場所
### xmlのフッター・ヘッター ###
HEADER = """<?xml version="1.0" encoding="UTF-8"?>
<ooo:color-table xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:ooo="http://openoffice.org/2004/office"
>\n"""
FOOTER = "</ooo:color-table>"
### xmlのフッター・ヘッターここまで ###
pallete_name = "mytheme" # office側で表示されるパレット名
color_dir = { # 色をここに記載する
"00_fg_color": "#fefefe",
"01_bg_color": "#303030",
"10_main_bright": "#80F2E8",
"11_main_normal": "#26A69A",
"12_main_dark": "#1A736B",
"20_accent_bright": "#f68880",
"21_accent_normal": "#F44336",
"22_accent_dark": "#612925",
}
def adjust_hue(c_base): # オリジナルの色から明度を調節して6色作って(パワポみたいに)リストを返す
c_list = []
c_luminance = c_base.luminance
for i in range(3, 0, -1):
c_new = colour.Color(c_base.hex)
c_new.luminance = c_luminance + (1. - c_luminance) * (i / 4.)
c_list.append(colour.Color(c_new.hex).hex_l)
for i in range(1, 4):
c_new = colour.Color(c_base.hex)
c_new.luminance = c_luminance - c_luminance * (i / 4.)
c_list.append(colour.Color(c_new.hex).hex_l)
return c_list
def get_color_sequence(c_hex): # オリジナルの色を含む12個分の色のリストを返す
c_base = colour.Color(c_hex)
c_list = [c_base.hex_l]
for i in range(5):
c_list.append(c_base.hex_l)
c_list += adjust_hue(c_base)
return c_list
def pallet_color_setting_in_xml(c_name, c):
return "<draw:color draw:name=\"" + c_name + "\" draw:color=\"" + c + "\"/>\n"
f = open(PALLETE_PATH + pallete_name + ".soc", "w")
f.write(HEADER)
for c_name in sorted(color_dir.keys()):
c_list = get_color_sequence(color_dir[c_name])
for i, c in enumerate(c_list):
f.write(pallet_color_setting_in_xml(c_name + str(i), c))
f.write(FOOTER)
f.close()
参考