Initial commit
This commit is contained in:
48
lib/assets/javascripts/signature_pad-extensions.js
Normal file
48
lib/assets/javascripts/signature_pad-extensions.js
Normal file
@@ -0,0 +1,48 @@
|
||||
/**
|
||||
* Crop signature canvas to only contain the signature and no whitespace.
|
||||
*
|
||||
* @returns The cropped canvas
|
||||
* @credit - https://github.com/szimek/signature_pad/issues/49#issuecomment-260976909
|
||||
*/
|
||||
SignaturePad.prototype.crop = function() {
|
||||
var canvas = this._ctx.canvas;
|
||||
|
||||
// First duplicate the canvas to not alter the original
|
||||
var croppedCanvas = document.createElement('canvas'),
|
||||
croppedCtx = croppedCanvas.getContext('2d');
|
||||
|
||||
croppedCanvas.width = canvas.width;
|
||||
croppedCanvas.height = canvas.height;
|
||||
croppedCtx.drawImage(canvas, 0, 0);
|
||||
|
||||
// Next do the actual cropping
|
||||
var w = croppedCanvas.width,
|
||||
h = croppedCanvas.height,
|
||||
pix = {x:[], y:[]},
|
||||
imageData = croppedCtx.getImageData(0,0,croppedCanvas.width,croppedCanvas.height),
|
||||
x, y, index;
|
||||
|
||||
for (y = 0; y < h; y++) {
|
||||
for (x = 0; x < w; x++) {
|
||||
index = (y * w + x) * 4;
|
||||
if (imageData.data[index+3] > 0) {
|
||||
pix.x.push(x);
|
||||
pix.y.push(y);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
pix.x.sort(function(a,b){return a-b});
|
||||
pix.y.sort(function(a,b){return a-b});
|
||||
var n = pix.x.length-1;
|
||||
|
||||
w = pix.x[n] - pix.x[0];
|
||||
h = pix.y[n] - pix.y[0];
|
||||
var cut = croppedCtx.getImageData(pix.x[0], pix.y[0], w, h);
|
||||
|
||||
croppedCanvas.width = w;
|
||||
croppedCanvas.height = h;
|
||||
croppedCtx.putImageData(cut, 0, 0);
|
||||
|
||||
return croppedCanvas;
|
||||
};
|
||||
Reference in New Issue
Block a user