You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
613 lines
15 KiB
613 lines
15 KiB
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); |
|
});
|
|
|