123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613 |
- import { Jimp, mkJGD, hashForEach } from '@jimp/test-utils';
- import configure from '@jimp/custom';
- import resize from '../src';
- const jimp = configure({ plugins: [resize] }, Jimp);
- describe('Resize images', () => {
- const testImages = [
- {
- title: 'max contrast 8x8',
- src: jimp.read(
- mkJGD(
- '■■■■□□□□',
- '■■■■□□□□',
- '■■■■□□□□',
- '■■■■□□□□',
- '□□□□■■■■',
- '□□□□■■■■',
- '□□□□■■■■',
- '□□□□■■■■'
- )
- ),
- results: {
- 'default 4x4': mkJGD('■■□□', '■■□□', '□□■■', '□□■■'),
- 'NEAREST_NEIGHBOR 4x4': mkJGD('■■□□', '■■□□', '□□■■', '□□■■'),
- 'BILINEAR 4x4': mkJGD('■■□□', '■■□□', '□□■■', '□□■■'),
- 'BICUBIC 4x4': {
- width: 4,
- height: 4,
- data: [
- 0x000000ff,
- 0x000000ff,
- 0xbfbfbfff,
- 0xffffffff,
- 0x000000ff,
- 0x000000ff,
- 0xbfbfbfff,
- 0xffffffff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0x5f5f5fff,
- 0x404040ff,
- 0xffffffff,
- 0xffffffff,
- 0x404040ff,
- 0x000000ff
- ]
- },
- 'HERMITE 4x4': {
- width: 4,
- height: 4,
- data: [
- 0x000000ff,
- 0x000000ff,
- 0xc0c0c0ff,
- 0xffffffff,
- 0x000000ff,
- 0x000000ff,
- 0xc0c0c0ff,
- 0xffffffff,
- 0xc0c0c0ff,
- 0xc0c0c0ff,
- 0x606060ff,
- 0x404040ff,
- 0xffffffff,
- 0xffffffff,
- 0x404040ff,
- 0x000000ff
- ]
- },
- 'BEZIER 4x4': {
- width: 4,
- height: 4,
- data: [
- 0x000000ff,
- 0x000000ff,
- 0xc0c0c0ff,
- 0xffffffff,
- 0x000000ff,
- 0x000000ff,
- 0xc0c0c0ff,
- 0xffffffff,
- 0xc0c0c0ff,
- 0xc0c0c0ff,
- 0x606060ff,
- 0x404040ff,
- 0xffffffff,
- 0xffffffff,
- 0x404040ff,
- 0x000000ff
- ]
- },
- 'default 5x2': mkJGD('■■▦□□', '□□▦■■'),
- 'NEAREST_NEIGHBOR 5x2': mkJGD('■■■□□', '□□□■■'),
- 'BILINEAR 5x2': mkJGD('■■3□□', '□□C■■'),
- 'BICUBIC 5x2': {
- width: 5,
- height: 2,
- data: [
- 0x000000ff,
- 0x000000ff,
- 0x000000ff,
- 0xffffffff,
- 0xffffffff,
- 0xdfdfdfff,
- 0xdfdfdfff,
- 0xdfdfdfff,
- 0x202020ff,
- 0x202020ff
- ]
- },
- 'HERMITE 5x2': {
- width: 5,
- height: 2,
- data: [
- 0x000000ff,
- 0x000000ff,
- 0x000000ff,
- 0xffffffff,
- 0xffffffff,
- 0xdfdfdfff,
- 0xdfdfdfff,
- 0xdfdfdfff,
- 0x202020ff,
- 0x202020ff
- ]
- },
- 'BEZIER 5x2': {
- width: 5,
- height: 2,
- data: [
- 0x000000ff,
- 0x000000ff,
- 0x000000ff,
- 0xffffffff,
- 0xffffffff,
- 0xdfdfdfff,
- 0xdfdfdfff,
- 0xdfdfdfff,
- 0x202020ff,
- 0x202020ff
- ]
- }
- }
- },
- /**********************************************************************/
- {
- title: 'max contrast 12x12 with dots',
- src: jimp.read(
- mkJGD(
- '■■■■■■□□□□□□',
- '■■■■■■□□□□□□',
- '■■■□■■□□■□□□',
- '■■■■■■□□□□□□',
- '■■■■■■□□□□□□',
- '■■■■■■□□□□□□',
- '□□□□□□■■■■■■',
- '□□□□□□■■■■■■',
- '□□□□□□■■■■■■',
- '□□□■□□■■□■■■',
- '□□□□□□■■■■■■',
- '□□□□□□■■■■■■'
- )
- ),
- results: {
- 'default 6x6': mkJGD(
- '■■■□□□',
- '■▩■□▥□',
- '■■■□□□',
- '□□□■■■',
- '□▥□■▩■',
- '□□□■■■'
- ),
- 'NEAREST_NEIGHBOR 6x6': mkJGD(
- '■■■□□□',
- '■■■□■□',
- '■■■□□□',
- '□□□■■■',
- '□□□■■■',
- '□□□■■■'
- ),
- 'BILINEAR 6x6': mkJGD(
- '■■■□□□',
- '■■■□■□',
- '■■■□□□',
- '□□□■■■',
- '□□□■■■',
- '□□□■■■'
- ),
- 'BICUBIC 6x6': {
- width: 6,
- height: 6,
- data: [
- 0x000000ff,
- 0x000000ff,
- 0x000000ff,
- 0xbfbfbfff,
- 0xffffffff,
- 0xffffffff,
- 0x000000ff,
- 0x474747ff,
- 0x202020ff,
- 0xbfbfbfff,
- 0x979797ff,
- 0xffffffff,
- 0x000000ff,
- 0x000000ff,
- 0x000000ff,
- 0xbfbfbfff,
- 0xffffffff,
- 0xffffffff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0x5f5f5fff,
- 0x404040ff,
- 0x404040ff,
- 0xffffffff,
- 0xeeeeeeff,
- 0xf7f7f7ff,
- 0x404040ff,
- 0x181818ff,
- 0x000000ff,
- 0xffffffff,
- 0xc9c9c9ff,
- 0xe6e6e6ff,
- 0x404040ff,
- 0x4e4e4eff,
- 0x000000ff
- ]
- },
- 'HERMITE 6x6': {
- width: 6,
- height: 6,
- data: [
- 0x000000ff,
- 0x000000ff,
- 0x000000ff,
- 0xc0c0c0ff,
- 0xffffffff,
- 0xffffffff,
- 0x000000ff,
- 0x404040ff,
- 0x191919ff,
- 0xc0c0c0ff,
- 0xa6a6a6ff,
- 0xffffffff,
- 0x000000ff,
- 0x000000ff,
- 0x000000ff,
- 0xc0c0c0ff,
- 0xffffffff,
- 0xffffffff,
- 0xc0c0c0ff,
- 0xc0c0c0ff,
- 0xc0c0c0ff,
- 0x606060ff,
- 0x404040ff,
- 0x404040ff,
- 0xffffffff,
- 0xf3f3f3ff,
- 0xfafafaff,
- 0x404040ff,
- 0x111111ff,
- 0x000000ff,
- 0xffffffff,
- 0xcbcbcbff,
- 0xebebebff,
- 0x404040ff,
- 0x484848ff,
- 0x000000ff
- ]
- },
- 'BEZIER 6x6': {
- width: 6,
- height: 6,
- data: [
- 0x000000ff,
- 0x000000ff,
- 0x000000ff,
- 0xc0c0c0ff,
- 0xffffffff,
- 0xffffffff,
- 0x000000ff,
- 0x444444ff,
- 0x1d1d1dff,
- 0xc0c0c0ff,
- 0x9f9f9fff,
- 0xffffffff,
- 0x000000ff,
- 0x000000ff,
- 0x000000ff,
- 0xc0c0c0ff,
- 0xffffffff,
- 0xffffffff,
- 0xc0c0c0ff,
- 0xc0c0c0ff,
- 0xc0c0c0ff,
- 0x606060ff,
- 0x404040ff,
- 0x404040ff,
- 0xffffffff,
- 0xf0f0f0ff,
- 0xf9f9f9ff,
- 0x404040ff,
- 0x151515ff,
- 0x000000ff,
- 0xffffffff,
- 0xcacacaff,
- 0xe9e9e9ff,
- 0x404040ff,
- 0x4b4b4bff,
- 0x000000ff
- ]
- }
- }
- },
- /**********************************************************************/
- {
- title: 'mutch contrast 4x4',
- src: jimp.read(mkJGD('▩▩▥▥', '▩▩▥▥', '▥▥▩▩', '▥▥▩▩')),
- results: {
- 'default 6x6': {
- width: 6,
- height: 6,
- data: [
- 0x404040ff,
- 0x404040ff,
- 0x404040ff,
- 0x959595ff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0x404040ff,
- 0x404040ff,
- 0x404040ff,
- 0x959595ff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0x404040ff,
- 0x404040ff,
- 0x404040ff,
- 0x959595ff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0x959595ff,
- 0x959595ff,
- 0x959595ff,
- 0x787878ff,
- 0x6a6a6aff,
- 0x6a6a6aff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0x6a6a6aff,
- 0x404040ff,
- 0x404040ff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0x6a6a6aff,
- 0x404040ff,
- 0x404040ff
- ]
- },
- 'NEAREST_NEIGHBOR 6x6': {
- width: 6,
- height: 6,
- data: [
- 0x404040ff,
- 0x404040ff,
- 0x404040ff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0x404040ff,
- 0x404040ff,
- 0x404040ff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0x404040ff,
- 0x404040ff,
- 0x404040ff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0x404040ff,
- 0x404040ff,
- 0x404040ff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0x404040ff,
- 0x404040ff,
- 0x404040ff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0x404040ff,
- 0x404040ff,
- 0x404040ff
- ]
- },
- 'BILINEAR 6x6': {
- width: 6,
- height: 6,
- data: [
- 0x404040ff,
- 0x404040ff,
- 0x6a6a6aff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0x404040ff,
- 0x404040ff,
- 0x6a6a6aff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0x6a6a6aff,
- 0x6a6a6aff,
- 0x787878ff,
- 0x959595ff,
- 0x959595ff,
- 0x959595ff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0x959595ff,
- 0x404040ff,
- 0x404040ff,
- 0x404040ff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0x959595ff,
- 0x404040ff,
- 0x404040ff,
- 0x404040ff,
- 0xbfbfbfff,
- 0xbfbfbfff,
- 0x959595ff,
- 0x404040ff,
- 0x404040ff,
- 0x404040ff
- ]
- },
- 'BICUBIC 6x6': {
- width: 6,
- height: 6,
- data: [
- 0x404040ff,
- 0x303030ff,
- 0x404040ff,
- 0x7f7f7fff,
- 0xbfbfbfff,
- 0xcececeff,
- 0x303030ff,
- 0x1c1c1cff,
- 0x303030ff,
- 0x7f7f7fff,
- 0xcececeff,
- 0xe1e1e1ff,
- 0x404040ff,
- 0x303030ff,
- 0x404040ff,
- 0x7f7f7fff,
- 0xbfbfbfff,
- 0xcececeff,
- 0x7f7f7fff,
- 0x7f7f7fff,
- 0x7f7f7fff,
- 0x7f7f7fff,
- 0x7f7f7fff,
- 0x7f7f7fff,
- 0xbfbfbfff,
- 0xcececeff,
- 0xbfbfbfff,
- 0x7f7f7fff,
- 0x404040ff,
- 0x303030ff,
- 0xcececeff,
- 0xe1e1e1ff,
- 0xcececeff,
- 0x7f7f7fff,
- 0x303030ff,
- 0x1c1c1cff
- ]
- },
- 'HERMITE 6x6': {
- width: 6,
- height: 6,
- data: [
- 0x404040ff,
- 0x383838ff,
- 0x404040ff,
- 0x808080ff,
- 0xbfbfbfff,
- 0xc7c7c7ff,
- 0x383838ff,
- 0x2f2f2fff,
- 0x383838ff,
- 0x808080ff,
- 0xc7c7c7ff,
- 0xd0d0d0ff,
- 0x404040ff,
- 0x383838ff,
- 0x404040ff,
- 0x808080ff,
- 0xbfbfbfff,
- 0xc7c7c7ff,
- 0x808080ff,
- 0x808080ff,
- 0x808080ff,
- 0x808080ff,
- 0x808080ff,
- 0x808080ff,
- 0xbfbfbfff,
- 0xc7c7c7ff,
- 0xbfbfbfff,
- 0x808080ff,
- 0x404040ff,
- 0x383838ff,
- 0xc7c7c7ff,
- 0xd0d0d0ff,
- 0xc7c7c7ff,
- 0x808080ff,
- 0x383838ff,
- 0x2f2f2fff
- ]
- },
- 'BEZIER 6x6': {
- width: 6,
- height: 6,
- data: [
- 0x404040ff,
- 0x343434ff,
- 0x404040ff,
- 0x808080ff,
- 0xbfbfbfff,
- 0xcbcbcbff,
- 0x343434ff,
- 0x262626ff,
- 0x343434ff,
- 0x808080ff,
- 0xcbcbcbff,
- 0xd9d9d9ff,
- 0x404040ff,
- 0x343434ff,
- 0x404040ff,
- 0x808080ff,
- 0xbfbfbfff,
- 0xcbcbcbff,
- 0x808080ff,
- 0x808080ff,
- 0x808080ff,
- 0x808080ff,
- 0x808080ff,
- 0x808080ff,
- 0xbfbfbfff,
- 0xcbcbcbff,
- 0xbfbfbfff,
- 0x808080ff,
- 0x404040ff,
- 0x343434ff,
- 0xcbcbcbff,
- 0xd9d9d9ff,
- 0xcbcbcbff,
- 0x808080ff,
- 0x343434ff,
- 0x262626ff
- ]
- }
- }
- }
- ];
- before(done => {
- const srcImgs = testImages.map(test => test.src);
- Promise.all(srcImgs)
- .then(imgsJimp => {
- for (let i = 0; i < imgsJimp.length; i++) {
- testImages[i].src = imgsJimp[i];
- }
- done();
- })
- .catch(done);
- });
- function testEach(test) {
- describe(test.title, () => {
- hashForEach(test.results, (expectedTitle, expectedJgd) => {
- const mode = Jimp['RESIZE_' + expectedTitle.split(' ')[0]];
- const size = expectedTitle
- .split(' ')[1]
- .split('x')
- .map(n => parseInt(n, 10));
- it('to ' + expectedTitle, () => {
- test.src
- .clone()
- .resize(size[0], size[1], mode)
- .getJGDSync()
- .should.be.sameJGD(expectedJgd);
- });
- });
- });
- }
- testImages.forEach(testEach);
- });
|