最近一直在測試 Canvas 在手機上的使用,主要是要節省一點上傳的頻寬問題。畢竟中華電信永遠擋在你前面,而且無論是哪一家電信業者,在 3G 的速度上,人多的環境下實在是很悲劇的一件事情。
然後,我也發現了 iOS 6 之後的 Safari Mobile 有點難搞。
iOS Resource Limit
真正的原因在這裡,所以我搞了老半天,就是因為他的限制問題,所以無法將手機裡面高解析度的圖片,放到 Safari Mobile 裡面。
所以,有個神人做了解法,
iOS6でメガピクセル画像をCanvasに描画するとおかしくなってしまう件と、その対処
他最主要的目的就是,把超過 1024x1024 畫素以上的圖片,利用 Canvas 先做二次採樣(subsampled),避開一些問題(主要是透明度,不過 jpeg 倒是沒這問題),接著是垂直取樣比例錯誤的問題。他的解決方式也很妙,是利用 1x1 的 Canvas 然後把圖放進去,計算尺寸之後,再把 Canvas 的資料拿出來(getImageData)然後重新放大成指定尺寸。
不過嚴格來說不能說是放大,只是把原圖尺寸,照 Canvas 垂直運算的比例去調整,然後最後把資料寫回 Canvas 或是圖片(使用 DataURL 的方式)。這個方法我測試過 iOS 6,確實是可以解決相當多問題。另外,也測試了 Android 比較低階的版本,不過,由於 window.URL
與 window.URL.createObjectURL
這兩個方法,在 Android Browser 4.0 之後才支援(悲劇
不過 iOS 5 以前也不能用就是了,因為沒有 <input type="file">
可以用,也是一樣悲劇就是了(哭
結論
鍊結裡面有 github,作者這個東西是純的 javascript,在先進瀏覽器都可以用,對了,IE10 以後才可以用喔(IE 9 不算先進瀏覽器喔!IE 實在不是我要婊你