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

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

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

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

Q&A

解決済

2回答

1100閲覧

JavaScript backgroundImageで表示された画像の縦幅と横幅

qwrs

総合スコア2

JavaScript

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

0グッド

0クリップ

投稿2021/08/29 00:03

backgroundImageで表示した画像の縦幅と横幅を得たいです
下だと50pxと表示されますが、これはdivの大きさであり、表示中の画像の縦幅と横幅ではありません
div.style.backgroundSize="50% 50%";やdiv.style.backgroundSize="contain";で表示した場合に表示されている大きさをpxで得たいです
画像はSVGです
どうしたらいいでしょうか?

<script> window.onload=function(){ var div = document.createElement("div"); div.id="backg"; div.style.width="50px"; div.style.height="50px"; div.style.backgroundImage="url(http://simpleicon.com/wp-content/uploads/android.svg)"; div.style.backgroundRepeat="no-repeat"; div.style.backgroundSize="50% 50%"; div.style.backgroundPosition="center"; document.body.appendChild(div); alert(backg.style.width); alert(backg.style.height); } </script>

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/08/29 00:19

img 要素を使ってみたらどうなりますか? (img 要素で表示すると言っている訳ではありません)
maisumakun

2021/08/29 00:41

> div.style.backgroundSize="50% 50%" であれば、計算すれば明らかかと思うのですが、求めることはそういうものではないのでしょうか?
qwrs

2021/08/29 00:50

↑どう計算式を考えますか あなたの指摘は当然私はpxで出せるということでいいですか?
maisumakun

2021/08/29 00:51

50pxの50%は25pxです。
qwrs

2021/08/29 00:51

>img 要素を使ってみたらどうなりますか? imgを使って見たらというのはimgにbackgroundImageをかけろという意味でしょうか?
qwrs

2021/08/29 00:54 編集

50% 50%は固定ではありません 30% 70%になったりしますがどう計算式を出しますか
qwrs

2021/08/29 00:55

もし簡単であればitagagaki氏の貼っていただいたような複雑なコードにならないと思います
退会済みユーザー

退会済みユーザー

2021/08/29 01:01

> imgを使って見たらというのはimgにbackgroundImageをかけろという意味でしょうか? そうではないです。回答欄にどのようなことか書いておきます。
maisumakun

2021/08/29 01:05

> どう計算式を出しますか パーセンテージをかければいいだけです。
qwrs

2021/08/29 01:14

簡単だとおっしゃられたのですから具体的なコード位提示いただきたく思います
maisumakun

2021/08/29 01:18

そもそも論として、「何のために」その値が必要なのでしょうか? (使い方によっては、「計算せずとも同等のことを実現できる」ということも考えられます)
qwrs

2021/08/29 01:21

「計算せずとも同等のことを実現できる」ことについて詳しくお聞かせいただけないでしょうか?
maisumakun

2021/08/29 01:24

> 計算せずとも同等のことを実現できる」ことについて詳しくお聞かせいただけないでしょうか? 値を使う目的がわからないと、それを実現可能なのかもわからないです。
qwrs

2021/08/29 01:33

大した目的ではないですが、background-sizeで表示したsvgに合わせてimgタグを生成し、縦幅と横幅を合わせたかっただけです
qwrs

2021/08/29 01:40

簡単だとおっしゃられたのに、なぜかその簡単なコードを提示していただけない理由は何かありますでしょうか?
maisumakun

2021/08/29 01:47

「div.style.backgroundSize="50% 50%";」のように与えていますが、これは実際にJavaScriptから与えるものなのでしょうか?それとも、CSSに書き付けてあるものなのでしょうか? > 簡単だとおっしゃられたのに、なぜかその簡単なコードを提示していただけない理由は何かありますでしょうか? 計算自体はすぐなのですが、背景でわからない部分が多いのでコードにするのはためらってしまいます。
qwrs

2021/08/29 01:49

JavaScriptですよ ワカラナイも何も算出方法さえわかってれば、それが全てだと思うのですが違いますか?
maisumakun

2021/08/29 01:50

はい、他の回答についているコメントを見ての通り後出しが多いので、せっかく書いても無駄になりそうな感じがしています。
qwrs

2021/08/29 01:52

無駄も何も簡単なことなんですから、お願いいたします 後出しのつもりもないですし、伝わり方が悪かっただけです
qwrs

2021/08/29 01:53

後出しだとおっしゃるならば、なぜあなたに理解できたのでしょうか それは後出しではないからです 一貫して伝えてますよ あなたの理解している通りでございます
maisumakun

2021/08/29 01:55 編集

> 後出しだとおっしゃるならば、なぜあなたに理解できたのでしょうか 後出しで出されたもの追いかけて、理解を補わざるを得ませんでしたし、今でもそれでいいのかのか確証はありません。
qwrs

2021/08/29 01:55

具体的にどこが後出しですか?
qwrs

2021/08/29 01:56

私は編集もしていません どこが後出しか教えて下さい
qwrs

2021/08/29 01:58

他者2名が勘違いされてしまわれたので本意を伝えた迄です
maisumakun

2021/08/29 02:03

他についたコメント同様の疑問として、これだけの質問を投げられるのに、(containのような場合はともかく)「パーセンテージなら掛け算で出すだけ」と伝えたにも関わらず、それをコードにできないのが不自然だと感じるのです。
qwrs

2021/08/29 02:05

ですから「パーセンテージなら掛け算で出すだけ」っていうコードを提示してください それをコードにできないことは不自然ではなくただのバカなんですよ、私は
qwrs

2021/08/29 02:07

出す気がなさそうなので閉じていいですか? itagaki氏にベストアンサーしますよ?
guest

回答2

0

質問のコメント欄で「img 要素を使ってみたらどうなりますか? (img 要素で表示すると言っている訳ではありません)」と書いた件です。

質問のコードの url にある svg 画像のオリジナルサイズを取得したいということと理解していますが、そうであれば JavaScript で以下のようにすれば取得できます。

JavaScript

1<script type="text/javascript"> 2 var image = new Image(); 3 image.onload = GetImageSize; 4 image.src = "http://simpleicon.com/wp-content/uploads/android.svg"; 5 6 function GetImageSize() { 7 // オリジナル画像のサイズ 8 var w = image.width; 9 var h = image.height; 10 } 11</script>

結果は:

イメージ説明

ブラウザは Chrome です。

投稿2021/08/29 01:06

編集2021/08/29 01:08
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

qwrs

2021/08/29 01:12

オリジナルサイズを取得したいわけじゃないんですよ 表示されてる(background-size)をかけた状態で小さくなって画面上に表示されているサイズが知りたいんです
退会済みユーザー

退会済みユーザー

2021/08/29 01:24

> 表示されてる(background-size)をかけた状態で小さくなって画面上に表示されているサイズが知りたいんです 質問欄に追記する形で、そのことを詳しく、ここに書いてないことは知り得ない第三者がクリアに理解できるように、書いてもらえませんか?
itagagaki

2021/08/29 01:28

「表示されている大きさをpxで得たいです」って質問に書かれていますけど…
qwrs

2021/08/29 01:30

background-sizeご存知ですよね? 例えばcontainを指定するとアスペクト比を保ったまま縮小されます その縮小されて表示された画像の縦幅と横幅が知りたいんですが
qwrs

2021/08/29 01:31

言ってる意味がわかりませんでしたか? 「表示されている大きさをpxで得たいです」というのはbackground-sizeを効かせた状態のpx単位を得たいということです
退会済みユーザー

退会済みユーザー

2021/08/29 01:33

タイトルの「JavaScript backgroundImageで表示された画像の縦幅と横幅」を読むと、自分には「質問のコードの url にある svg 画像のオリジナルサイズを取得したい」と思えたということです。
qwrs

2021/08/29 01:34

なるほど、そうでしたか、それはすみません それだったら簡単にできますね・・・
qwrs

2021/08/29 01:37

もし、私の言ってる事が理解できたら、 簡単か、そうじゃないかお答えいただけないでしょうか?
退会済みユーザー

退会済みユーザー

2021/08/29 01:53

挑戦的ですね。そこまで言える知識をお持ちなら、ここで聞かなくても自分で解決できるのではと思ってしまうのですが・・・
qwrs

2021/08/29 01:55

挑戦的ではありません。なぜそのように思われましたか?
qwrs

2021/08/29 01:55

私には解決する能力がありません なので答えをください
guest

0

ベストアンサー

この記事が参考になりそうです。

javascript — JavaScriptを使用してCSS背景画像のサイズを取得しますか?

ここに書き残されているgetBackgroundSizeをちょっと試してみたところ、まずjQueryが必要なのと、ちょっとバグがあるのか正しい結果が得られなかったんですが、アプローチは良さげですので、このコードをベースに修正してみるのもいいかと思います。


(追記)このアプローチは画像のオリジナルサイズとbackground-sizeから表示サイズを自分で計算してみているわけで、必ずしもブラウザ(レンダリングエンジン)の結果とぴったり一致するとは限らない、という問題はありますね。用途によると思いますが。


コードの間違いをFixしてみました。

jQuery

1function getBackgroundSize(selector, callback) { 2 var img = new Image(), 3 // here we will place image's width and height 4 width, height, 5 // here we get the size of the background and split it to array 6 backgroundSize = $(selector).css('background-size').split(' '); 7 8 // checking if width was set to pixel value 9 if (/px/.test(backgroundSize[0])) width = parseInt(backgroundSize[0]); 10 // checking if width was set to percent value 11 if (/%/.test(backgroundSize[0])) width = $(selector).width() * (parseInt(backgroundSize[0]) / 100); 12 // checking if height was set to pixel value 13 if (/px/.test(backgroundSize[1])) height = parseInt(backgroundSize[1]); 14 // checking if height was set to percent value 15 if (/%/.test(backgroundSize[1])) height = $(selector).height() * (parseInt(backgroundSize[1]) / 100); 16 17 img.onload = function () { 18 // check if width was set earlier, if not then set it now 19 if (typeof width == 'undefined') width = this.width; 20 // do the same with height 21 if (typeof height == 'undefined') height = this.height; 22 // call the callback 23 callback({ width: width, height: height }); 24 } 25 // extract image source from css using one, simple regex 26 // src should be set AFTER onload handler 27 img.src = $(selector).css('background-image').replace(/url(['"]*(.*?)['"]*)/g, '$1'); 28}

そして getBackgroundSize("#backg", (size) => alert(size.width + "," + size.height)); を試したら 25,25 と出ました。

投稿2021/08/29 00:35

編集2021/08/29 01:57
itagagaki

総合スコア8402

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

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

qwrs

2021/08/29 00:51

ありがとうございます
itagagaki

2021/08/29 01:26 編集

img.onload = function(){}を設定していて、そこには到達していて this.width this.height でサイズの取得はできているようですよ。512x512ですよね。
退会済みユーザー

退会済みユーザー

2021/08/29 01:27

失礼しました。回答はそうなっていますね。質問のコードを見てました。
qwrs

2021/08/29 02:03

私にはまったく理解できないコードですが、正しい答えが出ているようですね 勉強不足で申し訳ありませんでした
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問