2012-09-23 9 views
8

Provo a eseguire il rendering di un'immagine locale caricata con un oggetto FileReader su una tela su Safari Mobile su iOS6. Ma ogni immagine con URL dati viene visualizzata in scala verticale. è un insetto? Su Chrome è reso correttamente.Mobile Safari esegue il rendering di <img src="data:image/jpeg;base64..."> ridimensionato su tela?

ScreenShot from iOS6 (sopra: Tela, qui di seguito: Immagine originale)

Esiste un modo di lavorare, a questo problema? è un insetto?

Se ridimensiono l'immagine sul dispositivo per prima cosa con l'app "PhotoWizard" (ridimensiona a 720px larghezza), il Canvas lo rende correttamente. Sembra essere un problema con il formato immagine o le immagini scattate con la fotocamera App:

suggerimenti sperimentate Jake Archibald, sembra un po 'meglio, ma viene comunque verticalmente ridimensionato:

L'ho provato oggi su un Galaxy Nexus con Android 4.1.1 installato. Funziona come previsto, quindi questo sembra davvero come un problema di Safari per cellulare:

+0

Ho trovato cose simili quando provo a ridimensionare un'immagine in JS vedi – NimmoNet

+0

Qualsiasi soluzione alternativa? Ho provato ad aggiungere un ritardo di cinque secondi tra "onload" e ottenere l'immagine w/h e renderla sul canvas. Non aggiustarlo. Ho anche pensato a "requestAnimationFrame" prima di rendere l'immagine sulla tela, non l'ho nemmeno riparata. –

+0

Tentativo di utilizzare un URL Blob come questo: window.URL.createObjectURL (file) ... e caricarlo in img.src Risultati nello stesso errore, il rendering di un'immagine con "Blob-src" ottiene anche il rendering in scala verticale su tela –

risposta

29

Questo potrebbe essere correlato alla restrizione che risiede nella limitazione delle risorse iOS Safari. Secondo il seguente link, i file JPEG superiori a 2 milioni di pixel saranno sottocampionati.

https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/CreatingContentforSafarioniPhone/CreatingContentforSafarioniPhone.html#//apple_ref/doc/uid/TP40006482-SW15

che sto dubitando quella tela in Safari non può trattare correttamente con questo subsampling.

Ho creato qualche soluzione per rilevare se l'immagine è sottocampionata o meno e allungarla alla dimensione originale.

https://github.com/stomita/ios-imagefile-megapixel

+0

Quando si utilizza la libreria sopra, il proprio esempio diventa: http://jsbin.com/aqirel/13 OK con il mio iPhone5 (iOS 6.0). – stomita

+1

Creata una demo online di un altro widget di caricamento file che ho appena scritto. Può rilevare il problema di rendering di iOS. Nel caso in cui l'immagine non sembra essere stata renderizzata correttamente, l'immagine viene rieseguita con una correzione applicata. Raddoppiare la scala per due sembra aggiustarlo, vedere le fonti per i dettagli ... http://sandbox.juurlink.org/html5imageuploader/ –

+0

@stomita Ho usato la tua libreria e mentre ha risolto il problema dell'altezza verticale, l'immagine è mostrando in risoluzione molto scarsa/bassa. Sai come farei di alto livello per mantenere la risoluzione? –

0
var cnv = document.createElement("canvas"); 
     ctx = cnv.getContext("2d"); 

     image = new Image(); 

     image.src = src; 

     image.onload = function() { 

      var size = scaleSizeRatio(image.width,image.height); 
      cnv.width = size[0]; 
      cnv.height = size[1]; 
      ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, image.width , image.height); 

      var div = container; 
      div.appendChild(cnv);  

     } 

ctx.drawImage (immagine, 0, 0, image.width, image.height, 0, 0, image.width, image.height); Questa funzione risolverà il problema di spremitura in iPod più di 3 Mb. Innanzitutto, se l'immagine è superiore a 3 Mb, calcola la larghezza e l'altezza ridimensionate per l'immagine e imposta la larghezza e l'altezza sull'area di disegno. Quindi chiama la funzione drawImage. Dare all'immagine finale quello che ti aspettavi ...

Problemi correlati