質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SVG

SVGは、XMLを基盤とした2Dベクター画像記述言語。画像を線・面といった図形の集合体として扱うベクター画像のため、環境に適した表示が可能です。アニメーション機能もサポートされており、簡単なインタラクティブコンテンツ作成もできます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

225閲覧

テキストの大きさを取得したい

退会済みユーザー

退会済みユーザー

総合スコア0

SVG

SVGは、XMLを基盤とした2Dベクター画像記述言語。画像を線・面といった図形の集合体として扱うベクター画像のため、環境に適した表示が可能です。アニメーション機能もサポートされており、簡単なインタラクティブコンテンツ作成もできます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/08/08 23:35

編集2018/08/10 02:55

テキストの大きさを取得したいです。

以下のコードでテキストの大きさを取得しました。

js

1const text = document.createElementNS("http://www.w3.org/2000/svg", "text") 2text.textContent = "永" 3text.setAttribute("font-family", "'リュウミン R-KL'") 4text.setAttribute("font-size", "16") 5text.getBBox()

しかし、得られた大きさ(画像左)は求めている大きさ(画像右)より縦長でした。

求めているような大きさを取得するにはどうすればいいでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

フォントによってボックスの大きさが違うので完璧なサイズを取得するというのは難しいような気がします。
仮にやるならテキストをcanvasに入れて色情報から文字サイズを判別することでできるかもしれません。

投稿2018/08/09 00:39

keisukeh

総合スコア657

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

フォントによってボックスの大きさが違うので完璧なサイズを取得するというのは難しいような気がします。
仮にやるならテキストをcanvasに入れて色情報から文字サイズを判別することでできるかもしれません。

keisukeh さんありがとうございます。
以下のコードで求めている大きさを取得できました。

js

1const canvas = document.createElement("canvas") 2const context = canvas.getContext("2d") 3context.font = "16pt 'リュウミン R-KL'" 4context.fillText("永", 0, canvas.height) 5const imageData = context.getImageData(0, 0, canvas.width, canvas.height) 6let bottom, left, right, _top 7 8for ( 9 let index = 0, 10 length = imageData.data.length; 11 index < length; 12 index += 4 13) { 14 const a = imageData.data[index + 3] 15 const x = index / 4 % canvas.width 16 const y = Math.floor(index / 4 / canvas.width) 17 18 if (a === 0) { 19 continue 20 } 21 22 if ( 23 typeof bottom === "undefined" 24 || bottom < y 25 ) { 26 bottom = y 27 } 28 29 if ( 30 typeof left === "undefined" 31 || left > x 32 ) { 33 left = x 34 } 35 36 if ( 37 typeof right === "undefined" 38 || right < x 39 ) { 40 right = x 41 } 42 43 if ( 44 typeof _top === "undefined" 45 || _top > y 46 ) { 47 _top = y 48 } 49} 50 51{ 52 height: bottom - _top, 53 width: right - left, 54}

投稿2018/08/09 06:40

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問