jimp icon indicating copy to clipboard operation
jimp copied to clipboard

[Request] Return autocrop() coordinates (cropped area X, Y, W and H)

Open tgrajewski opened this issue 4 years ago • 1 comments

Is your feature request related to a problem? Please describe. I'm generating texture atlasses from other smaller images. I would like to crop the smaller images from surrounding transparency, which .autocrop() does fine, but I would need the X and Y coordinates of the cropped image relative to its original size.

Describe the solution you'd like Since .autocrop() returns image instance, it can't return the coordinates, so maybe cropped instances could have .cropX, .cropY, .cropWidth, .cropHeight properties? Anything that would give me the crop X and Y coords will be fine (without scanning the images again).

Alternatively, there could be a new method, maybe named boundingBox() or something. This new method would return crop coordinates and size without cropping the image. That method would need to do the same calculations and accept the same arguments as .autocrop(). The result of the new .boundingBox() call could be passed to the .crop(x, y, w, h) method to do actual cropping.

Describe alternatives you've considered I don't see a way with current API to get the crop coords.

tgrajewski avatar Oct 03 '19 18:10 tgrajewski

You can do that with a little hack, but i agree that this feature is usefull

const jimp = require('jimp')

jimp.prototype.__crop = jimp.prototype.crop
jimp.prototype.crop = function (x, y, w, h, cb) {  
  this.cropArea = { x, y, w, h }
  return this.__crop(x, y, w, h, cb)
}

jimp.read('image.png', (error, image) => {  
  image.autocrop(0, (error, image) => {    
    image.cropArea // cropArea = { x, y, w, h }
  })
})


modjke avatar Dec 18 '19 08:12 modjke