mirror of
https://github.com/scratchfoundation/scratch-paint.git
synced 2024-12-23 14:02:50 -05:00
38 lines
1.2 KiB
JavaScript
38 lines
1.2 KiB
JavaScript
|
import paper from '@scratch/paper';
|
||
|
|
||
|
const rowBlank_ = function (imageData, width, y) {
|
||
|
for (let x = 0; x < width; ++x) {
|
||
|
if (imageData.data[(y * width << 2) + (x << 2) + 3] !== 0) return false;
|
||
|
}
|
||
|
return true;
|
||
|
};
|
||
|
|
||
|
const columnBlank_ = function (imageData, width, x, top, bottom) {
|
||
|
for (let y = top; y < bottom; ++y) {
|
||
|
if (imageData.data[(y * width << 2) + (x << 2) + 3] !== 0) return false;
|
||
|
}
|
||
|
return true;
|
||
|
};
|
||
|
|
||
|
// Adapted from Tim Down's https://gist.github.com/timdown/021d9c8f2aabc7092df564996f5afbbf
|
||
|
// Trims transparent pixels from edges.
|
||
|
const trim = function (raster) {
|
||
|
const width = raster.width;
|
||
|
const imageData = raster.getImageData(raster.bounds);
|
||
|
let top = 0;
|
||
|
let bottom = imageData.height;
|
||
|
let left = 0;
|
||
|
let right = imageData.width;
|
||
|
|
||
|
while (top < bottom && rowBlank_(imageData, width, top)) ++top;
|
||
|
while (bottom - 1 > top && rowBlank_(imageData, width, bottom - 1)) --bottom;
|
||
|
while (left < right && columnBlank_(imageData, width, left, top, bottom)) ++left;
|
||
|
while (right - 1 > left && columnBlank_(imageData, width, right - 1, top, bottom)) --right;
|
||
|
|
||
|
return raster.getSubRaster(new paper.Rectangle(left, top, right - left, bottom - top));
|
||
|
};
|
||
|
|
||
|
export {
|
||
|
trim
|
||
|
};
|