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.
235 lines
6.1 KiB
235 lines
6.1 KiB
import { Jimp, mkJGD, getTestDir } from '@jimp/test-utils'; |
|
import jpeg from '@jimp/jpeg'; |
|
import configure from '@jimp/custom'; |
|
|
|
import blit from '../src'; |
|
|
|
const jimp = configure({ types: [jpeg], plugins: [blit] }, Jimp); |
|
const testDir = getTestDir(__dirname); |
|
|
|
describe('Blit over image', function() { |
|
this.timeout(15000); |
|
const targetJGD = mkJGD( |
|
'▴▴▴▴▸▸▸▸', |
|
'▴▴▴▴▸▸▸▸', |
|
'▴▴▴▴▸▸▸▸', |
|
'▴▴▴▴▸▸▸▸', |
|
'▾▾▾▾◆◆◆◆', |
|
'▾▾▾▾◆◆◆◆', |
|
'▾▾▾▾◆◆◆◆', |
|
'▾▾▾▾◆◆◆◆' |
|
); |
|
const srcJGD = mkJGD( |
|
'□□□□□□', |
|
'□▥▥▥▥□', |
|
'□▥■■▥□', |
|
'□▥■■▥□', |
|
'□▥▥▥▥□', |
|
'□□□□□□' |
|
); |
|
|
|
let targetImg; |
|
let srcImg; // stores the Jimp instances of the JGD images above. |
|
|
|
before(done => { |
|
const img1 = jimp.read(targetJGD); |
|
const img2 = jimp.read(srcJGD); |
|
Promise.all([img1, img2]) |
|
.then(images => { |
|
targetImg = images[0]; |
|
srcImg = images[1]; |
|
done(); |
|
}) |
|
.catch(done); |
|
}); |
|
|
|
it('blit on top, with no crop', () => { |
|
targetImg |
|
.clone() |
|
.blit(srcImg, 0, 0) |
|
.getJGDSync() |
|
.should.be.sameJGD( |
|
mkJGD( |
|
'□□□□□□▸▸', |
|
'□▥▥▥▥□▸▸', |
|
'□▥■■▥□▸▸', |
|
'□▥■■▥□▸▸', |
|
'□▥▥▥▥□◆◆', |
|
'□□□□□□◆◆', |
|
'▾▾▾▾◆◆◆◆', |
|
'▾▾▾▾◆◆◆◆' |
|
) |
|
); |
|
}); |
|
|
|
it('blit on middle, with no crop', () => { |
|
targetImg |
|
.clone() |
|
.blit(srcImg, 1, 1) |
|
.getJGDSync() |
|
.should.be.sameJGD( |
|
mkJGD( |
|
'▴▴▴▴▸▸▸▸', |
|
'▴□□□□□□▸', |
|
'▴□▥▥▥▥□▸', |
|
'▴□▥■■▥□▸', |
|
'▾□▥■■▥□◆', |
|
'▾□▥▥▥▥□◆', |
|
'▾□□□□□□◆', |
|
'▾▾▾▾◆◆◆◆' |
|
) |
|
); |
|
}); |
|
|
|
it('blit on middle, with x,y crop', () => { |
|
targetImg |
|
.clone() |
|
.blit(srcImg, 2, 2, 1, 1, 5, 5) |
|
.getJGDSync() |
|
.should.be.sameJGD( |
|
mkJGD( |
|
'▴▴▴▴▸▸▸▸', |
|
'▴▴▴▴▸▸▸▸', |
|
'▴▴▥▥▥▥□▸', |
|
'▴▴▥■■▥□▸', |
|
'▾▾▥■■▥□◆', |
|
'▾▾▥▥▥▥□◆', |
|
'▾▾□□□□□◆', |
|
'▾▾▾▾◆◆◆◆' |
|
) |
|
); |
|
}); |
|
|
|
it('blit on middle, with x,y,w,h crop', () => { |
|
targetImg |
|
.clone() |
|
.blit(srcImg, 2, 2, 1, 1, 4, 4) |
|
.getJGDSync() |
|
.should.be.sameJGD( |
|
mkJGD( |
|
'▴▴▴▴▸▸▸▸', |
|
'▴▴▴▴▸▸▸▸', |
|
'▴▴▥▥▥▥▸▸', |
|
'▴▴▥■■▥▸▸', |
|
'▾▾▥■■▥◆◆', |
|
'▾▾▥▥▥▥◆◆', |
|
'▾▾▾▾◆◆◆◆', |
|
'▾▾▾▾◆◆◆◆' |
|
) |
|
); |
|
}); |
|
|
|
it('blit partially out, on top-left', () => { |
|
targetImg |
|
.clone() |
|
.blit(srcImg, -1, -1) |
|
.getJGDSync() |
|
.should.be.sameJGD( |
|
mkJGD( |
|
'▥▥▥▥□▸▸▸', |
|
'▥■■▥□▸▸▸', |
|
'▥■■▥□▸▸▸', |
|
'▥▥▥▥□▸▸▸', |
|
'□□□□□◆◆◆', |
|
'▾▾▾▾◆◆◆◆', |
|
'▾▾▾▾◆◆◆◆', |
|
'▾▾▾▾◆◆◆◆' |
|
) |
|
); |
|
}); |
|
|
|
it('blit partially out, on bottom-right', () => { |
|
targetImg |
|
.clone() |
|
.blit(srcImg, 3, 3) |
|
.getJGDSync() |
|
.should.be.sameJGD( |
|
mkJGD( |
|
'▴▴▴▴▸▸▸▸', |
|
'▴▴▴▴▸▸▸▸', |
|
'▴▴▴▴▸▸▸▸', |
|
'▴▴▴□□□□□', |
|
'▾▾▾□▥▥▥▥', |
|
'▾▾▾□▥■■▥', |
|
'▾▾▾□▥■■▥', |
|
'▾▾▾□▥▥▥▥' |
|
) |
|
); |
|
}); |
|
|
|
it('blit alpha', async () => { |
|
const expectedImg = await Jimp.read(testDir + '/images/blit-alpha.png'); |
|
const dice = await Jimp.read(testDir + '/images/dice.png'); |
|
const image = await Jimp.read(testDir + '/images/cops.jpg'); |
|
|
|
image |
|
.blit(dice, 0, 0) |
|
.bitmap.data.should.be.deepEqual(expectedImg.bitmap.data); |
|
}); |
|
|
|
async function createCat(catNum, len) { |
|
let imgHeight = 60; |
|
|
|
const butt = await Jimp.read(testDir + '/images/cat_butt.png'); |
|
const head = await Jimp.read(testDir + '/images/cat_head.png'); |
|
const fuzz = await Jimp.read(testDir + '/images/cat_fuzz.png'); |
|
|
|
let longCat = len; |
|
longCat = longCat > 20 ? 20 : longCat; |
|
longCat = longCat <= 1 ? 1 : longCat; |
|
|
|
const cat = |
|
Math.floor(catNum * (head.bitmap.height / imgHeight)) * imgHeight; |
|
|
|
const newImage = await Jimp.create( |
|
butt.bitmap.width + head.bitmap.width + fuzz.bitmap.width * longCat, |
|
imgHeight, |
|
0x00000000 |
|
); |
|
|
|
newImage.blit(butt, 0, 0, 0, cat, butt.bitmap.width, imgHeight); |
|
for (let i = 0; i < longCat; i++) { |
|
newImage.blit( |
|
fuzz, |
|
butt.bitmap.width + fuzz.bitmap.width * i, |
|
0, |
|
0, |
|
cat, |
|
fuzz.bitmap.width, |
|
imgHeight |
|
); |
|
} |
|
|
|
newImage.blit( |
|
head, |
|
butt.bitmap.width + fuzz.bitmap.width * longCat, |
|
0, |
|
0, |
|
cat, |
|
head.bitmap.width, |
|
imgHeight |
|
); |
|
|
|
return newImage; |
|
} |
|
|
|
it('uses src params correctly', async () => { |
|
const expectedSmall = await Jimp.read( |
|
testDir + '/images/cat-results/small-cat.png' |
|
); |
|
const small = await createCat(0.3, 1); |
|
small.bitmap.data.should.be.deepEqual(expectedSmall.bitmap.data); |
|
|
|
const expectedMedium = await Jimp.read( |
|
testDir + '/images/cat-results/medium-cat.png' |
|
); |
|
const medium = await createCat(0.6, 7); |
|
medium.bitmap.data.should.be.deepEqual(expectedMedium.bitmap.data); |
|
|
|
const expectedLarge = await Jimp.read( |
|
testDir + '/images/cat-results/large-cat.png' |
|
); |
|
const large = await createCat(0.9, 20); |
|
large.bitmap.data.should.be.deepEqual(expectedLarge.bitmap.data); |
|
}); |
|
});
|
|
|