430 lines
11 KiB
JavaScript
Executable File
430 lines
11 KiB
JavaScript
Executable File
import { Jimp, mkJGD } from "@jimp/test-utils";
|
|
import configure from "@jimp/custom";
|
|
|
|
import crop from "../src";
|
|
|
|
const jimp = configure({ plugins: [crop] }, Jimp);
|
|
|
|
describe("Autocrop", () => {
|
|
it("image with transparent surround color", async () => {
|
|
const imgSrc = await jimp.read(
|
|
mkJGD(
|
|
" ",
|
|
" ◆◆ ",
|
|
" ◆▦▦◆ ",
|
|
" ◆▦▦▦▦◆ ",
|
|
" ◆▦▦◆ ",
|
|
" ◆◆ ",
|
|
" "
|
|
)
|
|
);
|
|
|
|
imgSrc
|
|
.autocrop()
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(" ◆◆ ", " ◆▦▦◆ ", "◆▦▦▦▦◆", " ◆▦▦◆ ", " ◆◆ ")
|
|
);
|
|
});
|
|
|
|
it("image with opaque surround color", async () => {
|
|
const imgSrc = await jimp.read(
|
|
mkJGD(
|
|
"▥▥▥▥▥▥▥▥▥▥",
|
|
"▥▥▥▥◆◆▥▥▥▥",
|
|
"▥▥▥◆▦▦◆▥▥▥",
|
|
"▥▥◆▦▦▦▦◆▥▥",
|
|
"▥▥▥◆▦▦◆▥▥▥",
|
|
"▥▥▥▥◆◆▥▥▥▥",
|
|
"▥▥▥▥▥▥▥▥▥▥"
|
|
)
|
|
);
|
|
|
|
imgSrc
|
|
.autocrop()
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD("▥▥◆◆▥▥", "▥◆▦▦◆▥", "◆▦▦▦▦◆", "▥◆▦▦◆▥", "▥▥◆◆▥▥")
|
|
);
|
|
});
|
|
|
|
it("image with one color border", async () => {
|
|
const imgSrc = await jimp.read(
|
|
mkJGD(
|
|
"▥▥▥▥▥▥▥▥▥▥▥▥",
|
|
"▥▥▥▥▥▥▥▥▥▥▥▥",
|
|
"▥▥ ◆◆ ▥▥",
|
|
"▥▥ ◆▦▦◆ ▥▥",
|
|
"▥▥ ◆▦▦▦▦◆ ▥▥",
|
|
"▥▥ ◆▦▦◆ ▥▥",
|
|
"▥▥ ◆◆ ▥▥",
|
|
"▥▥▥▥▥▥▥▥▥▥▥▥",
|
|
"▥▥▥▥▥▥▥▥▥▥▥▥"
|
|
)
|
|
);
|
|
|
|
imgSrc
|
|
.autocrop()
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(" ◆◆ ", " ◆▦▦◆ ", " ◆▦▦▦▦◆ ", " ◆▦▦◆ ", " ◆◆ ")
|
|
);
|
|
});
|
|
|
|
it("image border with small variation", async () => {
|
|
const imgSrc = await jimp.read(
|
|
mkJGD(
|
|
"323232323232",
|
|
"232323232323",
|
|
"32 ◆◆ 32",
|
|
"23 ◆▦▦◆ 23",
|
|
"32 ◆▦▦▦▦◆ 32",
|
|
"23 ◆▦▦◆ 23",
|
|
"32 ◆◆ 32",
|
|
"232323232323",
|
|
"323232323232"
|
|
)
|
|
);
|
|
imgSrc
|
|
.clone()
|
|
.autocrop()
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
"323232323232",
|
|
"232323232323",
|
|
"32 ◆◆ 32",
|
|
"23 ◆▦▦◆ 23",
|
|
"32 ◆▦▦▦▦◆ 32",
|
|
"23 ◆▦▦◆ 23",
|
|
"32 ◆◆ 32",
|
|
"232323232323",
|
|
"323232323232"
|
|
)
|
|
);
|
|
imgSrc
|
|
.clone()
|
|
.autocrop(0.005)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(" ◆◆ ", " ◆▦▦◆ ", " ◆▦▦▦▦◆ ", " ◆▦▦◆ ", " ◆◆ ")
|
|
);
|
|
});
|
|
|
|
it("image border with small variation configured by options", async () => {
|
|
const imgSrc = await Jimp.read(
|
|
mkJGD(
|
|
"323232323232",
|
|
"232323232323",
|
|
"32 ◆◆ 32",
|
|
"23 ◆▦▦◆ 23",
|
|
"32 ◆▦▦▦▦◆ 32",
|
|
"23 ◆▦▦◆ 23",
|
|
"32 ◆◆ 32",
|
|
"232323232323",
|
|
"323232323232"
|
|
)
|
|
);
|
|
imgSrc
|
|
.clone()
|
|
.autocrop()
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
"323232323232",
|
|
"232323232323",
|
|
"32 ◆◆ 32",
|
|
"23 ◆▦▦◆ 23",
|
|
"32 ◆▦▦▦▦◆ 32",
|
|
"23 ◆▦▦◆ 23",
|
|
"32 ◆◆ 32",
|
|
"232323232323",
|
|
"323232323232"
|
|
)
|
|
);
|
|
imgSrc
|
|
.clone()
|
|
.autocrop({ tolerance: 0.005 })
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(" ◆◆ ", " ◆▦▦◆ ", " ◆▦▦▦▦◆ ", " ◆▦▦◆ ", " ◆◆ ")
|
|
);
|
|
});
|
|
|
|
it("image without frame", async () => {
|
|
const imgSrc = await Jimp.read(
|
|
mkJGD(
|
|
"▥▥ ◆◆ ",
|
|
"▥▥ ◆▦▦◆ ",
|
|
"▥▥ ◆▦▦▦▦◆ ",
|
|
"▥▥ ◆▦▦◆ ",
|
|
"▥▥ ◆◆ ",
|
|
"▥▥▥▥▥▥▥▥▥▥",
|
|
"▥▥▥▥▥▥▥▥▥▥"
|
|
)
|
|
);
|
|
|
|
imgSrc
|
|
.autocrop(false)
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(" ◆◆ ", " ◆▦▦◆ ", " ◆▦▦▦▦◆ ", " ◆▦▦◆ ", " ◆◆ ")
|
|
);
|
|
});
|
|
|
|
it("image without frame configured by options", async () => {
|
|
const imgSrc = await Jimp.read(
|
|
mkJGD(
|
|
"▥▥ ◆◆ ",
|
|
"▥▥ ◆▦▦◆ ",
|
|
"▥▥ ◆▦▦▦▦◆ ",
|
|
"▥▥ ◆▦▦◆ ",
|
|
"▥▥ ◆◆ ",
|
|
"▥▥▥▥▥▥▥▥▥▥",
|
|
"▥▥▥▥▥▥▥▥▥▥"
|
|
)
|
|
);
|
|
|
|
imgSrc
|
|
.autocrop({ cropOnlyFrames: false })
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(" ◆◆ ", " ◆▦▦◆ ", " ◆▦▦▦▦◆ ", " ◆▦▦◆ ", " ◆◆ ")
|
|
);
|
|
});
|
|
|
|
it("image with symmetric border configured by options", async () => {
|
|
const imgSrc = await Jimp.read(
|
|
mkJGD(
|
|
"▥▥▥▥▥▥▥▥▥▥▥▥▥▥",
|
|
"▥▥ ◆◆ ▥▥▥▥",
|
|
"▥▥ ◆▦▦◆ ▥▥▥▥",
|
|
"▥▥ ◆▦▦▦▦◆ ▥▥▥▥",
|
|
"▥▥ ◆▦▦◆ ▥▥▥▥",
|
|
"▥▥ ◆◆ ▥▥▥▥",
|
|
"▥▥▥▥▥▥▥▥▥▥▥▥▥▥",
|
|
"▥▥▥▥▥▥▥▥▥▥▥▥▥▥"
|
|
)
|
|
);
|
|
|
|
imgSrc
|
|
.autocrop({ cropSymmetric: true })
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ◆◆ ▥▥",
|
|
" ◆▦▦◆ ▥▥",
|
|
" ◆▦▦▦▦◆ ▥▥",
|
|
" ◆▦▦◆ ▥▥",
|
|
" ◆◆ ▥▥",
|
|
"▥▥▥▥▥▥▥▥▥▥"
|
|
)
|
|
);
|
|
});
|
|
|
|
it("image without frame and with symmetric border configured by options", async () => {
|
|
const imgSrc = await Jimp.read(
|
|
mkJGD(
|
|
"▥▥ ◆◆ ▥▥▥▥",
|
|
"▥▥ ◆▦▦◆ ▥▥▥▥",
|
|
"▥▥ ◆▦▦▦▦◆ ▥▥▥▥",
|
|
"▥▥ ◆▦▦◆ ▥▥▥▥",
|
|
"▥▥ ◆◆ ▥▥▥▥",
|
|
"▥▥▥▥▥▥▥▥▥▥▥▥▥▥",
|
|
"▥▥▥▥▥▥▥▥▥▥▥▥▥▥"
|
|
)
|
|
);
|
|
imgSrc
|
|
.autocrop({ cropSymmetric: true, cropOnlyFrames: false })
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ◆◆ ▥▥",
|
|
" ◆▦▦◆ ▥▥",
|
|
" ◆▦▦▦▦◆ ▥▥",
|
|
" ◆▦▦◆ ▥▥",
|
|
" ◆◆ ▥▥",
|
|
"▥▥▥▥▥▥▥▥▥▥",
|
|
"▥▥▥▥▥▥▥▥▥▥"
|
|
)
|
|
);
|
|
});
|
|
|
|
it("image without frame and with some border left", async () => {
|
|
const imgSrc = await Jimp.read(
|
|
mkJGD(
|
|
"323232323232",
|
|
"232323232323",
|
|
"32 ◆◆ 32",
|
|
"23 ◆▦▦◆ 23",
|
|
"32 ◆▦▦▦▦◆ 32",
|
|
"23 ◆▦▦◆ 23",
|
|
"32 ◆◆ 32",
|
|
"232323232323",
|
|
"323232323232"
|
|
)
|
|
);
|
|
|
|
imgSrc
|
|
.autocrop({
|
|
tolerance: 0.005,
|
|
leaveBorder: 1,
|
|
})
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
"3232323232",
|
|
"2 ◆◆ 3",
|
|
"3 ◆▦▦◆ 2",
|
|
"2 ◆▦▦▦▦◆ 3",
|
|
"3 ◆▦▦◆ 2",
|
|
"2 ◆◆ 3",
|
|
"3232323232"
|
|
)
|
|
);
|
|
});
|
|
|
|
it('image not cropped given an out of bounds "leaveBorder" value ', async () => {
|
|
const imgSrc = await Jimp.read(
|
|
mkJGD(
|
|
"323232323232",
|
|
"232323232323",
|
|
"32 ◆◆ 32",
|
|
"23 ◆▦▦◆ 23",
|
|
"32 ◆▦▦▦▦◆ 32",
|
|
"23 ◆▦▦◆ 23",
|
|
"32 ◆◆ 32",
|
|
"232323232323",
|
|
"323232323232"
|
|
)
|
|
);
|
|
|
|
imgSrc
|
|
.autocrop({
|
|
tolerance: 0.005,
|
|
leaveBorder: 100,
|
|
})
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
"323232323232",
|
|
"232323232323",
|
|
"32 ◆◆ 32",
|
|
"23 ◆▦▦◆ 23",
|
|
"32 ◆▦▦▦▦◆ 32",
|
|
"23 ◆▦▦◆ 23",
|
|
"32 ◆◆ 32",
|
|
"232323232323",
|
|
"323232323232"
|
|
)
|
|
);
|
|
});
|
|
|
|
it("image with top and bottom frame and leaveBorder", async () => {
|
|
const imgSrc = await Jimp.read(
|
|
mkJGD(
|
|
"▥▥▥▥▥▥▥▥",
|
|
"▥▥▥▥▥▥▥▥",
|
|
"▥▥▥▥▥▥▥▥",
|
|
" ◆◆ ",
|
|
" ◆▦▦◆ ",
|
|
" ◆▦▦▦▦◆ ",
|
|
" ◆▦▦◆ ",
|
|
" ◆◆ ",
|
|
"▥▥▥▥▥▥▥▥",
|
|
"▥▥▥▥▥▥▥▥",
|
|
"▥▥▥▥▥▥▥▥"
|
|
)
|
|
);
|
|
imgSrc
|
|
.autocrop({ cropSymmetric: true, cropOnlyFrames: false, leaveBorder: 2 })
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
"▥▥▥▥▥▥▥▥",
|
|
"▥▥▥▥▥▥▥▥",
|
|
" ◆◆ ",
|
|
" ◆▦▦◆ ",
|
|
" ◆▦▦▦▦◆ ",
|
|
" ◆▦▦◆ ",
|
|
" ◆◆ ",
|
|
"▥▥▥▥▥▥▥▥",
|
|
"▥▥▥▥▥▥▥▥"
|
|
)
|
|
);
|
|
});
|
|
|
|
it("ignore sides north", async () => {
|
|
const imgSrc = await jimp.read(
|
|
mkJGD(
|
|
" ",
|
|
" ◆◆ ",
|
|
" ◆▦▦◆ ",
|
|
" ◆▦▦▦▦◆ ",
|
|
" ◆▦▦◆ ",
|
|
" ◆◆ ",
|
|
" "
|
|
)
|
|
);
|
|
|
|
imgSrc
|
|
.autocrop({ cropOnlyFrames: false, ignoreSides: { north: true } })
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(" ", " ◆◆ ", " ◆▦▦◆ ", "◆▦▦▦▦◆", " ◆▦▦◆ ", " ◆◆ ")
|
|
);
|
|
});
|
|
|
|
it("ignore sides south and west", async () => {
|
|
const imgSrc = await jimp.read(
|
|
mkJGD(
|
|
" ",
|
|
" ◆◆ ",
|
|
" ◆▦▦◆ ",
|
|
" ◆▦▦▦▦◆ ",
|
|
" ◆▦▦◆ ",
|
|
" ◆◆ ",
|
|
" "
|
|
)
|
|
);
|
|
|
|
imgSrc
|
|
.autocrop({
|
|
cropOnlyFrames: false,
|
|
ignoreSides: { west: true, south: true },
|
|
})
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(
|
|
" ◆◆ ",
|
|
" ◆▦▦◆ ",
|
|
"◆▦▦▦▦◆ ",
|
|
" ◆▦▦◆ ",
|
|
" ◆◆ ",
|
|
" "
|
|
)
|
|
);
|
|
});
|
|
|
|
it("ignore sides east", async () => {
|
|
const imgSrc = await jimp.read(
|
|
mkJGD(
|
|
" ",
|
|
" ◆◆ ",
|
|
" ◆▦▦◆ ",
|
|
" ◆▦▦▦▦◆ ",
|
|
" ◆▦▦◆ ",
|
|
" ◆◆ ",
|
|
" "
|
|
)
|
|
);
|
|
|
|
imgSrc
|
|
.autocrop({ cropOnlyFrames: false, ignoreSides: { east: true } })
|
|
.getJGDSync()
|
|
.should.be.sameJGD(
|
|
mkJGD(" ◆◆ ", " ◆▦▦◆ ", " ◆▦▦▦▦◆", " ◆▦▦◆ ", " ◆◆ ")
|
|
);
|
|
});
|
|
});
|