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

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

新規登録して質問してみよう
ただいま回答率
85.35%
React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

4358閲覧

html2canvasで出力したイメージがブランクになってしまう

action_moto

総合スコア8

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2020/03/10 01:36

前提・実現したいこと

現在、reactで、npmパッケージであるhtml2canvasを使用し、htmlタグをイメージとして出力しようとしています。
色々試したのですが、行き詰まってしまいました。ご存知の方は、ぜひ教えて頂けると有り難いです。
宜しくお願いします!!!

発生している問題・エラーメッセージ

しかしながら、出力されるイメージは、どれも真っ白なものになってしまいます。

該当のソースコード

jsx

1 2class TodoApp extends React.Component { 3 4 handleOutPut = () => { 5 const input = document.getElementById('page') 6 html2canvas(input, {letterRendering: 1, allowTaint: true, useCORS: true} ) 7 .then((canvas) => { 8 var imgData = canvas.toDataURL('image/png') 9 document.getElementById("result").src = imgData 10 }) 11 } 12 13 render() { 14 return ( 15 <div> 16 <div id="page"> 17 <div>a</div> 18 <div>i</div> 19 <div>u</div> 20 <div>e</div> 21 <div>o</div> 22 </div> 23 <Button onClick={this.handleOutPut}>キャプチャ</Button> 24 <img alt='outimage' id="result" src="" width="300px" height="300px"/> 25 </div> 26 ) 27 } 28} 29

試したこと

・他のbase64のデータを直接<img/>のsrcに貼り付け、表示されることを確認してます
・上記のimgDataを他のデコードサイトで表示すると、同じ様に真っ白な画面になってしまいました

・そこで、html2canvasに問題があると考え、クロスオリジンではないのですが、とりあえずクロスオリジンをtrueにしてみましたが、同じ様に真っ白になり、変化はありませんでした

補足情報(FW/ツールのバージョンなど)

package.jsonは以下の様になっています

"dependencies": {
"html2canvas": "^1.0.0-rc.5",
"react": "^16.13.0",
"react-dom": "^16.13.0",
"react-scripts": "3.4.0"
},

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

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

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

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

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

guest

回答1

0

ベストアンサー

真っ白というか、左端に何か表示されてませんか? たぶん、#page の横幅が画面いっぱいなのに、width: 300px で表示してるせいだと思います。試しに #page に以下の CSS を当てたらちゃんと表示されました。

css

1#page { 2 display: inline-block; 3 width: 300px; 4 height: 300px; 5}

投稿2020/03/10 20:54

hoshi-takanori

総合スコア7901

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

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

action_moto

2020/03/11 04:54 編集

回答ありがとうございます! 上記のアドバイスを元に、#resultと同じ様に#pageのサイズを300px平方にしてやって見ましたが、やはり真っ白に表示されます。直前のinputには、ちゃんとhmtlタグが入っているのを確認できています。 また、その後ろのimgDataに入っているbase64をデコードすると、真っ白な画像が出力されてしまいます。 そこでhtml2canvasを疑っているのですが、git版ではなく、npmでインストールしているのですが、そこら辺ご存知では無いでしょうか?
hoshi-takanori

2020/03/11 05:01

create-react-app して、yarn add html2canvas して、App.js と App.css を書き換えたら動きました。npm でも変わらないはずですけど…。ちなみにブラウザは Mac の Safari と Chrome と Firefox です。
action_moto

2020/03/11 07:29 編集

ありがとうございます。 ほぼ同じ環境なので、もともとcomponent下で書いていたコードをapp.js内で書いてみたところ、ちゃんと表示されました!さらに別のコンポーネントを作って書いて見ましたが、同じ様に真っ白になってしまいました。もしかしたら、書き出し先がapp.jsになっているとかあるのでしょうかね。 本来はコンポーネント内でできるようにしたいのですが、とりあえず原因が分かったので、今後の課題とします。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問