2010-09-08 16 views
5

Adobe AIR'de canvas.toDataURL() kullanmak mümkün mü?Adobe AIR'de görüntünün base64'ünü almak için canvas.toDataURL() nasıl kullanılır?

Error: SECURITY_ERR: DOM Exception 18

+0

lütfen açıklamak, Örneğin:

? Belki de bu tuvali bağlantı kurabilecek başka bir konteynerin içine koymak daha iyi olacak mı? – Eugene

+0

bir görüntüyü yükler, görüntünün bir kısmını kesip, ardından görüntüyü tuvalden bir dosyaya, veritabanına veya bir sunucuya kaydeder – kefi

+1

tamam neden SECURITY_ERR aldığımı öğrendim http://www.whatwg.org/specs/web- apps/current-work/multipage/the-canvas-element.html # tuvalle-güvenlikle-öğeleri JS'yi veya JS için bazı sfw kitaplığını kullanarak web sunucusuna göndermeden önce resmi yerel olarak yeniden boyutlandırmanın bir yolu var mı? – kefi

cevap

4

Adobe AIR tuval API kullanılan görüntüler için aynı kökene zorlar: Ben çalıştığınızda

aşağıdaki hatayı alıyorum. Tuvalinizdeki başka bir alandan bir şey kullandıktan sonra piksel verilerini tekrar elde edemezsiniz. Bununla birlikte, Piksel verisini almak ve tuvali ImageData'ya dönüştürmek için Loader sınıfını kullanabilirsiniz. Bunu tarafından istiyorsun

function getDataURL(url, callback) { 
    var loader = new air.Loader(); 
    loader.contentLoaderInfo.addEventListener(air.Event.COMPLETE, function(event) { 
    var bitmapData = loader.content.bitmapData; 

    var canvas = document.createElement('canvas'); 
    canvas.width = bitmapData.width; 
    canvas.height = bitmapData.height; 
    var context = canvas.getContext('2d'); 
    var imageData = context.createImageData(canvas.width, canvas.height); 

    var dst = imageData.data; 
    var src = bitmapData.getPixels(bitmapData.rect); 
    src.position = 0; 

    var i = 0; 
    while (i < dst.length) { 
     var alpha = src.readUnsignedByte(); 
     dst[i++] = src.readUnsignedByte(); 
     dst[i++] = src.readUnsignedByte(); 
     dst[i++] = src.readUnsignedByte(); 
     dst[i++] = alpha; 
    } 

    context.putImageData(imageData, 0, 0); 
    callback(canvas.toDataURL()); 
    }); 
    loader.load(new air.URLRequest(url)); 
} 

window.addEventListener('load', function() { 
    getDataURL('http://www.google.com/images/logo.gif', function(dataURL) { 
    air.trace(dataURL); 
    }); 
}, false); 
+0

Bu kodu denedim ve bir TypeError aldım: Değer tanımlanmamış işlev çağrılarına izin vermiyor. ?? – user899641

+0

@ user899641 Bunun nedeni, "air.trace" yerine "trace" idi - cevabı düzenledim. –

İlgili konular