我想使用createjs動態縮小畫布上的某些圖像,然後存儲較小的圖像以在出於性能原因放大畫布時顯示。現在,我使用下面的代碼:使用createjs/easeljs調整圖像大小
var bitmap = createjs.Bitmap('somefile.png');
// wait for bitmap to load (using preload.js etc.)
var oc = document.createElement('canvas');
var octx = oc.getContext('2d');
oc.width = bitmap.image.width*0.5;
oc.height = bitmap.image.height*0.5;
octx.drawImage(bitmap.image, 0, 0, oc.width, oc.height);
var dataUrl = oc.toDataURL('image/png'); // very expensive
var smallBitmap = new createjs.Bitmap(dataUrl);
這工作,但:轉換爲image/png
時,並在實踐中使用過慢
的
toDataURL
操作是非常昂貴的(和我由於我嘗試過的所有設置的輸出質量不佳,因此無法轉換爲更快的image/jpeg
)當然,必須有一種方法來縮小圖像大小,而不必訴諸單獨的畫布代碼,然後手動進行轉換以繪製到createjs Bitmap對象上?
我也試過:
octx.drawImage(bitmap.image, 0, 0, oc.width, oc.height);
var smallBitmap = new createjs.Bitmap(oc);
但是,雖然非常快,這似乎並沒有實際工作(且在任何情況下,我不必每次都創建一個單獨的canvas
元素)
我想知道是否有方法可以使用drawImage
直接將縮減採樣版本的位圖繪製到createjs位圖實例中,而無需通過單獨的畫布對象或進行轉換字符串?
如果我理解正確,內部這是如何createjs cache
屬性工作(即使用drawImage
內部寫入DisplayObject),但我無法弄清楚如何使用它自己。
等等,爲什麼?爲什麼不使用['contex.drawImage(0,0,desiredwidth,desiredheight)'](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/drawImage),然後使用['canvas.toDataURL( )'](https://developer.mozilla.org/docs/Web/API/HTMLCanvasElement/toDataURL)來獲取調整大小的圖像?這是canvas自己的API已經可以做到的事情。 –
糾正我,如果我錯了,但這就是我上面基本上做的?我不確定你所指的上下文來自哪裏,但這就是'octx'的含義。另外,如前所述,我試圖避免對'canvas.toDataURL()'進行非常昂貴的調用。也很高興使用本地畫布例程,但需要一些方法將結果圖像包裝到createjs Bitmap對象中(因爲我使用createjs來管理其他所有內容)。 –
雖然我不明白「太慢」的部分,但實際上你做了什麼*這要求你經常運行它,以至於它的性能是一個問題? –