Commit 7d9806b6 authored by wang's avatar wang

环境兼容

parent da3e5006
This source diff could not be displayed because it is too large. You can view the blob instead.
let fonts = [
{"font": "50px sans-serif", "text": "0-_{w."}, {
"font": "50px serif",
"text": "0-_{w."
}, {"font": "50px 'Andale Mono', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Arial Narrow', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Arial Unicode MS', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Batang', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Batang', serif", "text": "0-_{w."}, {
"font": "50px 'Bell MT', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Bell MT', serif", "text": "0-_{w."}, {
"font": "50px 'Brush Script', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Brush Script', serif", "text": "0-_{w."}, {
"font": "50px 'Brush Script MT', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Calibri', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Calibri', serif",
"text": "0-_{w."
}, {"font": "50px 'Charter', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Courier', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Courier New', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Curlz MT', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Curlz MT', serif", "text": "0-_{w."}, {
"font": "50px 'DejaVu Sans', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'DejaVu Sans', serif", "text": "0-_{w."}, {
"font": "50px 'DejaVu Sans Mono', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'DejaVu Sans Mono', serif", "text": "0-_{w."}, {
"font": "50px 'DejaVu Serif Condensed', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'DejaVu Serif Condensed', serif", "text": "0-_{w."}, {
"font": "50px 'Droid Sans', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Droid Sans', serif", "text": "0-_{w."}, {
"font": "50px 'Droid Sans Fallback', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Droid Sans Fallback', serif", "text": "0-_{w."}, {
"font": "50px 'Droid Serif', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Droid Serif', serif", "text": "0-_{w."}, {
"font": "50px 'Forte', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Forte', serif", "text": "0-_{w."}, {
"font": "50px 'Futura', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Geneva', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Hei', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Leelawadee', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Leelawadee', serif",
"text": "0-_{w."
}, {"font": "50px 'Levenim MT', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Levenim MT', serif",
"text": "0-_{w."
}, {"font": "50px 'Liberation Sans', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Liberation Sans', serif",
"text": "0-_{w."
}, {
"font": "50px 'Liberation Sans Narrow', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Liberation Sans Narrow', serif", "text": "0-_{w."}, {
"font": "50px 'Marlett', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Marlett', serif", "text": "0-_{w."}, {
"font": "50px 'Meiryo UI', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Meiryo UI', serif", "text": "0-_{w."}, {
"font": "50px 'Microsoft Uighur', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Microsoft Uighur', serif", "text": "0-_{w."}, {
"font": "50px 'Microsoft YaHei UI', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Microsoft YaHei UI', serif", "text": "0-_{w."}, {
"font": "50px 'MS Mincho', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'MS Mincho', serif", "text": "0-_{w."}, {
"font": "50px 'MS UI Gothic', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'MS UI Gothic', serif", "text": "0-_{w."}, {
"font": "50px 'NanumGothic', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Nirmala UI', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Nirmala UI', serif",
"text": "0-_{w."
}, {"font": "50px 'Palatino', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Papyrus', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'PMingLiU', sans-serif", "text": "0-_{w."}, {
"font": "50px 'PMingLiU', serif",
"text": "0-_{w."
}, {"font": "50px 'PT Serif', sans-serif", "text": "0-_{w."}, {
"font": "50px 'SimHei', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'SimHei', serif", "text": "0-_{w."}, {
"font": "50px 'STIXVariants', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'STSong', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Traditional Arabic', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Traditional Arabic', serif", "text": "0-_{w."}, {
"font": "50px 'Urdu Typesetting', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Urdu Typesetting', serif", "text": "0-_{w."}, {
"font": "50px 'Verdana', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Wingdings', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Wingdings 3', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Helkevtrica', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Helkevtrica', serif",
"text": "0-_{w."
}, {"font": "1000px sans-serif", "text": "₹"}, {"font": "1000px sans-serif", "text": "▁"}, {
"font": "1000px sans-serif",
"text": "₺"
}, {"font": "1000px sans-serif", "text": "ꜽ"}, {"font": "1000px sans-serif", "text": "�"}, {
"font": "1000px sans-serif",
"text": "₸"
}, {"font": "1000px sans-serif", "text": "׆"}, {"font": "1000px sans-serif", "text": "ẞ"}, {
"font": "1000px sans-serif",
"text": "ॿ"
}, {"font": "1000px sans-serif", "text": ""}, {"font": "1000px sans-serif", "text": "᳚"}, {
"font": "1000px sans-serif",
"text": "៝"
}, {"font": "1000px sans-serif", "text": "⎮"}, {"font": "1000px sans-serif", "text": "ം"}, {
"font": "1000px sans-serif",
"text": "ஂ"
}, {"font": "1000px sans-serif", "text": "ᅚ"}, {"font": "1000px sans-serif", "text": "␥"}, {
"font": "1000px sans-serif",
"text": "〮"
}, {"font": "1000px sans-serif", "text": "꠰"}, {"font": "1000px sans-serif", "text": "⬆"}, {
"font": "1000px sans-serif",
"text": "⇤"
}, {"font": "1000px sans-serif", "text": "₽"}, {"font": "1000px sans-serif", "text": "ⱻ"}, {
"font": "1000px sans-serif",
"text": "₰"
}, {"font": "1000px sans-serif", "text": "ﯮ"}, {"font": "1000px sans-serif", "text": ""}, {
"font": "1000px sans-serif",
"text": "￿"
}, {"font": "1000px sans-serif", "text": ""}, {"font": "1000px sans-serif", "text": "Ⴀ"}, {
"font": "1000px sans-serif",
"text": "𝞐"
}, {"font": "1000px sans-serif", "text": "܀"}, {"font": "1000px sans-serif", "text": "ᥐ"}, {
"font": "1000px sans-serif",
"text": "ゕ"
}, {"font": "1000px sans-serif", "text": "匭"}, {
"font": "1000px sans-serif",
"text": "؜"
}, {"font": "1000px sans-serif", "text": "⃣"}, {"font": "1000px sans-serif", "text": ""}, {
"font": "1000px sans-serif",
"text": "Ș"
}, {"font": "1000px sans-serif", "text": "֏"}, {"font": "1000px sans-serif", "text": "ࣤ"}, {
"font": "1000px sans-serif",
"text": "঳"
}, {"font": "1000px sans-serif", "text": "᱐"}, {"font": "1000px sans-serif", "text": "☙"}, {
"font": "1000px serif",
"text": "₹"
}, {"font": "1000px serif", "text": "▁"}, {"font": "1000px serif", "text": "₺"}, {
"font": "1000px serif",
"text": "ꜽ"
}, {"font": "1000px serif", "text": "�"}, {"font": "1000px serif", "text": "₸"}, {
"font": "1000px serif",
"text": "׆"
}, {"font": "1000px serif", "text": "ẞ"}, {"font": "1000px serif", "text": "ॿ"}, {
"font": "1000px serif",
"text": ""
}, {"font": "1000px serif", "text": "᳚"}, {"font": "1000px serif", "text": "៝"}, {
"font": "1000px serif",
"text": "⎮"
}, {"font": "1000px serif", "text": "ം"}, {"font": "1000px serif", "text": "ஂ"}, {
"font": "1000px serif",
"text": "ᅚ"
}, {"font": "1000px serif", "text": "␥"}, {"font": "1000px serif", "text": "〮"}, {
"font": "1000px serif",
"text": "꠰"
}, {"font": "1000px serif", "text": "⬆"}, {"font": "1000px serif", "text": "⇤"}, {
"font": "1000px serif",
"text": "₽"
}, {"font": "1000px serif", "text": "ⱻ"}, {"font": "1000px serif", "text": "₰"}, {
"font": "1000px serif",
"text": "ﯮ"
}, {"font": "1000px serif", "text": ""}, {"font": "1000px serif", "text": "￿"}, {
"font": "1000px serif",
"text": ""
}, {"font": "1000px serif", "text": "Ⴀ"}, {"font": "1000px serif", "text": "𝞐"}, {
"font": "1000px serif",
"text": "܀"
}, {"font": "1000px serif", "text": "ᥐ"}, {"font": "1000px serif", "text": "ゕ"}, {
"font": "1000px serif",
"text": "匭"
}, {"font": "1000px serif", "text": "؜"}, {"font": "1000px serif", "text": "⃣"}, {
"font": "1000px serif",
"text": ""
}, {"font": "1000px serif", "text": "Ș"}, {"font": "1000px serif", "text": "֏"}, {
"font": "1000px serif",
"text": "ࣤ"
}, {"font": "1000px serif", "text": "঳"}, {"font": "1000px serif", "text": "᱐"}, {
"font": "1000px serif",
"text": "☙"
}, {"font": "1000px monospace", "text": "₹"}, {"font": "1000px monospace", "text": "▁"}, {
"font": "1000px monospace",
"text": "₺"
}, {"font": "1000px monospace", "text": "ꜽ"}, {"font": "1000px monospace", "text": "�"}, {
"font": "1000px monospace",
"text": "₸"
}, {"font": "1000px monospace", "text": "׆"}, {"font": "1000px monospace", "text": "ẞ"}, {
"font": "1000px monospace",
"text": "ॿ"
}, {"font": "1000px monospace", "text": ""}, {"font": "1000px monospace", "text": "᳚"}, {
"font": "1000px monospace",
"text": "៝"
}, {"font": "1000px monospace", "text": "⎮"}, {"font": "1000px monospace", "text": "ം"}, {
"font": "1000px monospace",
"text": "ஂ"
}, {"font": "1000px monospace", "text": "ᅚ"}, {"font": "1000px monospace", "text": "␥"}, {
"font": "1000px monospace",
"text": "〮"
}, {"font": "1000px monospace", "text": "꠰"}, {"font": "1000px monospace", "text": "⬆"}, {
"font": "1000px monospace",
"text": "⇤"
}, {"font": "1000px monospace", "text": "₽"}, {"font": "1000px monospace", "text": "ⱻ"}, {
"font": "1000px monospace",
"text": "₰"
}, {"font": "1000px monospace", "text": "ﯮ"}, {"font": "1000px monospace", "text": ""}, {
"font": "1000px monospace",
"text": "￿"
}, {"font": "1000px monospace", "text": ""}, {"font": "1000px monospace", "text": "Ⴀ"}, {
"font": "1000px monospace",
"text": "𝞐"
}, {"font": "1000px monospace", "text": "܀"}, {"font": "1000px monospace", "text": "ᥐ"}, {
"font": "1000px monospace",
"text": "ゕ"
}, {"font": "1000px monospace", "text": "匭"}, {"font": "1000px monospace", "text": "؜"}, {
"font": "1000px monospace",
"text": "⃣"
}, {"font": "1000px monospace", "text": ""}, {"font": "1000px monospace", "text": "Ș"}, {
"font": "1000px monospace",
"text": "֏"
}, {"font": "1000px monospace", "text": "ࣤ"}, {"font": "1000px monospace", "text": "঳"}, {
"font": "1000px monospace",
"text": "᱐"
}, {"font": "1000px monospace", "text": "☙"}, {"font": "1000px cursive", "text": "₹"}, {
"font": "1000px cursive",
"text": "▁"
}, {"font": "1000px cursive", "text": "₺"}, {"font": "1000px cursive", "text": "ꜽ"}, {
"font": "1000px cursive",
"text": "�"
}, {"font": "1000px cursive", "text": "₸"}, {"font": "1000px cursive", "text": "׆"}, {
"font": "1000px cursive",
"text": "ẞ"
}, {"font": "1000px cursive", "text": "ॿ"}, {"font": "1000px cursive", "text": ""}, {
"font": "1000px cursive",
"text": "᳚"
}, {"font": "1000px cursive", "text": "៝"}, {"font": "1000px cursive", "text": "⎮"}, {
"font": "1000px cursive",
"text": "ം"
}, {"font": "1000px cursive", "text": "ஂ"}, {"font": "1000px cursive", "text": "ᅚ"}, {
"font": "1000px cursive",
"text": "␥"
}, {"font": "1000px cursive", "text": "〮"}, {"font": "1000px cursive", "text": "꠰"}, {
"font": "1000px cursive",
"text": "⬆"
}, {"font": "1000px cursive", "text": "⇤"}, {"font": "1000px cursive", "text": "₽"}, {
"font": "1000px cursive",
"text": "ⱻ"
}, {"font": "1000px cursive", "text": "₰"}, {"font": "1000px cursive", "text": "ﯮ"}, {
"font": "1000px cursive",
"text": ""
}, {"font": "1000px cursive", "text": "￿"}, {"font": "1000px cursive", "text": ""}, {
"font": "1000px cursive",
"text": "Ⴀ"
}, {"font": "1000px cursive", "text": "𝞐"}, {"font": "1000px cursive", "text": "܀"}, {
"font": "1000px cursive",
"text": "ᥐ"
}, {"font": "1000px cursive", "text": "ゕ"}, {"font": "1000px cursive", "text": "匭"}, {
"font": "1000px cursive",
"text": "؜"
}, {"font": "1000px cursive", "text": "⃣"}, {"font": "1000px cursive", "text": ""}, {
"font": "1000px cursive",
"text": "Ș"
}, {"font": "1000px cursive", "text": "֏"}, {"font": "1000px cursive", "text": "ࣤ"}, {
"font": "1000px cursive",
"text": "঳"
}, {"font": "1000px cursive", "text": "᱐"}, {"font": "1000px cursive", "text": "☙"}, {
"font": "1000px fantasy",
"text": "₹"
}, {"font": "1000px fantasy", "text": "▁"}, {"font": "1000px fantasy", "text": "₺"}, {
"font": "1000px fantasy",
"text": "ꜽ"
}, {"font": "1000px fantasy", "text": "�"}, {"font": "1000px fantasy", "text": "₸"}, {
"font": "1000px fantasy",
"text": "׆"
}, {"font": "1000px fantasy", "text": "ẞ"}, {"font": "1000px fantasy", "text": "ॿ"}, {
"font": "1000px fantasy",
"text": ""
}, {"font": "1000px fantasy", "text": "᳚"}, {"font": "1000px fantasy", "text": "៝"}, {
"font": "1000px fantasy",
"text": "⎮"
}, {"font": "1000px fantasy", "text": "ം"}, {"font": "1000px fantasy", "text": "ஂ"}, {
"font": "1000px fantasy",
"text": "ᅚ"
}, {"font": "1000px fantasy", "text": "␥"}, {"font": "1000px fantasy", "text": "〮"}, {
"font": "1000px fantasy",
"text": "꠰"
}, {"font": "1000px fantasy", "text": "⬆"}, {"font": "1000px fantasy", "text": "⇤"}, {
"font": "1000px fantasy",
"text": "₽"
}, {"font": "1000px fantasy", "text": "ⱻ"}, {"font": "1000px fantasy", "text": "₰"}, {
"font": "1000px fantasy",
"text": "ﯮ"
}, {"font": "1000px fantasy", "text": ""}, {"font": "1000px fantasy", "text": "￿"}, {
"font": "1000px fantasy",
"text": ""
}, {"font": "1000px fantasy", "text": "Ⴀ"}, {"font": "1000px fantasy", "text": "𝞐"}, {
"font": "1000px fantasy",
"text": "܀"
}, {"font": "1000px fantasy", "text": "ᥐ"}, {"font": "1000px fantasy", "text": "ゕ"}, {
"font": "1000px fantasy",
"text": "匭"
}, {"font": "1000px fantasy", "text": "؜"}, {"font": "1000px fantasy", "text": "⃣"}, {
"font": "1000px fantasy",
"text": ""
}, {"font": "1000px fantasy", "text": "Ș"}, {"font": "1000px fantasy", "text": "֏"}, {
"font": "1000px fantasy",
"text": "ࣤ"
}, {"font": "1000px fantasy", "text": "঳"}, {"font": "1000px fantasy", "text": "᱐"}, {
"font": "1000px fantasy",
"text": "☙"
}, {"font": "72px monospace", "text": "mmmmmmmmlli"}, {
"font": "72px sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px serif", "text": "mmmmmmmmlli"}, {
"font": "72px ARNOPRO, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px ARNOPRO, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px ARNOPRO, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px AgencyFB, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px AgencyFB, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px AgencyFB, serif", "text": "mmmmmmmmlli"}, {
"font": "72px ArabicTypesetting, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px ArabicTypesetting, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px ArabicTypesetting, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px ArialUnicodeMS, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px ArialUnicodeMS, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px ArialUnicodeMS, serif", "text": "mmmmmmmmlli"}, {
"font": "72px AvantGardeBkBT, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px AvantGardeBkBT, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px AvantGardeBkBT, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px BankGothicMdBT, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px BankGothicMdBT, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px BankGothicMdBT, serif", "text": "mmmmmmmmlli"}, {
"font": "72px Batang, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px Batang, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px Batang, serif",
"text": "mmmmmmmmlli"
}, {
"font": "72px BitstreamVeraSansMono, monospace",
"text": "mmmmmmmmlli"
}, {
"font": "72px BitstreamVeraSansMono, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px BitstreamVeraSansMono, serif", "text": "mmmmmmmmlli"}, {
"font": "72px Calibri, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px Calibri, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px Calibri, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Century, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px Century, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Century, serif", "text": "mmmmmmmmlli"}, {
"font": "72px CenturyGothic, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px CenturyGothic, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px CenturyGothic, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Clarendon, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px Clarendon, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Clarendon, serif", "text": "mmmmmmmmlli"}, {
"font": "72px EUROSTILE, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px EUROSTILE, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px EUROSTILE, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px FranklinGothic, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px FranklinGothic, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px FranklinGothic, serif", "text": "mmmmmmmmlli"}, {
"font": "72px FuturaBkBT, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px FuturaBkBT, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px FuturaBkBT, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px FuturaMdBT, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px FuturaMdBT, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px FuturaMdBT, serif", "text": "mmmmmmmmlli"}, {
"font": "72px GOTHAM, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px GOTHAM, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px GOTHAM, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px GillSans, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px GillSans, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px GillSans, serif", "text": "mmmmmmmmlli"}, {
"font": "72px HELV, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px HELV, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px HELV, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Haettenschweiler, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px Haettenschweiler, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Haettenschweiler, serif", "text": "mmmmmmmmlli"}, {
"font": "72px HelveticaNeue, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px HelveticaNeue, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px HelveticaNeue, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Humanst521BT, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px Humanst521BT, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Humanst521BT, serif", "text": "mmmmmmmmlli"}, {
"font": "72px Leelawadee, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px Leelawadee, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px Leelawadee, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px LetterGothic, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px LetterGothic, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px LetterGothic, serif", "text": "mmmmmmmmlli"}, {
"font": "72px LevenimMT, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px LevenimMT, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px LevenimMT, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px LucidaBright, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px LucidaBright, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px LucidaBright, serif", "text": "mmmmmmmmlli"}, {
"font": "72px LucidaSans, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px LucidaSans, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px LucidaSans, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px MSMincho, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px MSMincho, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px MSMincho, serif", "text": "mmmmmmmmlli"}, {
"font": "72px MSOutlook, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px MSOutlook, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px MSOutlook, serif",
"text": "mmmmmmmmlli"
}, {
"font": "72px MSReferenceSpecialty, monospace",
"text": "mmmmmmmmlli"
}, {
"font": "72px MSReferenceSpecialty, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px MSReferenceSpecialty, serif", "text": "mmmmmmmmlli"}, {
"font": "72px MSUIGothic, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px MSUIGothic, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px MSUIGothic, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px MTExtra, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px MTExtra, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px MTExtra, serif", "text": "mmmmmmmmlli"}, {
"font": "72px MYRIADPRO, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px MYRIADPRO, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px MYRIADPRO, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Marlett, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px Marlett, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Marlett, serif", "text": "mmmmmmmmlli"}, {
"font": "72px MeiryoUI, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px MeiryoUI, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px MeiryoUI, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px MicrosoftUighur, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px MicrosoftUighur, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px MicrosoftUighur, serif", "text": "mmmmmmmmlli"}, {
"font": "72px MinionPro, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px MinionPro, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px MinionPro, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px MonotypeCorsiva, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px MonotypeCorsiva, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px MonotypeCorsiva, serif", "text": "mmmmmmmmlli"}, {
"font": "72px PMingLiU, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px PMingLiU, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px PMingLiU, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Pristina, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px Pristina, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Pristina, serif", "text": "mmmmmmmmlli"}, {
"font": "72px SCRIPTINA, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px SCRIPTINA, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px SCRIPTINA, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px SegoeUILight, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px SegoeUILight, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px SegoeUILight, serif", "text": "mmmmmmmmlli"}, {
"font": "72px Serifa, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px Serifa, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px Serifa, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px SimHei, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px SimHei, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px SimHei, serif", "text": "mmmmmmmmlli"}, {
"font": "72px SmallFonts, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px SmallFonts, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px SmallFonts, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Staccato222BT, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px Staccato222BT, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Staccato222BT, serif", "text": "mmmmmmmmlli"}, {
"font": "72px TRAJANPRO, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px TRAJANPRO, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px TRAJANPRO, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px UniversCE55Medium, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px UniversCE55Medium, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px UniversCE55Medium, serif", "text": "mmmmmmmmlli"}, {
"font": "72px Vrinda, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px Vrinda, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px Vrinda, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px ZWAdobeF, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px ZWAdobeF, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px ZWAdobeF, serif", "text": "mmmmmmmmlli"}]
let fontsRes = {}
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d')
ctx.textBaseline = 'top';
for (let i = 0; i < fonts.length; i++) {
ctx.font = fonts[i].font;
let met = ctx.measureText(fonts[i].text)
if (!fontsRes[fonts[i].font]) {
fontsRes[fonts[i].font] = {}
try {
let fonts = [
{"font": "50px sans-serif", "text": "0-_{w."}, {
"font": "50px serif",
"text": "0-_{w."
}, {"font": "50px 'Andale Mono', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Arial Narrow', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Arial Unicode MS', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Batang', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Batang', serif", "text": "0-_{w."}, {
"font": "50px 'Bell MT', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Bell MT', serif", "text": "0-_{w."}, {
"font": "50px 'Brush Script', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Brush Script', serif", "text": "0-_{w."}, {
"font": "50px 'Brush Script MT', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Calibri', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Calibri', serif",
"text": "0-_{w."
}, {"font": "50px 'Charter', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Courier', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Courier New', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Curlz MT', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Curlz MT', serif", "text": "0-_{w."}, {
"font": "50px 'DejaVu Sans', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'DejaVu Sans', serif", "text": "0-_{w."}, {
"font": "50px 'DejaVu Sans Mono', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'DejaVu Sans Mono', serif", "text": "0-_{w."}, {
"font": "50px 'DejaVu Serif Condensed', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'DejaVu Serif Condensed', serif", "text": "0-_{w."}, {
"font": "50px 'Droid Sans', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Droid Sans', serif", "text": "0-_{w."}, {
"font": "50px 'Droid Sans Fallback', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Droid Sans Fallback', serif", "text": "0-_{w."}, {
"font": "50px 'Droid Serif', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Droid Serif', serif", "text": "0-_{w."}, {
"font": "50px 'Forte', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Forte', serif", "text": "0-_{w."}, {
"font": "50px 'Futura', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Geneva', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Hei', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Leelawadee', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Leelawadee', serif",
"text": "0-_{w."
}, {"font": "50px 'Levenim MT', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Levenim MT', serif",
"text": "0-_{w."
}, {"font": "50px 'Liberation Sans', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Liberation Sans', serif",
"text": "0-_{w."
}, {
"font": "50px 'Liberation Sans Narrow', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Liberation Sans Narrow', serif", "text": "0-_{w."}, {
"font": "50px 'Marlett', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Marlett', serif", "text": "0-_{w."}, {
"font": "50px 'Meiryo UI', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Meiryo UI', serif", "text": "0-_{w."}, {
"font": "50px 'Microsoft Uighur', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Microsoft Uighur', serif", "text": "0-_{w."}, {
"font": "50px 'Microsoft YaHei UI', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Microsoft YaHei UI', serif", "text": "0-_{w."}, {
"font": "50px 'MS Mincho', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'MS Mincho', serif", "text": "0-_{w."}, {
"font": "50px 'MS UI Gothic', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'MS UI Gothic', serif", "text": "0-_{w."}, {
"font": "50px 'NanumGothic', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Nirmala UI', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Nirmala UI', serif",
"text": "0-_{w."
}, {"font": "50px 'Palatino', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Papyrus', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'PMingLiU', sans-serif", "text": "0-_{w."}, {
"font": "50px 'PMingLiU', serif",
"text": "0-_{w."
}, {"font": "50px 'PT Serif', sans-serif", "text": "0-_{w."}, {
"font": "50px 'SimHei', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'SimHei', serif", "text": "0-_{w."}, {
"font": "50px 'STIXVariants', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'STSong', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Traditional Arabic', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Traditional Arabic', serif", "text": "0-_{w."}, {
"font": "50px 'Urdu Typesetting', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Urdu Typesetting', serif", "text": "0-_{w."}, {
"font": "50px 'Verdana', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Wingdings', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Wingdings 3', sans-serif",
"text": "0-_{w."
}, {"font": "50px 'Helkevtrica', sans-serif", "text": "0-_{w."}, {
"font": "50px 'Helkevtrica', serif",
"text": "0-_{w."
}, {"font": "1000px sans-serif", "text": "₹"}, {"font": "1000px sans-serif", "text": "▁"}, {
"font": "1000px sans-serif",
"text": "₺"
}, {"font": "1000px sans-serif", "text": "ꜽ"}, {"font": "1000px sans-serif", "text": "�"}, {
"font": "1000px sans-serif",
"text": "₸"
}, {"font": "1000px sans-serif", "text": "׆"}, {"font": "1000px sans-serif", "text": "ẞ"}, {
"font": "1000px sans-serif",
"text": "ॿ"
}, {"font": "1000px sans-serif", "text": ""}, {"font": "1000px sans-serif", "text": "᳚"}, {
"font": "1000px sans-serif",
"text": "៝"
}, {"font": "1000px sans-serif", "text": "⎮"}, {"font": "1000px sans-serif", "text": "ം"}, {
"font": "1000px sans-serif",
"text": "ஂ"
}, {"font": "1000px sans-serif", "text": "ᅚ"}, {"font": "1000px sans-serif", "text": "␥"}, {
"font": "1000px sans-serif",
"text": "〮"
}, {"font": "1000px sans-serif", "text": "꠰"}, {"font": "1000px sans-serif", "text": "⬆"}, {
"font": "1000px sans-serif",
"text": "⇤"
}, {"font": "1000px sans-serif", "text": "₽"}, {"font": "1000px sans-serif", "text": "ⱻ"}, {
"font": "1000px sans-serif",
"text": "₰"
}, {"font": "1000px sans-serif", "text": "ﯮ"}, {"font": "1000px sans-serif", "text": ""}, {
"font": "1000px sans-serif",
"text": "￿"
}, {"font": "1000px sans-serif", "text": ""}, {"font": "1000px sans-serif", "text": "Ⴀ"}, {
"font": "1000px sans-serif",
"text": "𝞐"
}, {"font": "1000px sans-serif", "text": "܀"}, {"font": "1000px sans-serif", "text": "ᥐ"}, {
"font": "1000px sans-serif",
"text": "ゕ"
}, {"font": "1000px sans-serif", "text": "匭"}, {
"font": "1000px sans-serif",
"text": "؜"
}, {"font": "1000px sans-serif", "text": "⃣"}, {"font": "1000px sans-serif", "text": ""}, {
"font": "1000px sans-serif",
"text": "Ș"
}, {"font": "1000px sans-serif", "text": "֏"}, {"font": "1000px sans-serif", "text": "ࣤ"}, {
"font": "1000px sans-serif",
"text": "঳"
}, {"font": "1000px sans-serif", "text": "᱐"}, {"font": "1000px sans-serif", "text": "☙"}, {
"font": "1000px serif",
"text": "₹"
}, {"font": "1000px serif", "text": "▁"}, {"font": "1000px serif", "text": "₺"}, {
"font": "1000px serif",
"text": "ꜽ"
}, {"font": "1000px serif", "text": "�"}, {"font": "1000px serif", "text": "₸"}, {
"font": "1000px serif",
"text": "׆"
}, {"font": "1000px serif", "text": "ẞ"}, {"font": "1000px serif", "text": "ॿ"}, {
"font": "1000px serif",
"text": ""
}, {"font": "1000px serif", "text": "᳚"}, {"font": "1000px serif", "text": "៝"}, {
"font": "1000px serif",
"text": "⎮"
}, {"font": "1000px serif", "text": "ം"}, {"font": "1000px serif", "text": "ஂ"}, {
"font": "1000px serif",
"text": "ᅚ"
}, {"font": "1000px serif", "text": "␥"}, {"font": "1000px serif", "text": "〮"}, {
"font": "1000px serif",
"text": "꠰"
}, {"font": "1000px serif", "text": "⬆"}, {"font": "1000px serif", "text": "⇤"}, {
"font": "1000px serif",
"text": "₽"
}, {"font": "1000px serif", "text": "ⱻ"}, {"font": "1000px serif", "text": "₰"}, {
"font": "1000px serif",
"text": "ﯮ"
}, {"font": "1000px serif", "text": ""}, {"font": "1000px serif", "text": "￿"}, {
"font": "1000px serif",
"text": ""
}, {"font": "1000px serif", "text": "Ⴀ"}, {"font": "1000px serif", "text": "𝞐"}, {
"font": "1000px serif",
"text": "܀"
}, {"font": "1000px serif", "text": "ᥐ"}, {"font": "1000px serif", "text": "ゕ"}, {
"font": "1000px serif",
"text": "匭"
}, {"font": "1000px serif", "text": "؜"}, {"font": "1000px serif", "text": "⃣"}, {
"font": "1000px serif",
"text": ""
}, {"font": "1000px serif", "text": "Ș"}, {"font": "1000px serif", "text": "֏"}, {
"font": "1000px serif",
"text": "ࣤ"
}, {"font": "1000px serif", "text": "঳"}, {"font": "1000px serif", "text": "᱐"}, {
"font": "1000px serif",
"text": "☙"
}, {"font": "1000px monospace", "text": "₹"}, {"font": "1000px monospace", "text": "▁"}, {
"font": "1000px monospace",
"text": "₺"
}, {"font": "1000px monospace", "text": "ꜽ"}, {"font": "1000px monospace", "text": "�"}, {
"font": "1000px monospace",
"text": "₸"
}, {"font": "1000px monospace", "text": "׆"}, {"font": "1000px monospace", "text": "ẞ"}, {
"font": "1000px monospace",
"text": "ॿ"
}, {"font": "1000px monospace", "text": ""}, {"font": "1000px monospace", "text": "᳚"}, {
"font": "1000px monospace",
"text": "៝"
}, {"font": "1000px monospace", "text": "⎮"}, {"font": "1000px monospace", "text": "ം"}, {
"font": "1000px monospace",
"text": "ஂ"
}, {"font": "1000px monospace", "text": "ᅚ"}, {"font": "1000px monospace", "text": "␥"}, {
"font": "1000px monospace",
"text": "〮"
}, {"font": "1000px monospace", "text": "꠰"}, {"font": "1000px monospace", "text": "⬆"}, {
"font": "1000px monospace",
"text": "⇤"
}, {"font": "1000px monospace", "text": "₽"}, {"font": "1000px monospace", "text": "ⱻ"}, {
"font": "1000px monospace",
"text": "₰"
}, {"font": "1000px monospace", "text": "ﯮ"}, {"font": "1000px monospace", "text": ""}, {
"font": "1000px monospace",
"text": "￿"
}, {"font": "1000px monospace", "text": ""}, {"font": "1000px monospace", "text": "Ⴀ"}, {
"font": "1000px monospace",
"text": "𝞐"
}, {"font": "1000px monospace", "text": "܀"}, {"font": "1000px monospace", "text": "ᥐ"}, {
"font": "1000px monospace",
"text": "ゕ"
}, {"font": "1000px monospace", "text": "匭"}, {"font": "1000px monospace", "text": "؜"}, {
"font": "1000px monospace",
"text": "⃣"
}, {"font": "1000px monospace", "text": ""}, {"font": "1000px monospace", "text": "Ș"}, {
"font": "1000px monospace",
"text": "֏"
}, {"font": "1000px monospace", "text": "ࣤ"}, {"font": "1000px monospace", "text": "঳"}, {
"font": "1000px monospace",
"text": "᱐"
}, {"font": "1000px monospace", "text": "☙"}, {"font": "1000px cursive", "text": "₹"}, {
"font": "1000px cursive",
"text": "▁"
}, {"font": "1000px cursive", "text": "₺"}, {"font": "1000px cursive", "text": "ꜽ"}, {
"font": "1000px cursive",
"text": "�"
}, {"font": "1000px cursive", "text": "₸"}, {"font": "1000px cursive", "text": "׆"}, {
"font": "1000px cursive",
"text": "ẞ"
}, {"font": "1000px cursive", "text": "ॿ"}, {"font": "1000px cursive", "text": ""}, {
"font": "1000px cursive",
"text": "᳚"
}, {"font": "1000px cursive", "text": "៝"}, {"font": "1000px cursive", "text": "⎮"}, {
"font": "1000px cursive",
"text": "ം"
}, {"font": "1000px cursive", "text": "ஂ"}, {"font": "1000px cursive", "text": "ᅚ"}, {
"font": "1000px cursive",
"text": "␥"
}, {"font": "1000px cursive", "text": "〮"}, {"font": "1000px cursive", "text": "꠰"}, {
"font": "1000px cursive",
"text": "⬆"
}, {"font": "1000px cursive", "text": "⇤"}, {"font": "1000px cursive", "text": "₽"}, {
"font": "1000px cursive",
"text": "ⱻ"
}, {"font": "1000px cursive", "text": "₰"}, {"font": "1000px cursive", "text": "ﯮ"}, {
"font": "1000px cursive",
"text": ""
}, {"font": "1000px cursive", "text": "￿"}, {"font": "1000px cursive", "text": ""}, {
"font": "1000px cursive",
"text": "Ⴀ"
}, {"font": "1000px cursive", "text": "𝞐"}, {"font": "1000px cursive", "text": "܀"}, {
"font": "1000px cursive",
"text": "ᥐ"
}, {"font": "1000px cursive", "text": "ゕ"}, {"font": "1000px cursive", "text": "匭"}, {
"font": "1000px cursive",
"text": "؜"
}, {"font": "1000px cursive", "text": "⃣"}, {"font": "1000px cursive", "text": ""}, {
"font": "1000px cursive",
"text": "Ș"
}, {"font": "1000px cursive", "text": "֏"}, {"font": "1000px cursive", "text": "ࣤ"}, {
"font": "1000px cursive",
"text": "঳"
}, {"font": "1000px cursive", "text": "᱐"}, {"font": "1000px cursive", "text": "☙"}, {
"font": "1000px fantasy",
"text": "₹"
}, {"font": "1000px fantasy", "text": "▁"}, {"font": "1000px fantasy", "text": "₺"}, {
"font": "1000px fantasy",
"text": "ꜽ"
}, {"font": "1000px fantasy", "text": "�"}, {"font": "1000px fantasy", "text": "₸"}, {
"font": "1000px fantasy",
"text": "׆"
}, {"font": "1000px fantasy", "text": "ẞ"}, {"font": "1000px fantasy", "text": "ॿ"}, {
"font": "1000px fantasy",
"text": ""
}, {"font": "1000px fantasy", "text": "᳚"}, {"font": "1000px fantasy", "text": "៝"}, {
"font": "1000px fantasy",
"text": "⎮"
}, {"font": "1000px fantasy", "text": "ം"}, {"font": "1000px fantasy", "text": "ஂ"}, {
"font": "1000px fantasy",
"text": "ᅚ"
}, {"font": "1000px fantasy", "text": "␥"}, {"font": "1000px fantasy", "text": "〮"}, {
"font": "1000px fantasy",
"text": "꠰"
}, {"font": "1000px fantasy", "text": "⬆"}, {"font": "1000px fantasy", "text": "⇤"}, {
"font": "1000px fantasy",
"text": "₽"
}, {"font": "1000px fantasy", "text": "ⱻ"}, {"font": "1000px fantasy", "text": "₰"}, {
"font": "1000px fantasy",
"text": "ﯮ"
}, {"font": "1000px fantasy", "text": ""}, {"font": "1000px fantasy", "text": "￿"}, {
"font": "1000px fantasy",
"text": ""
}, {"font": "1000px fantasy", "text": "Ⴀ"}, {"font": "1000px fantasy", "text": "𝞐"}, {
"font": "1000px fantasy",
"text": "܀"
}, {"font": "1000px fantasy", "text": "ᥐ"}, {"font": "1000px fantasy", "text": "ゕ"}, {
"font": "1000px fantasy",
"text": "匭"
}, {"font": "1000px fantasy", "text": "؜"}, {"font": "1000px fantasy", "text": "⃣"}, {
"font": "1000px fantasy",
"text": ""
}, {"font": "1000px fantasy", "text": "Ș"}, {"font": "1000px fantasy", "text": "֏"}, {
"font": "1000px fantasy",
"text": "ࣤ"
}, {"font": "1000px fantasy", "text": "঳"}, {"font": "1000px fantasy", "text": "᱐"}, {
"font": "1000px fantasy",
"text": "☙"
}, {"font": "72px monospace", "text": "mmmmmmmmlli"}, {
"font": "72px sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px serif", "text": "mmmmmmmmlli"}, {
"font": "72px ARNOPRO, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px ARNOPRO, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px ARNOPRO, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px AgencyFB, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px AgencyFB, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px AgencyFB, serif", "text": "mmmmmmmmlli"}, {
"font": "72px ArabicTypesetting, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px ArabicTypesetting, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px ArabicTypesetting, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px ArialUnicodeMS, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px ArialUnicodeMS, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px ArialUnicodeMS, serif", "text": "mmmmmmmmlli"}, {
"font": "72px AvantGardeBkBT, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px AvantGardeBkBT, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px AvantGardeBkBT, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px BankGothicMdBT, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px BankGothicMdBT, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px BankGothicMdBT, serif", "text": "mmmmmmmmlli"}, {
"font": "72px Batang, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px Batang, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px Batang, serif",
"text": "mmmmmmmmlli"
}, {
"font": "72px BitstreamVeraSansMono, monospace",
"text": "mmmmmmmmlli"
}, {
"font": "72px BitstreamVeraSansMono, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px BitstreamVeraSansMono, serif", "text": "mmmmmmmmlli"}, {
"font": "72px Calibri, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px Calibri, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px Calibri, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Century, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px Century, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Century, serif", "text": "mmmmmmmmlli"}, {
"font": "72px CenturyGothic, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px CenturyGothic, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px CenturyGothic, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Clarendon, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px Clarendon, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Clarendon, serif", "text": "mmmmmmmmlli"}, {
"font": "72px EUROSTILE, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px EUROSTILE, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px EUROSTILE, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px FranklinGothic, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px FranklinGothic, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px FranklinGothic, serif", "text": "mmmmmmmmlli"}, {
"font": "72px FuturaBkBT, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px FuturaBkBT, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px FuturaBkBT, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px FuturaMdBT, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px FuturaMdBT, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px FuturaMdBT, serif", "text": "mmmmmmmmlli"}, {
"font": "72px GOTHAM, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px GOTHAM, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px GOTHAM, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px GillSans, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px GillSans, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px GillSans, serif", "text": "mmmmmmmmlli"}, {
"font": "72px HELV, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px HELV, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px HELV, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Haettenschweiler, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px Haettenschweiler, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Haettenschweiler, serif", "text": "mmmmmmmmlli"}, {
"font": "72px HelveticaNeue, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px HelveticaNeue, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px HelveticaNeue, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Humanst521BT, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px Humanst521BT, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Humanst521BT, serif", "text": "mmmmmmmmlli"}, {
"font": "72px Leelawadee, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px Leelawadee, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px Leelawadee, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px LetterGothic, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px LetterGothic, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px LetterGothic, serif", "text": "mmmmmmmmlli"}, {
"font": "72px LevenimMT, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px LevenimMT, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px LevenimMT, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px LucidaBright, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px LucidaBright, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px LucidaBright, serif", "text": "mmmmmmmmlli"}, {
"font": "72px LucidaSans, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px LucidaSans, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px LucidaSans, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px MSMincho, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px MSMincho, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px MSMincho, serif", "text": "mmmmmmmmlli"}, {
"font": "72px MSOutlook, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px MSOutlook, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px MSOutlook, serif",
"text": "mmmmmmmmlli"
}, {
"font": "72px MSReferenceSpecialty, monospace",
"text": "mmmmmmmmlli"
}, {
"font": "72px MSReferenceSpecialty, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px MSReferenceSpecialty, serif", "text": "mmmmmmmmlli"}, {
"font": "72px MSUIGothic, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px MSUIGothic, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px MSUIGothic, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px MTExtra, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px MTExtra, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px MTExtra, serif", "text": "mmmmmmmmlli"}, {
"font": "72px MYRIADPRO, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px MYRIADPRO, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px MYRIADPRO, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Marlett, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px Marlett, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Marlett, serif", "text": "mmmmmmmmlli"}, {
"font": "72px MeiryoUI, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px MeiryoUI, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px MeiryoUI, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px MicrosoftUighur, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px MicrosoftUighur, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px MicrosoftUighur, serif", "text": "mmmmmmmmlli"}, {
"font": "72px MinionPro, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px MinionPro, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px MinionPro, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px MonotypeCorsiva, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px MonotypeCorsiva, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px MonotypeCorsiva, serif", "text": "mmmmmmmmlli"}, {
"font": "72px PMingLiU, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px PMingLiU, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px PMingLiU, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Pristina, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px Pristina, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Pristina, serif", "text": "mmmmmmmmlli"}, {
"font": "72px SCRIPTINA, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px SCRIPTINA, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px SCRIPTINA, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px SegoeUILight, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px SegoeUILight, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px SegoeUILight, serif", "text": "mmmmmmmmlli"}, {
"font": "72px Serifa, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px Serifa, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px Serifa, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px SimHei, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px SimHei, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px SimHei, serif", "text": "mmmmmmmmlli"}, {
"font": "72px SmallFonts, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px SmallFonts, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px SmallFonts, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Staccato222BT, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px Staccato222BT, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px Staccato222BT, serif", "text": "mmmmmmmmlli"}, {
"font": "72px TRAJANPRO, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px TRAJANPRO, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px TRAJANPRO, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px UniversCE55Medium, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px UniversCE55Medium, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px UniversCE55Medium, serif", "text": "mmmmmmmmlli"}, {
"font": "72px Vrinda, monospace",
"text": "mmmmmmmmlli"
}, {"font": "72px Vrinda, sans-serif", "text": "mmmmmmmmlli"}, {
"font": "72px Vrinda, serif",
"text": "mmmmmmmmlli"
}, {"font": "72px ZWAdobeF, monospace", "text": "mmmmmmmmlli"}, {
"font": "72px ZWAdobeF, sans-serif",
"text": "mmmmmmmmlli"
}, {"font": "72px ZWAdobeF, serif", "text": "mmmmmmmmlli"}]
let fontsRes = {}
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d')
ctx.textBaseline = 'top';
for (let i = 0; i < fonts.length; i++) {
ctx.font = fonts[i].font;
let met = ctx.measureText(fonts[i].text)
if (!fontsRes[fonts[i].font]) {
fontsRes[fonts[i].font] = {}
}
fontsRes[fonts[i].font][fonts[i].text] = {
width: met.width,
actualboundingboxascent: met.actualBoundingBoxAscent,
actualboundingboxleft: met.actualBoundingBoxLeft,
actualboundingboxright: met.actualBoundingBoxRight,
fontboundingboxascent: met.fontBoundingBoxAscent,
actualboundingboxdescent: met.actualBoundingBoxDescent,
}
}
let imgsRes = {};
let sss = [
{
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["😎", -1, 96],
"imageData": [18, 90, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["6️⃣", -1, 96],
"imageData": [38, 77, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["🍼", -1, 96],
"imageData": [48, 28, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["🏴󠁧󠁢󠁥󠁮󠁧󠁿", -1, 96],
"imageData": [94, 23, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["📊", -1, 96],
"imageData": [26, 46, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["🏴󠁧󠁢󠁥󠁮󠁧󠁿", -1, 96],
"imageData": [47, 23, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["㊗️", -1, 96],
"imageData": [37, 17, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["⛎", -1, 96],
"imageData": [62, 28, 1, 1]
}
]
let imgRes = {};
for (let i = 0; i < sss.length; i++) {
var a = document.createElement('canvas')
a.width = 96
a.height = 96
let ctx = a.getContext('2d');
let s = sss[i];
ctx.font = s.font;
ctx.fillStyle = s.fillStyle;
ctx.fillText(...s.fillText)
let data = ctx.getImageData(...s.imageData);
if (!imgRes[s.font]) {
imgRes[s.font] = {}
}
imgRes[s.font][s.imageData + ''] = data.data + ''
}
let glArgs = {
3413: 8,
3412: 8,
3411: 8,
3410: 8,
3414: 24,
35661: 32,
34076: 16384,
36349: 1024,
34024: 16384,
34930: 16,
3379: 16384,
36348: 31,
34921: 16,
35660: 16,
36347: 1024,
7937: 'WebKit WebGL',
35724: 'WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)',
3415: 0,
7936: 'WebKit',
7938: 'WebGL 1.0 (OpenGL ES 2.0 Chromium)',
37445: 'Google Inc.',
37446: 'ANGLE (Apple, Apple M1 Max, OpenGL 4.1)',
34047: 16
};
var glARgs = Object.keys(glArgs);
var canvas = document.createElement('canvas')
var gl = canvas.getContext('webgl')
gl.getExtension('WEBGL_debug_renderer_info')
gl.getExtension('EXT_texture_filter_anisotropic')
for (let i = 0; i < glARgs.length; i++) {
glArgs[glARgs[i]] = gl.getParameter(parseInt(glARgs[i]))
}
fontsRes[fonts[i].font][fonts[i].text] = {
width: met.width,
actualboundingboxascent: met.actualBoundingBoxAscent,
actualboundingboxleft: met.actualBoundingBoxLeft,
actualboundingboxright: met.actualBoundingBoxRight,
fontboundingboxascent: met.fontBoundingBoxAscent,
actualboundingboxdescent: met.actualBoundingBoxDescent,
delete canvas
let navigatorparams = {
appname: navigator.appName,
appversion: navigator.appVersion,
appcodename: navigator.appCodeName,
hardwareconcurrency: navigator.hardwareConcurrency,
maxtouchpoints: navigator.maxTouchPoints,
platform: navigator.platform,
product: navigator.product,
productsub: navigator.productSub,
useragent: navigator.userAgent,
vendor: navigator.vendor,
vendorsub: navigator.vendorSub,
donottrack: navigator.doNotTrack,
}
}
let imgsRes = {};
let sss = [
{
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["😎", -1, 96],
"imageData": [18, 90, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["6️⃣", -1, 96],
"imageData": [38, 77, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["🍼", -1, 96],
"imageData": [48, 28, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["🏴󠁧󠁢󠁥󠁮󠁧󠁿", -1, 96],
"imageData": [94, 23, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["📊", -1, 96],
"imageData": [26, 46, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["🏴󠁧󠁢󠁥󠁮󠁧󠁿", -1, 96],
"imageData": [47, 23, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["㊗️", -1, 96],
"imageData": [37, 17, 1, 1]
}, {
"font": "94px sans-serif",
"fillStyle": "#000000",
"fillText": ["⛎", -1, 96],
"imageData": [62, 28, 1, 1]
let screenparams = {
height: screen.height,
width: screen.width,
availheight: screen.availHeight,
availwidth: screen.availWidth,
pixeldepth: screen.pixelDepth,
colordepth: screen.colorDepth,
}
]
let imgRes = {};
for (let i = 0; i < sss.length; i++) {
var a = document.createElement('canvas')
a.width = 96
a.height = 96
let ctx = a.getContext('2d');
let s = sss[i];
ctx.font = s.font;
ctx.fillStyle = s.fillStyle;
ctx.fillText(...s.fillText)
let data = ctx.getImageData(...s.imageData);
if (!imgRes[s.font]) {
imgRes[s.font] = {}
let featurePolicy;
if (document.featurePolicy) {
featurePolicy = {
features: document.featurePolicy.features(),
allowedfeatures: document.featurePolicy.allowedFeatures(),
}
}
imgRes[s.font][s.imageData + ''] = data.data + ''
}
let glArgs = {
3413: 8,
3412: 8,
3411: 8,
3410: 8,
3414: 24,
35661: 32,
34076: 16384,
36349: 1024,
34024: 16384,
34930: 16,
3379: 16384,
36348: 31,
34921: 16,
35660: 16,
36347: 1024,
7937: 'WebKit WebGL',
35724: 'WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)',
3415: 0,
7936: 'WebKit',
7938: 'WebGL 1.0 (OpenGL ES 2.0 Chromium)',
37445: 'Google Inc.',
37446: 'ANGLE (Apple, Apple M1 Max, OpenGL 4.1)',
34047: 16
};
var glARgs = Object.keys(glArgs);
var canvas = document.createElement('canvas')
var gl = canvas.getContext('webgl')
gl.getExtension('WEBGL_debug_renderer_info')
gl.getExtension('EXT_texture_filter_anisotropic')
for (let i = 0; i < glARgs.length; i++) {
glArgs[glARgs[i]] = gl.getParameter(parseInt(glARgs[i]))
}
delete canvas
let navigatorparams = {
appname: navigator.appName,
appversion: navigator.appVersion,
appcodename: navigator.appCodeName,
hardwareconcurrency: navigator.hardwareConcurrency,
maxtouchpoints: navigator.maxTouchPoints,
platform: navigator.platform,
product: navigator.product,
productsub: navigator.productSub,
useragent: navigator.userAgent,
vendor: navigator.vendor,
vendorsub: navigator.vendorSub,
donottrack: navigator.doNotTrack,
}
let screenparams = {
height: screen.height,
width: screen.width,
availheight: screen.availHeight,
availwidth: screen.availWidth,
pixeldepth: screen.pixelDepth,
colordepth: screen.colorDepth,
}
let featurePolicy;
if (document.featurePolicy) {
featurePolicy = {
features: document.featurePolicy.features(),
allowedfeatures: document.featurePolicy.allowedFeatures(),
let windowparams = {
innerheight: window.innerHeight,
innerwidth: window.innerWidth,
outerheight: window.outerHeight,
outerwidth: window.outerWidth,
screenx: window.screenX,
screeny: window.screenY,
pageyoffset: window.pageYOffset,
devicepixelratio: window.devicePixelRatio,
}
}
let windowparams = {
innerheight: window.innerHeight,
innerwidth: window.innerWidth,
outerheight: window.outerHeight,
outerwidth: window.outerWidth,
screenx: window.screenX,
screeny: window.screenY,
pageyoffset: window.pageYOffset,
devicepixelratio: window.devicePixelRatio,
}
let plugins = navigator.plugins;
let plugins = navigator.plugins;
let plgs = {}
let plgs = {}
function getObj(r) {
function getObj(r) {
return {
description: r.description,
suffixes: r.suffixes,
type: r.type,
}
return {
description: r.description,
suffixes: r.suffixes,
type: r.type,
}
}
for (let i = 0; i < plugins.length; i++) {
let p = plugins.item(i);
let pi = {}
let keys = ['0', '1', 'application/pdf', 'text/pdf', 'description', 'filename', 'length', 'name'];
for (const key of keys) {
let r = p[key];
if (typeof r === 'object') {
r = getObj(r)
r.enabledPlugin = [];
for (let i = 0; i < plugins.length; i++) {
let p = plugins.item(i);
let pi = {}
let keys = ['0', '1', 'application/pdf', 'text/pdf', 'description', 'filename', 'length', 'name'];
for (const key of keys) {
let r = p[key];
if (typeof r === 'object') {
r = getObj(r)
r.enabledPlugin = [];
}
pi[key] = r
}
pi[key] = r
plgs[i] = pi
}
plgs[i] = pi
}
let mimes = [];
let mimeTypes = navigator.mimeTypes;
for (let i = 0; i < mimeTypes.length; i++) {
let mime = mimeTypes.item(i);
mimes.push({
description: mime.description,
suffixes: mime.suffixes,
type: mime.type,
})
}
function getDataUrl() {
var canvas = document.createElement('canvas');
let ctx = canvas.getContext('2d');
ctx.font = '18pt Sans';
ctx.textBaseline = 'top'
ctx.fillText('Hel$&?6%){mZ+#@', 2, 2)
return canvas.toDataURL("image/png");
let mimes = [];
let mimeTypes = navigator.mimeTypes;
for (let i = 0; i < mimeTypes.length; i++) {
let mime = mimeTypes.item(i);
mimes.push({
description: mime.description,
suffixes: mime.suffixes,
type: mime.type,
})
}
}
function getDataUrl() {
var canvas = document.createElement('canvas');
let ctx = canvas.getContext('2d');
ctx.font = '18pt Sans';
ctx.textBaseline = 'top'
ctx.fillText('Hel$&?6%){mZ+#@', 2, 2)
return canvas.toDataURL("image/png");
function getDataUrl2() {
var canvas = document.createElement('canvas');
let ctx = canvas.getContext('2d');
canvas.width = 5;
canvas.height = 5;
ctx.font = '20px Arial';
ctx.shadowOffsetX = 2;
ctx.shadowOffsetY = 2;
ctx.shadowBlur = 2;
ctx.textBaseline = 'top'
ctx.fillStyle = 'rgba(22, 22, 22, 0.08636862211354912)'
ctx.fillText('Hel$&?6%){mZ+#@👺', 105, 105)
return {
data: ctx.getImageData(0, 0, 5, 5).data + '',
url: canvas.toDataURL()
}
}
function canplay() {
let videos = {
"audio/aac; codecs=\"flac\"": "",
"audio/flac": "probably",
"audio/mpeg; codecs=\"mp3\"": "probably",
"audio/mpeg; codecs=\"vp9\"": "",
"audio/webm; codecs=\"vp8\"": "",
"audio/webz": "",
"audio/x-m4a; codecs=\"mp3\"": "",
"audio/x-m4a; codecs=\"vp8, mp4a.40\"": "",
"audio/x-m4a; codecs=\"vp9, mp4a.40.2\"": "",
"video/mp4": "maybe",
"video/mp4; codecs=\"ac-3\"": "",
"video/mp4; codecs=\"avc1.42011E\"": "",
"video/mp4; codecs=\"avc1.42E009\"": "maybe",
"video/mp4; codecs=\"avc1.42E034\"": "probably",
"video/mp4; codecs=\"avc1.42F01E\"": "probably",
"video/mp4; codecs=\"avc1.4D001E\"": "probably",
"video/mp4; codecs=\"avc3.42001E\"": "probably",
"video/mp4; codecs=\"avc3.42E01E, mp4a.40.29\"": "probably",
"video/mp4; codecs=\"flac\"": "probably",
"video/mp4; codecs=\"hev1\"": "",
"video/mp4; codecs=\"hvc1x\"": "",
"video/mp4; codecs=\"lavc1337\"": "",
"video/mp4; codecs=\"mp4a.40.02\"": "probably",
"video/mp4; codecs=\"mp4a.40.5\"": "probably",
"video/mp4; codecs=\"mp4a.67\"": "probably",
"video/mp4; codecs=\"opus\"": "probably",
"video/ogg; codecs=\"flac\"": "probably",
"video/ogg; codecs=\"opus\"": "probably",
"video/ogg; codecs=\"vp8\"": "probably",
"video/webm": "maybe",
"video/webm; codecs=\"av01.0.04M.08\"": "probably",
"video/webm; codecs=\"vp09.02.10.08\"": "probably",
"video/x-dv": "",
"video/x-m4v; codecs=\"avc1.42AC23\"": "maybe"
};
var v = document.createElement('video');
for (let i = 0; i < videos.length; i++) {
videos[i] = v.canPlayType(videos[i]);
function getDataUrl2() {
var canvas = document.createElement('canvas');
let ctx = canvas.getContext('2d');
canvas.width = 5;
canvas.height = 5;
ctx.font = '20px Arial';
ctx.shadowOffsetX = 2;
ctx.shadowOffsetY = 2;
ctx.shadowBlur = 2;
ctx.textBaseline = 'top'
ctx.fillStyle = 'rgba(22, 22, 22, 0.08636862211354912)'
ctx.fillText('Hel$&?6%){mZ+#@👺', 105, 105)
return {
data: ctx.getImageData(0, 0, 5, 5).data + '',
url: canvas.toDataURL()
}
}
return videos;
}
function stringToHex(str){
    var val="";
    for(var i = 0; i < str.length; i++){
let a = (str.charCodeAt(i)- 20).toString(16);
if (a.length == 1){
        val += "0" + a;
}else{
function canplay() {
let videos = {
"audio/aac; codecs=\"flac\"": "",
"audio/flac": "probably",
"audio/mpeg; codecs=\"mp3\"": "probably",
"audio/mpeg; codecs=\"vp9\"": "",
"audio/webm; codecs=\"vp8\"": "",
"audio/webz": "",
"audio/x-m4a; codecs=\"mp3\"": "",
"audio/x-m4a; codecs=\"vp8, mp4a.40\"": "",
"audio/x-m4a; codecs=\"vp9, mp4a.40.2\"": "",
"video/mp4": "maybe",
"video/mp4; codecs=\"ac-3\"": "",
"video/mp4; codecs=\"avc1.42011E\"": "",
"video/mp4; codecs=\"avc1.42E009\"": "maybe",
"video/mp4; codecs=\"avc1.42E034\"": "probably",
"video/mp4; codecs=\"avc1.42F01E\"": "probably",
"video/mp4; codecs=\"avc1.4D001E\"": "probably",
"video/mp4; codecs=\"avc3.42001E\"": "probably",
"video/mp4; codecs=\"avc3.42E01E, mp4a.40.29\"": "probably",
"video/mp4; codecs=\"flac\"": "probably",
"video/mp4; codecs=\"hev1\"": "",
"video/mp4; codecs=\"hvc1x\"": "",
"video/mp4; codecs=\"lavc1337\"": "",
"video/mp4; codecs=\"mp4a.40.02\"": "probably",
"video/mp4; codecs=\"mp4a.40.5\"": "probably",
"video/mp4; codecs=\"mp4a.67\"": "probably",
"video/mp4; codecs=\"opus\"": "probably",
"video/ogg; codecs=\"flac\"": "probably",
"video/ogg; codecs=\"opus\"": "probably",
"video/ogg; codecs=\"vp8\"": "probably",
"video/webm": "maybe",
"video/webm; codecs=\"av01.0.04M.08\"": "probably",
"video/webm; codecs=\"vp09.02.10.08\"": "probably",
"video/x-dv": "",
"video/x-m4v; codecs=\"avc1.42AC23\"": "maybe"
};
var v = document.createElement('video');
for (let i = 0; i < videos.length; i++) {
videos[i] = v.canPlayType(videos[i]);
}
return videos;
}
function stringToHex(str) {
var val = "";
for (var i = 0; i < str.length; i++) {
let a = (str.charCodeAt(i) - 20).toString(16);
if (a.length == 1) {
val += "0" + a;
} else {
val += a
}
    }
    return val;
  }
let userAgentData= {};
let webglImg = {};
navigator.userAgentData && navigator.userAgentData.getHighEntropyValues(['architecture', 'bitness', 'brands', 'mobile', 'model', 'platform',
'platformVersion', 'uaFullVersion', 'wow64', 'fullVersionList']).then(e => {
userAgentData['highValue'] = e
userAgentData['brands'] = navigator.userAgentData.brands
userAgentData['mobile'] = navigator.userAgentData.mobile
userAgentData['platform'] = navigator.userAgentData.platform
// console.log(JSON.stringify(userAgentData))
})
webglImg = function (){
let canvas = document.createElement("canvas");
canvas.width = 150;
canvas.height = 150;
let ctx = canvas.getContext('webgl2');
let shader = ctx.createShader(35633);
ctx.shaderSource(shader,'\n attribute vec4 aPosition;\n attribute vec4 aColor;\n uniform vec4 anOffset;\n varying vec4 vColor;\n void main(void) {\n gl_Position = aPosition + anOffset;\n vColor = aColor;\n }\n ');
ctx.compileShader(shader);
let shaderParam1 = ctx.getShaderParameter(shader, 35713);
let shader2 = ctx.createShader(35632);
ctx.shaderSource(shader2,'\n precision mediump float;\n varying vec4 vColor;\n void main(void) {\n gl_FragColor = vColor;\n }\n ');
ctx.compileShader(shader2);
let shaderParam2 = ctx.getShaderParameter(shader2, 35713);
let program = ctx.createProgram();
ctx.attachShader(program, shader);
ctx.attachShader(program, shader2);
ctx.linkProgram(program);
let programParam1 = ctx.getProgramParameter(program, 35714);
let buffer1 = ctx.createBuffer();
ctx.bindBuffer(34962, buffer1);
var bl_27 = [0, 0.5, 0.699999988079071, -0.6000000238418579, -0.4000000059604645, -0.800000011920929];
var bl_0 = [0.30000001192092896, 0.699999988079071, 0, 1, 0.10000000149011612, 0, 0.8999999761581421, 1, 0.8999999761581421, 0, 0, 1];
let Float32Array1 = new Float32Array(bl_27);
ctx.bufferData(34962, Float32Array1, 35044);
let buffer2 = ctx.createBuffer();
ctx.bindBuffer(34962, buffer2);
let Float32Array2 = new Float32Array(bl_0);
ctx.bufferData(34962, Float32Array2, 35044);
let attribLocationAPosition = ctx.getAttribLocation(program, 'aPosition');
let attribLocationAColor = ctx.getAttribLocation(program, 'aColor');
ctx.bindBuffer(34962, buffer1);
ctx.vertexAttribPointer(0, 2, 5126, false, 0, 0);
ctx.enableVertexAttribArray(0);
ctx.bindBuffer(34962, buffer2);
ctx.vertexAttribPointer(1, 4, 5126, false, 0, 0);
ctx.enableVertexAttribArray(1);
ctx.useProgram(program);
let webglUniformLocation = ctx.getUniformLocation(program, 'anOffset');
ctx.uniform4fv(webglUniformLocation, [0.2, 0, 0, 0])
ctx.drawArrays(5,0,3)
let unint8Array = new Uint8Array(90000);
ctx.readPixels(50, 0, 100, 128, 6408, 5121, unint8Array);
var compressString = function (S) {
let nums = S.split(",")
let str = ''
let i = 0
while (i < nums.length) {
let j = i + 1
while (nums[i] == nums[j]) {
j++
}
if ((j - i) !== 1) {
str = str + '|' + nums[i] + '-' + (j - i)
}else{
str = str + '|' + nums[i]
}
i = j
}
res = str.length >= S.length ? S : str
return res
};
return {
strs :compressString(unint8Array+''),
url: canvas.toDataURL()
}
}()
setTimeout(function (){
let result = {
windowparams: windowparams,
screenparams: screenparams,
navigatorparams: navigatorparams,
featurepolicy: featurePolicy,
plugins: plgs,
mimetypes: mimes,
fontsres: fontsRes,
imgsres: imgRes,
glres: glArgs,
jpg: getDataUrl(),
jpg2: getDataUrl2(),
canplay: canplay(),
useragentdata: userAgentData,
webglimg: webglImg,
return val;
}
let body = JSON.stringify(result);
console.log(1, body.length)
// body = stringToHex(encodeURIComponent(body))
// console.log(2, body.length)
// /collect
// fetch("https://stage.unififi.com/env/shape", {
// fetch("http://127.0.0.1:39999/env/shape", {
fetch("/collect", {
"headers": {
"accept": "*/*",
"accept-language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7",
"cache-control": "no-cache",
"pragma": "no-cache",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "cross-site"
},
"body": body,
"method": "POST",
"mode": "cors",
"credentials": "omit"
}).then(e => {
console.log(e.text())
let userAgentData = {};
let webglImg = {};
navigator.userAgentData && navigator.userAgentData.getHighEntropyValues(['architecture', 'bitness', 'brands', 'mobile', 'model', 'platform',
'platformVersion', 'uaFullVersion', 'wow64', 'fullVersionList']).then(e => {
userAgentData['highValue'] = e
userAgentData['brands'] = navigator.userAgentData.brands
userAgentData['mobile'] = navigator.userAgentData.mobile
userAgentData['platform'] = navigator.userAgentData.platform
// console.log(JSON.stringify(userAgentData))
})
}, 2000)
webglImg = function () {
let canvas = document.createElement("canvas");
canvas.width = 150;
canvas.height = 150;
let ctx = canvas.getContext('webgl2');
let shader = ctx.createShader(35633);
ctx.shaderSource(shader, '\n attribute vec4 aPosition;\n attribute vec4 aColor;\n uniform vec4 anOffset;\n varying vec4 vColor;\n void main(void) {\n gl_Position = aPosition + anOffset;\n vColor = aColor;\n }\n ');
ctx.compileShader(shader);
let shaderParam1 = ctx.getShaderParameter(shader, 35713);
let shader2 = ctx.createShader(35632);
ctx.shaderSource(shader2, '\n precision mediump float;\n varying vec4 vColor;\n void main(void) {\n gl_FragColor = vColor;\n }\n ');
ctx.compileShader(shader2);
let shaderParam2 = ctx.getShaderParameter(shader2, 35713);
let program = ctx.createProgram();
ctx.attachShader(program, shader);
ctx.attachShader(program, shader2);
ctx.linkProgram(program);
let programParam1 = ctx.getProgramParameter(program, 35714);
let buffer1 = ctx.createBuffer();
ctx.bindBuffer(34962, buffer1);
var bl_27 = [0, 0.5, 0.699999988079071, -0.6000000238418579, -0.4000000059604645, -0.800000011920929];
var bl_0 = [0.30000001192092896, 0.699999988079071, 0, 1, 0.10000000149011612, 0, 0.8999999761581421, 1, 0.8999999761581421, 0, 0, 1];
let Float32Array1 = new Float32Array(bl_27);
ctx.bufferData(34962, Float32Array1, 35044);
let buffer2 = ctx.createBuffer();
ctx.bindBuffer(34962, buffer2);
let Float32Array2 = new Float32Array(bl_0);
ctx.bufferData(34962, Float32Array2, 35044);
let attribLocationAPosition = ctx.getAttribLocation(program, 'aPosition');
let attribLocationAColor = ctx.getAttribLocation(program, 'aColor');
ctx.bindBuffer(34962, buffer1);
ctx.vertexAttribPointer(0, 2, 5126, false, 0, 0);
ctx.enableVertexAttribArray(0);
ctx.bindBuffer(34962, buffer2);
ctx.vertexAttribPointer(1, 4, 5126, false, 0, 0);
ctx.enableVertexAttribArray(1);
ctx.useProgram(program);
let webglUniformLocation = ctx.getUniformLocation(program, 'anOffset');
ctx.uniform4fv(webglUniformLocation, [0.2, 0, 0, 0])
ctx.drawArrays(5, 0, 3)
let unint8Array = new Uint8Array(90000);
ctx.readPixels(50, 0, 100, 128, 6408, 5121, unint8Array);
var compressString = function (S) {
let nums = S.split(",")
let str = ''
let i = 0
while (i < nums.length) {
let j = i + 1
while (nums[i] == nums[j]) {
j++
}
if ((j - i) !== 1) {
str = str + '|' + nums[i] + '-' + (j - i)
} else {
str = str + '|' + nums[i]
}
i = j
}
res = str.length >= S.length ? S : str
return res
};
return {
strs: compressString(unint8Array + ''),
url: canvas.toDataURL()
}
}()
setTimeout(function () {
let result = {
windowparams: windowparams,
screenparams: screenparams,
navigatorparams: navigatorparams,
featurepolicy: featurePolicy,
plugins: plgs,
mimetypes: mimes,
fontsres: fontsRes,
imgsres: imgRes,
glres: glArgs,
jpg: getDataUrl(),
jpg2: getDataUrl2(),
canplay: canplay(),
useragentdata: userAgentData,
webglimg: webglImg,
}
let body = JSON.stringify(result);
// body = stringToHex(encodeURIComponent(body))
// console.log(2, body.length)
// /collect
fetch("https://stage.unififi.com/env/shape", {
"headers": {
"accept": "*/*",
"accept-language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7",
"cache-control": "no-cache",
"pragma": "no-cache",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "cross-site"
},
"body": body,
"method": "POST",
"mode": "cors",
"credentials": "omit"
}).then(e => {
console.log(e.text())
})
}, 2000)
} catch (e) {
}
\ No newline at end of file
......@@ -5,20 +5,26 @@ import requests
import json
import tls_client
from bson import ObjectId
import hashlib
from pymongo import MongoClient
def md5(text):
m = hashlib.md5()
m.update(text.encode())
return m.hexdigest()
# 连接MongoDB数据库
client = MongoClient('mongodb://lcc-spider:JIUsfhiad&^@18.144.59.80:27017/?authSource=admin&directConnection=true')
db = client.env
# 查询所有文档
result = db.env_shape.find()
data = {str(x['_id']): x['env'] for x in result}
print(result)
with open('env.json', 'w') as f:
f.write(json.dumps(data))
# result = db.env_shape.find()
# data = {str(x['_id']): x['env'] for x in result}
# print(result)
# with open('env.json', 'w') as f:
# f.write(json.dumps(data))
with open('env.json', 'r') as f:
data = json.loads(f.read())
envs = data.keys()
session = tls_client.Session(client_identifier='chrome_110')
......@@ -27,25 +33,33 @@ session = tls_client.Session(client_identifier='chrome_110')
headers = {
"Host": "jbrest.jetblue.com",
"application-channel": "Desktop_Web",
"sec-ch-ua-platform": "\"macOS\"",
"sec-ch-ua-mobile": "?0",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
"booking-application-type": "NGB",
"content-type": "application/json",
"accept": "application/json",
"origin": "https://www.jetblue.com",
"sec-fetch-site": "same-site",
"sec-fetch-mode": "cors",
"sec-fetch-dest": "empty",
"accept-language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7"
}
lastHash = ''
usedTime = 10
code = open('src.js', 'r').read()
for i in range(100):
selectId = random.choice(list(envs))
# selectId = 'ac22733c38ee66a568f17174'
c = requests.get('https://www.jetblue.com/js/src/jb-74873.js').text
m5 = md5(c)
if m5 != lastHash and usedTime > 5:
lastHash = m5
usedTime = 0
print('js变化')
with open('src_run1.js', 'w') as f:
f.write(code + '\n\n' + c)
t1 = time.time()
# r = requests.get('http://127.0.0.1:5000/getinfo').json()['message']
# r = requests.get('http://127.0.0.1:3001').json()
p = subprocess.Popen(['node', 'js_dom_run.js', selectId], stdin=subprocess.PIPE, stdout=subprocess.PIPE,
# p = subprocess.Popen(['node', 'js_dom_run.js', selectId], stdin=subprocess.PIPE, stdout=subprocess.PIPE,
p = subprocess.Popen(['node', 'src_run1.js', selectId], stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
output, err = p.communicate(timeout=10)
tmp = ''
......@@ -58,6 +72,7 @@ for i in range(100):
{'_id': ObjectId(selectId)},
{"$inc": {"used": 1}}
)
usedTime += 1
# r = {
# 'X-1ItxWO9i-f': 'A7AKCbCJAQAAV93ahgnafaQIeEbvT-Ss7YkuAnwrNQi_E70IpAViSqhv3hLLAXL3RNiucirJwH9eCOfvosJeCA==',
# 'X-1ItxWO9i-b': 'ewccp4',
......@@ -99,7 +114,7 @@ for i in range(100):
proxy = f'http://unfflcc:76cc14-47b8dd-1f8ace-827836-0c740e@usa.rotating.proxyrack.net:{int(random.randint(10000, 11149))}'
# proxy = f'http://unfflcc:76cc14-47b8dd-1f8ace-827836-0c740e@198.147.25.26:{int(random.randint(10000, 11149))}'
# proxy = 'http://user-unifflcc-region-us:q39CEBTs5A5YQXor@pr.roxlabs.cn:4600'
# proxy = 'http://127.0.0.1:7890'
proxy = 'http://127.0.0.1:7890'
session.proxies = {
'http': proxy,
'https': proxy,
......@@ -118,6 +133,8 @@ for i in range(100):
# })
uri = 'http://ymx-lcc.unififi.com/header/add'
proxy = f'http://unfflcc:76cc14-47b8dd-1f8ace-827836-0c740e@usa.rotating.proxyrack.net:{int(random.randint(10000, 11149))}'
print(selectId, headers)
r = requests.post(uri, json={
'brush_fromto': 'LAS-BOS',
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
No preview for this file type
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment