Skip to content

Commit 0079a97

Browse files
committed
(#307) Implement image writer
1 parent bcf5dc0 commit 0079a97

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

Diff for: lib/provider/io/jimp-image-writer.class.spec.ts

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import ImageWriter from "./jimp-image-writer.class";
2+
import ImageReader from "./jimp-image-reader.class";
3+
import {join} from "path";
4+
5+
describe('Jimp image writer', () => {
6+
it('should reject on writing failures', async () => {
7+
// GIVEN
8+
const inputFilename = join(__dirname, '__mocks__', 'calculator.png');
9+
const outputFile = await (new ImageReader().load(inputFilename));
10+
const outputFileName = "/does/not/compute.png"
11+
const SUT = new ImageWriter();
12+
13+
// WHEN
14+
const func = () => SUT.store({data: outputFile, path: outputFileName});
15+
16+
// THEN
17+
await expect(func).rejects.toThrowError()
18+
});
19+
});

Diff for: lib/provider/io/jimp-image-writer.class.ts

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import Jimp from 'jimp';
2+
import {ImageWriter, ImageWriterParameters} from "../image-writer.type";
3+
4+
export default class implements ImageWriter {
5+
store(parameters: ImageWriterParameters): Promise<void> {
6+
return new Promise((resolve, reject) => {
7+
const jimpImage = new Jimp({
8+
data: parameters.data.data,
9+
width: parameters.data.width,
10+
height: parameters.data.height
11+
});
12+
// libnut returns data in BGR format, so we have to switch red and blue color channels
13+
jimpImage.scan(0, 0, jimpImage.bitmap.width, jimpImage.bitmap.height, function(_, __, idx) {
14+
const red = this.bitmap.data[idx];
15+
this.bitmap.data[idx] = this.bitmap.data[idx + 2];
16+
this.bitmap.data[idx + 2] = red;
17+
});
18+
return jimpImage
19+
.writeAsync(parameters.path)
20+
.then(_ => resolve())
21+
.catch(err => reject(err));
22+
});
23+
}
24+
}

0 commit comments

Comments
 (0)