637 lines
15 KiB
JavaScript
Executable File
637 lines
15 KiB
JavaScript
Executable File
import { Jimp, mkJGD } from "@jimp/test-utils";
|
|
import configure from "@jimp/custom";
|
|
import blit from "@jimp/plugin-blit";
|
|
import crop from "@jimp/plugin-crop";
|
|
import resize from "@jimp/plugin-resize";
|
|
|
|
import rotate from "../src";
|
|
|
|
const jimp = configure({ plugins: [rotate, blit, crop, resize] }, Jimp);
|
|
|
|
describe("Rotate a image with even size", () => {
|
|
let imgSrc = null;
|
|
|
|
before((done) => {
|
|
jimp
|
|
.read(
|
|
mkJGD(
|
|
"▰▴▴▴▪▪▪▰",
|
|
"▴▴▴▴▪▪▪▪",
|
|
"▴▴▴▴▪▪▪▪",
|
|
"▴▴▴▴▪▪▪▪",
|
|
"▪▪▪▪▴▴▴▴",
|
|
"▪▪▪▪▴▴▴▴",
|
|
"▪▪▪▪▴▴▴▴",
|
|
"▦▪▪▪▴▴▴▦"
|
|
)
|
|
)
|
|
.then((imgJimp) => {
|
|
imgSrc = imgJimp;
|
|
done();
|
|
})
|
|
.catch(done);
|
|
});
|
|
|
|
it("1 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(1, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
"▰▴▴▴▪▪▪▰ ",
|
|
"▴▴▴▴▪▪▪▪ ",
|
|
"▴▴▴▴▪▪▪▪ ",
|
|
"▴▴▴▴▪▪▪▪ ",
|
|
"▪▪▪▪▴▴▴▴ ",
|
|
"▪▪▪▪▴▴▴▴ ",
|
|
"▪▪▪▪▴▴▴▴ ",
|
|
"▦▪▪▪▴▴▴▦ ",
|
|
" ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("91 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(91, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ",
|
|
"▰▪▪▪▴▴▴▦ ",
|
|
"▪▪▪▪▴▴▴▴ ",
|
|
"▪▪▪▪▴▴▴▴ ",
|
|
"▪▪▪▪▴▴▴▴ ",
|
|
"▴▴▴▴▪▪▪▪ ",
|
|
"▴▴▴▴▪▪▪▪ ",
|
|
"▴▴▴▴▪▪▪▪ ",
|
|
"▰▴▴▴▪▪▪▦ ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("30 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(30, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ▰▰ ",
|
|
" ▪▪▪▪ ",
|
|
" ▴▪▪▪▪▪ ",
|
|
"▴▴▴▴▪▪▪▪ ",
|
|
"▴▴▴▴▪▪▴▴▴ ",
|
|
"▴▴▴▴▪▴▴▴▴▴ ",
|
|
" ▴▴▪▪▴▴▴▴▦ ",
|
|
" ▪▪▪▪▪▴▴▴ ",
|
|
" ▪▪▪▪▪ ",
|
|
" ▪▪▪ ",
|
|
" ▦ ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("45 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(45, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ",
|
|
" ▰ ",
|
|
" ▪▪▪ ",
|
|
" ▪▪▪▪▪ ",
|
|
" ▴▴▪▪▪▪▴ ",
|
|
" ▴▴▴▴▪▪▴▴▴ ",
|
|
"▰▰▴▴▴▴▴▴▴▴▦ ",
|
|
" ▴▴▴▴▪▪▴▴▴ ",
|
|
" ▴▴▪▪▪▪▴ ",
|
|
" ▪▪▪▪▪ ",
|
|
" ▪▪▪ ",
|
|
" ▦ ",
|
|
" ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("60 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(60, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ▰ ",
|
|
" ▪▪▪ ",
|
|
" ▪▪▪▪▪ ",
|
|
" ▪▪▪▪▪▴▴▴ ",
|
|
" ▴▴▪▪▴▴▴▴▦ ",
|
|
"▴▴▴▴▪▴▴▴▴▴ ",
|
|
"▴▴▴▴▪▪▴▴▴ ",
|
|
"▴▴▴▴▪▪▪▪ ",
|
|
" ▴▪▪▪▪▪ ",
|
|
" ▪▪▪▪ ",
|
|
" ▦▦ ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("90 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(90, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ",
|
|
"▰▪▪▪▴▴▴▦ ",
|
|
"▪▪▪▪▴▴▴▴ ",
|
|
"▪▪▪▪▴▴▴▴ ",
|
|
"▪▪▪▪▴▴▴▴ ",
|
|
"▴▴▴▴▪▪▪▪ ",
|
|
"▴▴▴▴▪▪▪▪ ",
|
|
"▴▴▴▴▪▪▪▪ ",
|
|
"▰▴▴▴▪▪▪▦ ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("120 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(120, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ",
|
|
" ▴▦ ",
|
|
" ▴▴▴▴ ",
|
|
" ▪▪▴▴▴▴ ",
|
|
"▰▪▪▪▴▴▴▴▪ ",
|
|
"▰▪▪▪▪▴▴▪▪▪ ",
|
|
" ▪▪▪▪▪▪▪▪▪ ",
|
|
" ▪▪▴▴▴▪▪▪▪▦ ",
|
|
" ▴▴▴▴▴▪▪ ",
|
|
" ▴▴▴▴▪ ",
|
|
" ▴▴▴ ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("135 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(135, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ",
|
|
" ",
|
|
" ▦ ",
|
|
" ▴▴▴ ",
|
|
" ▴▴▴▴▴ ",
|
|
" ▪▪▴▴▴▪▪ ",
|
|
" ▪▪▪▪▴▪▪▪▪ ",
|
|
" ▰▪▪▪▪▴▪▪▪▪▦ ",
|
|
" ▪▪▪▴▴▴▪▪▪ ",
|
|
" ▪▴▴▴▴▴▪ ",
|
|
" ▴▴▴▴▴ ",
|
|
" ▴▰▴ ",
|
|
" ▰ ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("180 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(180, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ",
|
|
" ▦▴▴▴▪▪▪▦ ",
|
|
" ▴▴▴▴▪▪▪▪ ",
|
|
" ▴▴▴▴▪▪▪▪ ",
|
|
" ▴▴▴▴▪▪▪▪ ",
|
|
" ▪▪▪▪▴▴▴▴ ",
|
|
" ▪▪▪▪▴▴▴▴ ",
|
|
" ▪▪▪▪▴▴▴▴ ",
|
|
" ▰▪▪▪▴▴▴▰ ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("225 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(225, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ",
|
|
" ▦ ",
|
|
" ▪▪▪ ",
|
|
" ▪▪▪▪▪ ",
|
|
" ▴▪▪▪▪▴▴ ",
|
|
" ▴▴▴▪▪▴▴▴▴ ",
|
|
" ▦▴▴▴▴▴▴▴▴▰▰ ",
|
|
" ▴▴▴▪▪▴▴▴▴ ",
|
|
" ▴▪▪▪▪▴▴ ",
|
|
" ▪▪▪▪▪ ",
|
|
" ▪▪▪ ",
|
|
" ▰ ",
|
|
" ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("270 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(270, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ▦▪▪▪▴▴▴▰ ",
|
|
" ▪▪▪▪▴▴▴▴ ",
|
|
" ▪▪▪▪▴▴▴▴ ",
|
|
" ▪▪▪▪▴▴▴▴ ",
|
|
" ▴▴▴▴▪▪▪▪ ",
|
|
" ▴▴▴▴▪▪▪▪ ",
|
|
" ▴▴▴▴▪▪▪▪ ",
|
|
" ▦▴▴▴▪▪▪▰ ",
|
|
" ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("315 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(315, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ▰ ",
|
|
" ▴▰▴ ",
|
|
" ▴▴▴▴▴ ",
|
|
" ▪▴▴▴▴▴▪ ",
|
|
" ▪▪▪▴▴▴▪▪▪ ",
|
|
" ▦▪▪▪▪▴▪▪▪▪▰ ",
|
|
" ▪▪▪▪▴▪▪▪▪ ",
|
|
" ▪▪▴▴▴▪▪ ",
|
|
" ▴▴▴▴▴ ",
|
|
" ▴▴▴ ",
|
|
" ▦ ",
|
|
" ",
|
|
" ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("360 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(360, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
"▰▴▴▴▪▪▪▰ ",
|
|
"▴▴▴▴▪▪▪▪ ",
|
|
"▴▴▴▴▪▪▪▪ ",
|
|
"▴▴▴▴▪▪▪▪ ",
|
|
"▪▪▪▪▴▴▴▴ ",
|
|
"▪▪▪▪▴▴▴▴ ",
|
|
"▪▪▪▪▴▴▴▴ ",
|
|
"▦▪▪▪▴▴▴▦ ",
|
|
" ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
});
|
|
|
|
describe("Rotate a image with odd size", () => {
|
|
let imgSrc = null;
|
|
before((done) => {
|
|
jimp
|
|
.read(
|
|
mkJGD(
|
|
"▴▴▴▦▪▪▪",
|
|
"▴▴▴▦▪▪▪",
|
|
"▴▴▴▦▪▪▪",
|
|
"▦▦▦▦▦▦▦",
|
|
"▴▴▴▦▴▴▴",
|
|
"▴▴▴▦▴▴▴",
|
|
"▴▴▴▦▴▴▴"
|
|
)
|
|
)
|
|
.then((imgJimp) => {
|
|
imgSrc = imgJimp;
|
|
done();
|
|
})
|
|
.catch(done);
|
|
});
|
|
|
|
it("45 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(45, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ",
|
|
" ▪ ",
|
|
" ▪▪▪ ",
|
|
" ▦▪▪▪▦ ",
|
|
" ▴▴▦▪▦▴▴ ",
|
|
" ▴▴▴▴▦▴▴▴▴ ",
|
|
" ▴▴▦▴▦▴▴ ",
|
|
" ▦▴▴▴▦ ",
|
|
" ▴▴▴ ",
|
|
" ▴ ",
|
|
" ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("135 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(135, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ",
|
|
" ▴ ",
|
|
" ▴▴▴ ",
|
|
" ▦▴▴▴▦ ",
|
|
" ▪▪▦▴▦▴▴ ",
|
|
" ▪▪▪▪▦▴▴▴▴ ",
|
|
" ▪▪▦▴▦▴▴ ",
|
|
" ▦▴▴▴▦ ",
|
|
" ▴▴▴ ",
|
|
" ▴ ",
|
|
" ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("225 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(225, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ",
|
|
" ▴ ",
|
|
" ▴▴▴ ",
|
|
" ▦▴▴▴▦ ",
|
|
" ▴▴▦▴▦▴▴ ",
|
|
" ▴▴▴▴▦▴▴▴▴ ",
|
|
" ▴▴▦▪▦▴▴ ",
|
|
" ▦▪▪▪▦ ",
|
|
" ▪▪▪ ",
|
|
" ▪ ",
|
|
" ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("315 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(315, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ",
|
|
" ▴ ",
|
|
" ▴▴▴ ",
|
|
" ▦▴▴▴▦ ",
|
|
" ▴▴▦▴▦▪▪ ",
|
|
" ▴▴▴▴▦▪▪▪▪ ",
|
|
" ▴▴▦▴▦▪▪ ",
|
|
" ▦▴▴▴▦ ",
|
|
" ▴▴▴ ",
|
|
" ▴ ",
|
|
" ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
});
|
|
|
|
describe("Rotate a non-square image", () => {
|
|
let imgSrc = null;
|
|
before((done) => {
|
|
jimp
|
|
.read(mkJGD("▴▴▴▴▪▪▪▪", "▴▴▴▴▪▪▪▪", "▦▦▦▦▴▴▴▴", "▦▦▦▦▴▴▴▴"))
|
|
.then((imgJimp) => {
|
|
imgSrc = imgJimp;
|
|
done();
|
|
})
|
|
.catch(done);
|
|
});
|
|
|
|
it("1 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(1, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
"▴▴▴▴▪▪▪▪ ",
|
|
"▴▴▴▴▪▪▪▪ ",
|
|
"▦▦▦▦▴▴▴▴ ",
|
|
"▦▦▦▦▴▴▴▴ ",
|
|
" ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("10 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(10, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ▪ ",
|
|
" ▴▴▴▪▪▪▪ ",
|
|
"▴▴▴▴▪▪▪▴ ",
|
|
"▴▴▦▦▴▴▴▴ ",
|
|
"▦▦▦▦▴▴▴ ",
|
|
"▦▦ ",
|
|
" ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("30 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(30, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ",
|
|
" ▪▪ ",
|
|
" ▪▪▪▪ ",
|
|
" ▴▴▪▪▴▴▴ ",
|
|
"▴▴▴▦▴▴▴ ",
|
|
"▴▴▦▦▴▴ ",
|
|
"▦▦▦▦ ",
|
|
" ▦ ",
|
|
" ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("45 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(45, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ",
|
|
" ▪▪ ",
|
|
" ▪▪▪▴ ",
|
|
" ▴▪▪▴▴▴ ",
|
|
" ▴▴▴▴▴▴ ",
|
|
"▴▴▴▦▦▴ ",
|
|
"▴▴▦▦▦ ",
|
|
" ▦▦▦ ",
|
|
" ▦ ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("90 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(90, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ",
|
|
"▪▪▴▴ ",
|
|
"▪▪▴▴ ",
|
|
"▪▪▴▴ ",
|
|
"▪▪▴▴ ",
|
|
"▴▴▦▦ ",
|
|
"▴▴▦▦ ",
|
|
"▴▴▦▦ ",
|
|
"▴▴▦▦ ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("135 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(135, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ",
|
|
" ▴ ",
|
|
" ▴▴▴ ",
|
|
" ▪▪▴▴▴ ",
|
|
" ▪▪▪▴▦▦ ",
|
|
" ▪▪▴▦▦▦ ",
|
|
" ▴▴▴▦▦▦ ",
|
|
" ▴▴▴▦ ",
|
|
" ▴▴ ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("180 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(180, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ",
|
|
" ▴▴▴▴▦▦▦▦ ",
|
|
" ▴▴▴▴▦▦▦▦ ",
|
|
" ▪▪▪▪▴▴▴▴ ",
|
|
" ▪▪▪▪▴▴▴▴ ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("225 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(225, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ▦ ",
|
|
" ▦▦▦ ",
|
|
" ▦▦▦▴▴ ",
|
|
" ▴▦▦▴▴▴ ",
|
|
" ▴▴▴▴▴▴ ",
|
|
" ▴▴▴▪▪▴ ",
|
|
" ▴▪▪▪ ",
|
|
" ▪▪ ",
|
|
" ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("315 degrees", () => {
|
|
imgSrc
|
|
.clone()
|
|
.rotate(315, true)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ▴▴ ",
|
|
" ▦▴▴▴ ",
|
|
"▦▦▦▴▴▴ ",
|
|
" ▦▦▦▴▪▪ ",
|
|
" ▦▦▴▪▪▪ ",
|
|
" ▴▴▴▪▪ ",
|
|
" ▴▴▴ ",
|
|
" ▴ ",
|
|
" ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
});
|