50 lines
1.5 KiB
JavaScript
50 lines
1.5 KiB
JavaScript
import BMP from "bmp-js";
|
|
import { scan } from "@jimp/utils";
|
|
const MIME_TYPE = "image/bmp";
|
|
const MIME_TYPE_SECOND = "image/x-ms-bmp";
|
|
function toAGBR(image) {
|
|
return scan(image, 0, 0, image.bitmap.width, image.bitmap.height, function (x, y, index) {
|
|
const red = this.bitmap.data[index + 0];
|
|
const green = this.bitmap.data[index + 1];
|
|
const blue = this.bitmap.data[index + 2];
|
|
const alpha = this.bitmap.data[index + 3];
|
|
this.bitmap.data[index + 0] = alpha;
|
|
this.bitmap.data[index + 1] = blue;
|
|
this.bitmap.data[index + 2] = green;
|
|
this.bitmap.data[index + 3] = red;
|
|
}).bitmap;
|
|
}
|
|
function fromAGBR(bitmap) {
|
|
return scan({
|
|
bitmap
|
|
}, 0, 0, bitmap.width, bitmap.height, function (x, y, index) {
|
|
const alpha = this.bitmap.data[index + 0];
|
|
const blue = this.bitmap.data[index + 1];
|
|
const green = this.bitmap.data[index + 2];
|
|
const red = this.bitmap.data[index + 3];
|
|
this.bitmap.data[index + 0] = red;
|
|
this.bitmap.data[index + 1] = green;
|
|
this.bitmap.data[index + 2] = blue;
|
|
this.bitmap.data[index + 3] = bitmap.is_with_alpha ? alpha : 0xff;
|
|
}).bitmap;
|
|
}
|
|
const decode = data => fromAGBR(BMP.decode(data));
|
|
const encode = image => BMP.encode(toAGBR(image)).data;
|
|
export default (() => ({
|
|
mime: {
|
|
[MIME_TYPE]: ["bmp"]
|
|
},
|
|
constants: {
|
|
MIME_BMP: MIME_TYPE,
|
|
MIME_X_MS_BMP: MIME_TYPE_SECOND
|
|
},
|
|
decoders: {
|
|
[MIME_TYPE]: decode,
|
|
[MIME_TYPE_SECOND]: decode
|
|
},
|
|
encoders: {
|
|
[MIME_TYPE]: encode,
|
|
[MIME_TYPE_SECOND]: encode
|
|
}
|
|
}));
|
|
//# sourceMappingURL=index.js.map
|