2017-04-21 4 views
-1

JavaScriptを初めて使用しています。ここ数日、私はすべてのタブのスクリーンショットを取り込んでこのデータをクリップボードにプッシュするChromeの拡張機能を作成します。各画像の重さが多いので、圧縮することに決めました。しかし、それは動作しません。 誰でも問題の原因を知ることができますか?イメージをプログラムで圧縮し、JavaScriptを使用してクリップボードにプッシュするにはどうすればよいですか?

function copyToClipBoard(dataImage){ 
    document.body.appendChild(input); 
    input.style.position = 'fixed'; 
    input.style.opacity = 0; 

    var newImage = new Image(); 
    newImage.src = dataImage; 
    console.log (newImage); 

    var canvas = document.createElement('canvas'); 
    var ctx = canvas.getContext("2d").drawImage(newImage, 0, 0); 
    input.value = canvas.toDataURL('image/jpeg', 0.1); 
    console.log(input.value); 
    input.select(); 
    document.execCommand('Copy'); 
    document.body.removeChild(input); 
} 
+3

実際に圧縮を行っているコードはありません...「動作しません」とはどういう意味ですか?どのようなエラーメッセージが表示されますか? –

+0

このコードをデバッグしているときに、コンソールに黒いボックスとして表示される画像へのリンクが表示されます。この行は圧縮ですinput.value = canvas.toDataURL( 'image/jpeg'、0.1); – Sergey

+0

イメージがキャンバスに描画される前にロードされるのを待っているわけではありません。 'newImage.onload = function(){varキャンバス... removeChild(入力)};'あなたは 'canvas.width = img.width; canvas.height = img.height; ' – Kaiido

答えて

0

ありがとうございます。今はすべてのことが働く。問題は、絵を描く前にロードする時間がないことでした。

function copyToClipBoard(dataImage){ 
    document.body.appendChild(input); 
    input.style.position = 'fixed'; 
    input.style.opacity = 0; 

    var newImage = new Image(); 
    newImage.src = dataImage; 
    console.log (newImage); 

    newImage.onload = function(){ 
     var canvas = document.createElement('canvas'); 
     canvas.width = 800; 
     canvas.height = 500; 
     var ctx = canvas.getContext("2d").drawImage(newImage, 0, 0, newImage.width, newImage.height, 0, 0, canvas.width, canvas.height); 
     input.value = canvas.toDataURL('image/jpeg', 0.9); 
     console.log(input.value); 
     input.select(); 
     document.execCommand('Copy'); 
     document.body.removeChild(input); 
    } 
} 
関連する問題