index.js•1.63 kB
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,
},
});