penpot/frontend/src/app/util/avatars.cljs
2022-09-20 23:23:22 +02:00

37 lines
1.1 KiB
Clojure

;; This Source Code Form is subject to the terms of the Mozilla Public
;; License, v. 2.0. If a copy of the MPL was not distributed with this
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
;;
;; Copyright (c) KALEIDOS INC
(ns app.util.avatars
(:require
[app.util.object :as obj]
[cuerdas.core :as str]))
(defn generate*
[{:keys [name color size]
:or {color "#000000" size 128}}]
(let [parts (str/words (str/upper name))
letters (if (= 1 (count parts))
(ffirst parts)
(str (ffirst parts) (first (second parts))))
canvas (.createElement js/document "canvas")
context (.getContext canvas "2d")]
(obj/set! canvas "width" size)
(obj/set! canvas "height" size)
(obj/set! context "fillStyle" color)
(.fillRect context 0 0 size size)
(obj/set! context "font" (str (/ size 2) "px Arial"))
(obj/set! context "textAlign" "center")
(obj/set! context "fillStyle" "#ffffff")
(.fillText context letters (/ size 2) (/ size 1.5))
(.toDataURL canvas)))
(def generate (memoize generate*))