こんにちは、大きな画像を個々の小さなタイルに分割し、Filesaver.js を介してタイルをローカルに保存する関数を作成しています。ただし、何らかの理由で、for ループは最後のタイルのみを書き込み続けます。 tiles は 2 番目の画像タイルを表示します。
画像名(TestImage_0.jpg & TestImage_1.jpg)にもブロック番号を書き込んでいますが、タイル画像名はどちらもTestImage_1.jpgです。context.clearRectを試してみましたが、成功しませんでした。誰かがこのばかげた問題で私を助けてくれませんか? これが私の機能です:
var canvas = document.createElement('canvas');
var TileWidthpx = parseInt(document.getElementById("HorizPPT").value);
var TileHeightpx = parseInt(document.getElementById("VertPPT").value);
canvas.setAttribute('width', TileWidthpx);
canvas.setAttribute('height', TileHeightpx);
for(var i = 0; i < 2; i++)
{
var context = canvas.getContext('2d');
context.clearRect(0,0,canvas.width,canvas.height);
context.drawImage(CoverageImg,i*TileWidthpx,0,TileWidthpx,TileHeightpx,0,0,TileWidthpx,TileHeightpx);
canvas.toBlob(function(blob){saveAs(blob,'TestImage_'+i+'.jpg');}, "image/jpg");
alert('done: '+i);
}
アラートにはループの正しい「i」値が表示されますが...誰か、私が見逃しているJavaScriptの非同期問題ですか(アルゴリズムをPromiseに変換しましたが、何も解決しませんでした)