UNPKG

spritesheet-creator

Version:
110 lines (83 loc) 2.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = smartCrop; /** * crops the fully transparent pixels from all borders of the image * @param {Jimp} options.image Jimp image * @return {Object} cropped.left, .right, .up, .down - amount of pixels cropped */ function smartCrop(_ref) { var image = _ref.image; var w = image.bitmap.width; var h = image.bitmap.height; var minPixelsPerSide = 1; // to avoid cropping completely the image, resulting in an invalid 0 sized image var leftPixelsToCrop = 0; var upPixelsToCrop = 0; var downPixelsToCrop = 0; var rightPixelsToCrop = 0; // up side var b = false; for (var y = 0; y < h - minPixelsPerSide; y++) { for (var x = 0; x < w; x++) { var colorXY = image.getPixelColor(x, y); var rgba = image.constructor.intToRGBA(colorXY); if (rgba.a > 0) { b = true; upPixelsToCrop = y; break; } } if (b) break; } // left side b = false; for (var _x = 0; _x < w - minPixelsPerSide; _x++) { for (var _y = upPixelsToCrop; _y < h; _y++) { var _colorXY = image.getPixelColor(_x, _y); var _rgba = image.constructor.intToRGBA(_colorXY); if (_rgba.a > 0) { b = true; leftPixelsToCrop = _x; break; } } if (b) break; } // down side b = false; for (var _y2 = h - 1; _y2 >= upPixelsToCrop + minPixelsPerSide; _y2--) { for (var _x2 = w - 1; _x2 >= leftPixelsToCrop; _x2--) { var _colorXY2 = image.getPixelColor(_x2, _y2); var _rgba2 = image.constructor.intToRGBA(_colorXY2); if (_rgba2.a > 0) { b = true; downPixelsToCrop = h - _y2 - 1; break; } } if (b) break; } // right side b = false; for (var _x3 = w - 1; _x3 >= 0 + leftPixelsToCrop + minPixelsPerSide; _x3--) { for (var _y3 = h - downPixelsToCrop; _y3 >= upPixelsToCrop; _y3--) { var _colorXY3 = image.getPixelColor(_x3, _y3); var _rgba3 = image.constructor.intToRGBA(_colorXY3); if (_rgba3.a > 0) { b = true; rightPixelsToCrop = w - _x3 - 1; break; } } if (b) break; } var widthOfRemainingPixels = w - (leftPixelsToCrop + rightPixelsToCrop); var heightOfRemainingPixels = h - (upPixelsToCrop + downPixelsToCrop); // do the real crop image.crop(leftPixelsToCrop, upPixelsToCrop, widthOfRemainingPixels, heightOfRemainingPixels); return { cropped: { up: upPixelsToCrop, down: downPixelsToCrop, right: rightPixelsToCrop, left: leftPixelsToCrop } }; }