前提
SVGをcanvasを使用して画像に変換していますが、
以下の時、<text ...> の font-family が画像に反映されません。
- svg の中で <text ...> を使用している
- font-family は、adobe font である
- 日本語フォント (ex. kozuka-mincho-pro)
- adobe font は、Web プロジェクトページ で生成される script タグを使用して埋め込み
※他の自作フォントは、blob化することで、画像にもfont-familyが反映できています。
※ブラウザ上(SVGの時点)では、adobe font の font-family も反映されています。
何か知見ありましたら、アドバイスいただけると幸いです。
よろしくお願いいたします。
実現したいこと
最終的に、
- canvasで生成した画像で、<text ...>の font-familyが適用されていること
- 例えば、kozuka-mincho-pro
↓
- blob化したら解決しそうなので、adobe fonts を blob化したい
発生している問題・エラーメッセージ
SVGをcanvasで画像(png)に変換したときに、
font-familyが適用されず、デフォルト?のフォントスタイルになってしまう。
該当のソースコード
classに、.sample を指定しています。
svg
1<svg ...> 2 ... 3 <text font-size="12" x="0" y="0" 4 class="sample" fill="#ffffff" rorate="0" text-anchor="middle" 5 dominant-baseline="central" 6 > 7 サンプルテキスト 8 </text> 9</svg>
試したこと
1) blob化
canvasでfont-familyを適用するには、blobにする必要があるとの、記事を見ましたので
試してみました。(adobe以外のサーバーにある自作フォントは、これで解決済)
※xxxxxxx.js は 仮です。 実際は、adobeのkitIdが入ります。
js
1 2 const svg = document.getElementById("svg_sample") 3 const style = svg.getElementsByTagName("style")[0] 4 5 const json = await axios.get(https://use.typekit.net/xxxxxxx.js, { responseType: 'blob' }) 6 const data = json.data 7 const blob = new Blob([data], {type: "font/woff;charset=utf-8"}) 8 9 let reader = new FileReader() 10 reader.readAsDataURL(blob) 11 12 reader.onload = () => { 13 const dataURL = reader.result 14 const font_face_css = `@font-face { font-family: sample; src: url("${dataURL}"); }` 15 const font_class = `.sample { font-family: sample; }` 16 const add_html = `${font_face_css} ${font_class}` 17 18 style.insertAdjacentHTML('beforeEnd', add_html); 19 }
画像どころか、ブラウザ上でもfont-familyが反映されません。
2)text に 直接 font-family 指定
js
1const svg = document.getElementById("svg_sample") 2const textEls = svg.getElementsByClassName(`sample`) 3const targetTextEl = textEls[0] 4targetTextEl.setAttribute("font-family", "kozuka-mincho-pro")
↓
svg
1 <text font-size="12" x="0" y="0" 2 class="sample" fill="#ffffff" rorate="0" text-anchor="middle" 3 dominant-baseline="central" 4 font-family="kozuka-mincho-pro" // ここが追加されます 5 > 6 サンプルテキスト 7 </text>
blobにしてないので、canvas処理ではfont-familyが反映されない?
補足情報(FW/ツールのバージョンなど)
Vue 3.0
SVGを画像にする方法はこちらを参考にしています(成功しています)
: https://blog.asial.co.jp/1615

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/12/01 09:06
2022/12/01 09:18
2022/12/01 09:24
2022/12/01 09:34
2022/12/01 11:08