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

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

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

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

リサイズ

コントロール、ウィンドウ、フォームやスクリーンのサイズ変更を指します。

Q&A

0回答

1075閲覧

画像リサイズができない。(canvas)。(Nuxt.js)

ff7575

総合スコア123

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

リサイズ

コントロール、ウィンドウ、フォームやスクリーンのサイズ変更を指します。

0グッド

0クリップ

投稿2020/07/05 19:52

編集2020/07/10 21:06

やりたいこと

① canvasを用いて、画像のリサイズをする。

② それをプレビュー表示する。

できないこと

画像リサイズ後の画像が、プレビュー表示されない。

したがって、リサイズできているか分からない。

vue

1<template> 2...... 3 //入力は問題ないため、<input>タグは割愛させていただく。 4 5 //noResizeImgはちゃんとプレビュー表示される 6 <img class="previewImage" :src="noResizeImg"/> 7 8 //このresizeImgが表示されない 9 <img class="previewImage" :src="resizeImg"/> 10</template> 11 12<scirpt> 13..... 14 setAndResizeImg(event){ 15 16 //① 画像ファイルをfileに入れる 17 const file = event.target.files[0]; 18     19     //② ちゃんと入っているかを確認するため、リサイズなしで表示する 20 this.noResizeImg = window.URL.createObjectURL(file); 21 22 //ここからリサイズ処理に入る 23 if (file.type.startsWith("image/")){ 24 25 //③ imgとreaderをそれぞれ用意する 26 const img = new Image(); 27 const reader = new FileReader(); 28 29 //④ fileを、readerにいれる。 30 reader.readAsDataURL(file); 31 32 //⑤ リサイズしたfileを読み込み直す処理? → reader.onload 33 reader.onload = (event) => { 34 35 //⑥ img.srcにfileをいれる 36 img.src = event.target.result; 37 img.onload = () => { 38 39 //⑦-① 幅が、マックス幅よりも小さい時、そのまま入れる。 40 if(img.width < this.maxWidth){ 41 42        //この分岐を通ったら、ちゃんと<img:src="resizeImg">に表示される 43 this.resizeImg = img.src; 44 45 }else{ 46           //⑦-② 幅が、マックス幅よりも大きい時リサイズする。 47 48            //////この分岐のとき、プレビュー表示されなくなる。 49 50 //⑧ リサイズ処理 51 52 //⑧-① キャンバスをつくる(Nuxtでは作れているか?) 53 const canvas = document.createElement('canvas'); 54 const ctx = canvas.getContext('2d'); 55 56 //⑧-② 必要な変数宣言 57 let ratio = 0; 58 let width = 0; 59 let height = 0; 60 61 //⑧-③ ヨコ長の画像 62 if(img.width > img.height){ 63 ratio = img.height / img.width; 64 width = this.maxWidth; 65 height = this.maxWidth * ratio; 66 } else { 67 68 //⑧-④ タテ長の画像 69 ratio = img.width / img.height; 70 width = this.maxHeight * ratio; 71 height = this.maxHeight; 72 } 73 //⑧-⑤ リサイズ後の大きさを、キャンバスの大きさにセット。 74 canvas.width = width; 75 canvas.height = height; 76 77 //⑧-⑥ キャンバスにリサイズ画像を描く 78 79         ctx.drawImage(image,0,0,image.width, 80 image.height,0,0,width,height); 81    82           //⑨ リサイズ画像を入れる〜終了〜 これが表示されない 83         this.resizeImg = canvas.toDataURL('image.jpg'); 84 85 } 86 } 87 } 88 89.......... 90
  • Safariで行っています。

現在も、解決案を探しておりますが、どこに問題があるのか見当ついておりません。

「ここがおかしいかも」、というご意見でも大変助かります。

お手数おかけしますが、ご助力いただけないでしょうか。よろしくお願いします。

不備、例えば、「ここのコードを載せないのはおかしい」などというご意見ありましたら

なんなりとお申し付けください。

改めて、よろしくお願いいたします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問