iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 23
1
Modern Web

PixiJS,方便好用的 WebGL 內容產生工具系列 第 23

[PixiJS - Day-23] 將 PixiJS 的畫面匯出

  • 分享至 

  • xImage
  •  

本篇講的是將 PixiJS 的畫面匯出,會獨立成一篇是因為:
將 PixiJS 的畫面匯出,不只是將對應的 canvas 執行 toDataURL() 的方法就好


有時會需要將PixiJS 產生的畫面存下來
前文 提到, app.view 會回傳 HTMLCanvasElement 物件。
toDataURL()HTMLCanvasElement 將圖片匯出的方法

所以,這樣的使用方式完全合理:

app.view.toDataURL();

PC 沒問題、Android 手機沒問題
可是在 iPhone Safari 會有問題:
alt

在 iPhone 的 Safari 匯出的圖會上下相反

討論串:
https://github.com/pixijs/pixi.js/issues/2951

解法:
方法1: 先用 app.renderer.extract.canvas() 取得 canvas,再使用 toDataURL() 方法匯出圖片
方法2: 使用 app.renderer.extract.base64() 匯出圖片

不論是 PIXI.WebGLRenderer 或 PIXI.CanvasRenderer 都有實做相同功能,不用擔心在 canvas / WebGL 其中一個模式正常,另一個模式會壞掉


PIXI.extract.WebGLExtract / PIXI.extract.CanvasExtract 的存圖方法:
canvas()、base64()、image()
存圖等功能,實際上都是先取得對應的 HTMLCanvasElement 後,再進行操作

程式碼:
WebGLExtract / CanvasExtract

48.    /**
49.     * Will return a a base64 encoded string of this target. It works by calling
50.     *  `WebGLExtract.getCanvas` and then running toDataURL on that.
51.     *
52.     * @param {PIXI.DisplayObject|PIXI.RenderTexture} target - A displayObject or renderTexture
53.     *  to convert. If left empty will use use the main renderer
54.     * @return {string} A base64 encoded string of the texture.
55.     */
56.    base64(target)
57.    {
58.        return this.canvas(target).toDataURL();
59.    }

所以若是要存成 image/jpeg 與設定壓縮時,
可使用 app.renderer.extract.canvas().toDataURL("image/jpeg"); 之類的方法

  • 前半 app.renderer.extract.canvas() 取得正確的 HTMLCanvasElement
  • 後半 .toDataURL("image/jpeg") 則是標準 toDataURL 的方法

上一篇
[PixiJS - Day-22] PixiJS 粒子效果
下一篇
[PixiJS - Day-24] 在專案上運用 PixiJS,以及各版本瀏覽器相容的作法
系列文
PixiJS,方便好用的 WebGL 內容產生工具31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言