Add trimOffsetLeft, trimOffsetTop to trim response #914

This commit is contained in:
Lovell Fuller 2018-10-02 20:16:00 +01:00
parent c431909f35
commit 0725378257
5 changed files with 20 additions and 0 deletions

View File

@ -196,6 +196,7 @@ Returns **Sharp**
## trim ## trim
Trim "boring" pixels from all edges that contain values similar to the top-left pixel. Trim "boring" pixels from all edges that contain values similar to the top-left pixel.
The `info` response Object will contain `trimOffsetLeft` and `trimOffsetTop` properties.
### Parameters ### Parameters

View File

@ -361,6 +361,7 @@ function extract (options) {
/** /**
* Trim "boring" pixels from all edges that contain values similar to the top-left pixel. * Trim "boring" pixels from all edges that contain values similar to the top-left pixel.
* The `info` response Object will contain `trimOffsetLeft` and `trimOffsetTop` properties.
* @param {Number} [threshold=10] the allowed difference from the top-left pixel, a number greater than zero. * @param {Number} [threshold=10] the allowed difference from the top-left pixel, a number greater than zero.
* @returns {Sharp} * @returns {Sharp}
* @throws {Error} Invalid parameters * @throws {Error} Invalid parameters

View File

@ -102,6 +102,8 @@ class PipelineWorker : public Nan::AsyncWorker {
// Trim // Trim
if (baton->trimThreshold > 0.0) { if (baton->trimThreshold > 0.0) {
image = sharp::Trim(image, baton->trimThreshold); image = sharp::Trim(image, baton->trimThreshold);
baton->trimOffsetLeft = image.xoffset();
baton->trimOffsetTop = image.yoffset();
} }
// Pre extraction // Pre extraction
@ -966,6 +968,12 @@ class PipelineWorker : public Nan::AsyncWorker {
Set(info, New("cropOffsetTop").ToLocalChecked(), Set(info, New("cropOffsetTop").ToLocalChecked(),
New<v8::Int32>(static_cast<int32_t>(baton->cropOffsetTop))); New<v8::Int32>(static_cast<int32_t>(baton->cropOffsetTop)));
} }
if (baton->trimThreshold > 0.0) {
Set(info, New("trimOffsetLeft").ToLocalChecked(),
New<v8::Int32>(static_cast<int32_t>(baton->trimOffsetLeft)));
Set(info, New("trimOffsetTop").ToLocalChecked(),
New<v8::Int32>(static_cast<int32_t>(baton->trimOffsetTop)));
}
if (baton->bufferOutLength > 0) { if (baton->bufferOutLength > 0) {
// Pass ownership of output data to Buffer instance // Pass ownership of output data to Buffer instance

View File

@ -82,6 +82,8 @@ struct PipelineBaton {
int threshold; int threshold;
bool thresholdGrayscale; bool thresholdGrayscale;
double trimThreshold; double trimThreshold;
int trimOffsetLeft;
int trimOffsetTop;
double linearA; double linearA;
double linearB; double linearB;
double gamma; double gamma;
@ -177,6 +179,8 @@ struct PipelineBaton {
threshold(0), threshold(0),
thresholdGrayscale(true), thresholdGrayscale(true),
trimThreshold(0.0), trimThreshold(0.0),
trimOffsetLeft(0),
trimOffsetTop(0),
linearA(1.0), linearA(1.0),
linearB(0.0), linearB(0.0),
gamma(0.0), gamma(0.0),

View File

@ -16,6 +16,8 @@ describe('Trim borders', function () {
assert.strictEqual('png', info.format); assert.strictEqual('png', info.format);
assert.strictEqual(450, info.width); assert.strictEqual(450, info.width);
assert.strictEqual(322, info.height); assert.strictEqual(322, info.height);
assert.strictEqual(-204, info.trimOffsetLeft);
assert.strictEqual(0, info.trimOffsetTop);
fixtures.assertSimilar(expected, data, done); fixtures.assertSimilar(expected, data, done);
}); });
}); });
@ -29,6 +31,8 @@ describe('Trim borders', function () {
if (err) throw err; if (err) throw err;
assert.strictEqual('jpeg', info.format); assert.strictEqual('jpeg', info.format);
assert.strictEqual(300, info.width); assert.strictEqual(300, info.width);
assert.strictEqual(-873, info.trimOffsetLeft);
assert.strictEqual(-554, info.trimOffsetTop);
fixtures.assertSimilar(expected, data, done); fixtures.assertSimilar(expected, data, done);
}); });
}); });
@ -44,6 +48,8 @@ describe('Trim borders', function () {
assert.strictEqual(32, info.width); assert.strictEqual(32, info.width);
assert.strictEqual(32, info.height); assert.strictEqual(32, info.height);
assert.strictEqual(4, info.channels); assert.strictEqual(4, info.channels);
assert.strictEqual(-2, info.trimOffsetLeft);
assert.strictEqual(-2, info.trimOffsetTop);
fixtures.assertSimilar(fixtures.expected('trim-16bit-rgba.png'), data, done); fixtures.assertSimilar(fixtures.expected('trim-16bit-rgba.png'), data, done);
}); });
}); });