spritesheet-creator
Version:
Spritesheet Creator
110 lines (83 loc) • 2.63 kB
JavaScript
"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
}
};
}