5

iPad や iPhone の Safari / Chrome などのモバイル デバイスで CamanJS スクリプトを実行する際に問題が発生し、何日も解決しようとしています。

テスト スクリプトは非常に単純です。1) ブラウザー ファイルで選択した画像を受け入れる 2) FileData を使用して画像ソースを取得し、それをキャンバスに描画してから、Caman("#sample") オブジェクトをインスタンス化します 3) フィルターを実行します (その画像の onLoad、またはボタンをクリックして手動で)

すべてのデスクトップ ブラウザーで問題なく動作し、フィルターも正常に適用されますが、iOS Safari などのモバイル デバイスで試してみると、Caman オブジェクトをインスタンス化しようとすると、既存のキャンバス #sample が空白になり、元の状態に戻ります。キャンバスのデフォルトの背景色で、画像はまったく読み込まれていません。イメージがキャンバスに描画される前、イメージ onLoad、またはキャンバス イメージが正常に描画された後にオンデマンドで Caman オブジェクトをインスタンス化しようとしましたが、最終結果は同じです - キャンバスが空白になります。

以下は私のサンプルコードです、誰かアドバイスしてもらえますか? 親切なお力添えありがとうございます。

<script>
var caman = null;

function handleUpload(evt) {
    var target = (evt.target) ? evt.target : evt.srcElement;
    var files = target.files; // FileList object
    var field = target.id;
    var curCount = target.id.replace(/\D+/, "");

    for (var i = 0, f; f = files[i]; i++) {
        var reader = new FileReader();
        reader.onload = (function(theFile) {
            return function(e) {
                renderImage(e.target.result);
            };
        })(f);

        reader.readAsDataURL(f);
    }
}

function renderImage(imagedata) {
    var canvas = document.getElementById("sample");
    var ctx = canvas.getContext("2d");

    // Render Preview
    var previewImage = new Image();
    previewImage.src = imagedata;
    previewImage.onload = function() {
    ctx.drawImage(previewImage, 0, 0, previewImage.width, previewImage.height);
        caman = Caman("#sample", function () { this.sunrise().render(); });
    };
}

function testProcess() {
    //caman = Caman("#sample", function () { this.sunrise().render(); }); 
    if (caman) { 
        caman.sunrise().render();
    }
}

</script>


<form>
<input id="photo" name="photo" value="" type=file size="30" maxlength="50">
</form>

<canvas id="sample" width=300 height=300 style="background-color: #aaaaaa;"></canvas>

<br><br><a href="javascript:void(0);" onClick="testProcess();">Test Process</a><br><br>

<script>
document.getElementById('photo').addEventListener('change', handleUpload, false);
</script>
4

1 に答える 1