Skip to content

Commit 87786c6

Browse files
fix support for 64x32 images
1 parent 7d76d86 commit 87786c6

File tree

7 files changed

+19
-7
lines changed

7 files changed

+19
-7
lines changed

__test__/index.spec.mjs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import test from 'ava'
22

3-
import { sum, encodeImage } from '../index.js'
3+
import { sum, encodeImage, encodeImageSize } from '../index.js'
44
import * as fs from "fs";
55

66
test('sum from native', (t) => {
@@ -9,11 +9,11 @@ test('sum from native', (t) => {
99

1010
// empty hash a67c89456ea2fcd58cdf557c01357632d4f0d28c51dd0d8f79a4c739352f71a7
1111

12-
function testEncode(t, imagePath, expectedHash, trim = false) {
12+
function testEncode(t, imagePath, expectedHash, height = 64, trim = false) {
1313
let buffer = fs.readFileSync(imagePath);
1414

1515
//let arr = new Uint8Array(buffer);
16-
let encoded = encodeImage(buffer);
16+
let encoded = encodeImageSize(buffer, 64, height);
1717

1818
let hash = Buffer.from(encoded.hash).toString('hex');
1919
console.log('hash ', hash);
@@ -26,6 +26,9 @@ function testEncode(t, imagePath, expectedHash, trim = false) {
2626

2727
console.log('expected', expectedHash);
2828
t.is(mchash, expectedHash)
29+
30+
let err = encoded.error;
31+
t.is(err, null);
2932
}
3033

3134
testEncode.title = (providedTitle = "encode", a, b) =>
@@ -39,7 +42,9 @@ for (const params of [
3942
['images/randomImage3.png', '1b84a8081994cce186eeae4787f95bce663d6711272782ce659d9cc954fec435'],
4043
['images/randomImage4.png', 'e19abca2800650b449fff3f12ed3d1bd0f20861d7cdd00c66d62264b52837e2c'],
4144
['images/trimmed0.png', '0aa97a60ff386b6075aea693893106358def0cd580e6360599811e08bde38b6f'], // mojang strips the leading 0, this doesn't currently
42-
['images/trimmed0.png', 'aa97a60ff386b6075aea693893106358def0cd580e6360599811e08bde38b6f', true]
45+
['images/trimmed0.png', 'aa97a60ff386b6075aea693893106358def0cd580e6360599811e08bde38b6f', 64, true],
46+
['images/randomImage321.png', '8588cfec8f3a9d13459956916e1f85f37753ed81472e85df7601b9c62d3a24f1', 32],
47+
['images/randomImage322.png', '4730ea83a416fcba36b3ec75b8b3e24b476e65d888955038b330ab18baada613', 32],
4348
]) {
4449
test(testEncode, ...params);
4550
}

images/randomImage321.png

5.55 KB
Loading

images/randomImage322.png

5.55 KB
Loading

index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
export declare function sum(a: number, b: number): number
77
export declare function encodeImage(buffer: Uint8Array): ImageWithHashes
8+
export declare function encodeImageSize(buffer: Uint8Array, width: number, height: number): ImageWithHashes
89
export declare class ImageWithHashes {
910
png: Buffer
1011
minecraftHash: Buffer

index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,8 +310,9 @@ if (!nativeBinding) {
310310
throw new Error(`Failed to load native binding`)
311311
}
312312

313-
const { sum, ImageWithHashes, encodeImage } = nativeBinding
313+
const { sum, ImageWithHashes, encodeImage, encodeImageSize } = nativeBinding
314314

315315
module.exports.sum = sum
316316
module.exports.ImageWithHashes = ImageWithHashes
317317
module.exports.encodeImage = encodeImage
318+
module.exports.encodeImageSize = encodeImageSize

src/lib.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ pub fn encode_image(buffer: &[u8]) -> ImageWithHashes {
3131
encode_custom_image(buffer, SKIN_WIDTH, SKIN_HEIGHT)
3232
}
3333

34+
#[napi]
35+
pub fn encode_image_size(buffer: &[u8], width: u8, height: u8) -> ImageWithHashes {
36+
encode_custom_image(buffer, width as usize, height as usize)
37+
}
38+
3439
// based on https://github.com/GeyserMC/global_api/blob/dev/1.0.2/native/skins/src/skin_convert/skin_codec.rs#L100
3540
//#[napi]
3641
pub fn encode_custom_image(buffer: &[u8], width: usize, height: usize) -> ImageWithHashes {
@@ -50,7 +55,7 @@ pub fn encode_custom_image(buffer: &[u8], width: usize, height: usize) -> ImageW
5055
let decoded1 = decoded.unwrap();
5156
let decoded_data = decoded1.bytes();
5257

53-
let mut raw_data = vec![0; SKIN_DATA_LENGTH];
58+
let mut raw_data = vec![0; width * height * SKIN_CHANNELS];
5459
decoded_data.clone_into(&mut raw_data);
5560

5661
// encode images like Minecraft does

tools/randomImage.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,6 @@ function makeRandomImage(width = 64, height = 64) {
3333
}
3434

3535
(() => {
36-
const { imageBuffer, imageData, data, blob } = makeRandomImage(128, 128);
36+
const { imageBuffer, imageData, data, blob } = makeRandomImage(64, 32);
3737
fs.writeFileSync(`images/randomImage${Math.round(Math.random()*100)}.png`, imageBuffer);
3838
})();

0 commit comments

Comments
 (0)