637 lines
15 KiB
JavaScript
637 lines
15 KiB
JavaScript
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(
|
|
' ▴▴ ',
|
|
' ▦▴▴▴ ',
|
|
'▦▦▦▴▴▴ ',
|
|
' ▦▦▦▴▪▪ ',
|
|
' ▦▦▴▪▪▪ ',
|
|
' ▴▴▴▪▪ ',
|
|
' ▴▴▴ ',
|
|
' ▴ ',
|
|
' ',
|
|
' '
|
|
)
|
|
);
|
|
});
|
|
});
|