python-archieve-projects/WechatBot/node_modules/@jimp/plugin-crop/test/autocrop.test.js

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(" ◆◆ ", " ◆▦▦◆ ", " ◆▦▦▦▦◆", " ◆▦▦◆ ", " ◆◆ ")
);
});
});