2011-08-28 52 views
3

在某些機器上隨機出現問題時,canvas元素中的文本將無法在Lion中的Safari 5.1上完全呈現。我的意思是,字母看起來像沒有透明背景。這隻發生在某些機器上,有時文本在刷新後被清除。我只是使用fillText,它應該只是呈現Arial。在獅子的Safari 5.1上畫布上字體透明度問題的方法?

任何人都有相同的問題,並能夠想出一個解決方法?我試圖通過投擲3D變換(旋轉等)來觸發重繪,但沒有運氣。

這裏的截圖(約質量對不起,這是我被送到,但你應該明白我的意思)的方式正確渲染,有時不好的Safari瀏覽器渲染:

goodbad

+0

它可能會幫助診斷問題如果你可以發佈它的錯誤的外觀截圖。 –

+0

用屏幕截圖編輯 –

+0

據我所知,這不是「鋸齒狀和模糊」。字母本身看起來非常好,但它們沒有透明背景。不過,我不知道可能導致什麼。 –

回答

4

這是使用ATI GPU的Mac上的硬件加速問題。

我們運行相同的代碼,畫在畫布上:我們在裝有ATI圖形卡的Mac中遇到了問題;在MacMini上,改爲(配備英特爾GPU),繪圖非常完美。

如果您在Safari菜單的Debug - > Drawing/Compositing標誌下選中「Disable Canvas Accelerated Drawing」,您將會注意到文字周圍沒有更多的透明度錯誤。

Safari 6.0(在Mac OS X 10.7.4上)顯示相同的透明度問題。

- 更新 -
多次調查後,我們可以說,這不是一個GPU的問題,但蘋果的問題:「字體平滑」的LCD顯示器(AppleFontSmoothing設置)的應用程序。

在我們的觀察中,我們測試的兩臺機器:
1 - 的Mac Mini與飛利浦液晶
2 - 的iMac(有自己的液晶顯示器)

第一臺機器沒有顯示問題,因爲系統算法沒有將監視器識別爲LCD監視器。
但使用命令defaults -currentHost write -g AppleFontSmoothing -int 2強制AppleFontSmoothing,即使在Mac Mini上也會出現問題。

如果您不希望您的應用程序了顯示問題(mantaining畫布硬件加速),你可以設置「webkitFontSmoothing」屬性了畫布對象:

var canvas = document.getElementById('my-canvas'); 
canvas.style.webkitFontSmoothing = "antialiased" 
+0

@dc:我們正在研究這個圖形問題,但是我們的canvas應用程序是龐大而複雜的;如果我們可以複製問題一個簡單的片段,你能粘貼你的例子的代碼嗎? – bazzilla

+0

希望我可以,但不幸的是無法再訪問這個代碼,對不起! –

+0

好的,謝謝。 – bazzilla

0

假設你只有要使用的字符串數量有限,一種方法是使用預渲染的png而不是fillText命令。這樣做實際上會導致performance increase

你應該報告這是一個錯誤。我想它會很快修復。

+0

我希望:(不幸的是它是動態的文本,絕對提交一個錯誤 –