1 line
2.9 KiB
Plaintext
1 line
2.9 KiB
Plaintext
{"version":3,"file":"getCanvasBoundingBox.mjs","sources":["../../src/media/getCanvasBoundingBox.ts"],"sourcesContent":["import { BoundingBox } from './BoundingBox';\n\nimport type { ICanvas } from '@pixi/settings';\n\nfunction checkRow(data: Uint8ClampedArray, width: number, y: number)\n{\n for (let x = 0, index = 4 * y * width; x < width; ++x, index += 4)\n {\n if (data[index + 3] !== 0) return false;\n }\n\n return true;\n}\n\nfunction checkColumn(data: Uint8ClampedArray, width: number, x: number, top: number, bottom: number)\n{\n const stride = 4 * width;\n\n for (let y = top, index = (top * stride) + (4 * x); y <= bottom; ++y, index += stride)\n {\n if (data[index + 3] !== 0) return false;\n }\n\n return true;\n}\n\n/**\n * Measuring the bounds of a canvas' visible (non-transparent) pixels.\n * @memberof PIXI.utils\n * @param {PIXI.ICanvas} canvas - The canvas to measure.\n * @returns {PIXI.utils.BoundingBox} The bounding box of the canvas' visible pixels.\n * @since 7.1.0\n */\nexport function getCanvasBoundingBox(canvas: ICanvas): BoundingBox\n{\n // https://gist.github.com/timdown/021d9c8f2aabc7092df564996f5afbbf\n\n const { width, height } = canvas;\n\n const context = canvas.getContext('2d', {\n willReadFrequently: true,\n });\n\n if (context === null)\n {\n throw new TypeError('Failed to get canvas 2D context');\n }\n\n const imageData = context.getImageData(0, 0, width, height);\n const data = imageData.data;\n\n let left = 0;\n let top = 0;\n let right = width - 1;\n let bottom = height - 1;\n\n while (top < height && checkRow(data, width, top)) ++top;\n if (top === height) return BoundingBox.EMPTY;\n while (checkRow(data, width, bottom)) --bottom;\n while (checkColumn(data, width, left, top, bottom)) ++left;\n while (checkColumn(data, width, right, top, bottom)) --right;\n\n ++right;\n ++bottom;\n\n return new BoundingBox(left, top, right, bottom);\n}\n"],"names":[],"mappings":";AAIA,SAAS,SAAS,MAAyB,OAAe,GAC1D;AACa,WAAA,IAAI,GAAG,QAAQ,IAAI,IAAI,OAAO,IAAI,OAAO,EAAE,GAAG,SAAS;AAExD,QAAA,KAAK,QAAQ,CAAC,MAAM;AAAU,aAAA;AAG/B,SAAA;AACX;AAEA,SAAS,YAAY,MAAyB,OAAe,GAAW,KAAa,QACrF;AACI,QAAM,SAAS,IAAI;AAEV,WAAA,IAAI,KAAK,QAAS,MAAM,SAAW,IAAI,GAAI,KAAK,QAAQ,EAAE,GAAG,SAAS;AAEvE,QAAA,KAAK,QAAQ,CAAC,MAAM;AAAU,aAAA;AAG/B,SAAA;AACX;AASO,SAAS,qBAAqB,QACrC;AAGU,QAAA,EAAE,OAAO,WAAW,QAEpB,UAAU,OAAO,WAAW,MAAM;AAAA,IACpC,oBAAoB;AAAA,EAAA,CACvB;AAED,MAAI,YAAY;AAEN,UAAA,IAAI,UAAU,iCAAiC;AAIzD,QAAM,OADY,QAAQ,aAAa,GAAG,GAAG,OAAO,MAAM,EACnC;AAEnB,MAAA,OAAO,GACP,MAAM,GACN,QAAQ,QAAQ,GAChB,SAAS,SAAS;AAEtB,SAAO,MAAM,UAAU,SAAS,MAAM,OAAO,GAAG;AAAK,MAAA;AACrD,MAAI,QAAQ;AAAQ,WAAO,YAAY;AAChC,SAAA,SAAS,MAAM,OAAO,MAAM;AAAK,MAAA;AACxC,SAAO,YAAY,MAAM,OAAO,MAAM,KAAK,MAAM;AAAK,MAAA;AACtD,SAAO,YAAY,MAAM,OAAO,OAAO,KAAK,MAAM;AAAK,MAAA;AAErD,SAAA,EAAA,OACF,EAAE,QAEK,IAAI,YAAY,MAAM,KAAK,OAAO,MAAM;AACnD;"} |