2014-05-13 21 views
5

Mobil bir uygulama oluşturuyorum. Kullanıcı mobil cihazdan bir fotoğraf seçebiliyor ve onu bulanıklaştırıyorum .... Sorun, kullanıcı büyük bir resim seçtiğinde (2'den fazla) MB), uygulama. kazasında.Canvas drawImage Büyük görüntülerde kilitlenme

JS Kod:

convert_local_image_base64: function(url, callback) { 
    var canvas = document.createElement('CANVAS'), 
      ctx = canvas.getContext('2d'), 
      img = new Image; 
    img.crossOrigin = 'anonymous'; 
    img.onload = function() { 
     canvas.height = img.height; 
     canvas.width = img.width; 
     ctx.drawImage(img, 0, 0); 
     var dataURL = canvas.toDataURL('image/png'); 
     callback.call(this, dataURL); 
     canvas = null; 
    }; 
    img.src = url; 
}, 

Yani yapar benzer bir faaliyet gerçekleştirmek için başka bir yoludur?!. PC AÇIK

cevap

3

: - Bir tuval üzerinde çizmek için birden çok büyük boyutlu resimleri (2'den fazla MB) denedik
. Ben de onun dataURL'ını almayı ve farklı tuvallerde yeniden çizmeyi denedim. Her şey benim için iyi çalıştı. (IE11, Chrome ve Firefox üzerinde çalıştı.)

Lütfen Kökeni kaynaklı kaynak paylaşımı (CORS) ile uğraşmadığınızdan emin olun.

Ayrıca, tuval üzerine çözünürlüklerle ilgili yığın akışında da bazı yayınlar buldum. Bir tuval elemanı için

maksimum boyut: -

Maximum size of a <canvas> element

Is there a max size for images being loaded onto canvas on iPhone?

EDITED: Mobile AÇIK mobil cihazlar için tuval için kısıtlamalar İşte
Aygıtları- olduğunu 256 MB'den daha küçük aygıtlar için 3 megapiksel ve 256'dan büyük veya eşit olan cihazlar için 5 megapiksel MB RAM. Örneğin, Apple'ın eski donanımını desteklemek istiyorsanız, tuvalinizin boyutu 2048 × 1464 değerini aşamaz.

Umarım bu kaynaklar sizi dışarı çekmenize yardımcı olur.

+0

Kodu bilgisayardaki bir mobil aygıtta kullanıyorum. – Moussawi7

+0

@ Moussawi7 Lütfen düzenlenmiş cevabımı kontrol edin. –

1

Android aygıtlarda tuval drawImage işleviyle boyut sınırı var gibi görünüyor. 3 mega piksel sınırlaması vardır, ancak sınır, çizim boyutunda bir resim değil, çizim boyutunda kullanılır. Örneğin, resimdeki resmin boyutunu etkilemez.

ctx.drawImage (imagebiggerthan3mp, 100, 100, 63, 63, 50, 50, 50, 50); // hala Aw Snap! android çöküyor!