-
Notifications
You must be signed in to change notification settings - Fork 13
/
tiny.c
35 lines (34 loc) · 978 Bytes
/
tiny.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/*
* Copyright (c) 2021,skyfish
* All rights reserved.
*/
#include "tiny.h"
#include "png_compress.h"
#include "jpg_compress.h"
#include "gif_compress.h"
void EMSCRIPTEN_KEEPALIVE tiny(unsigned char* buf,int bufsize,unsigned char* retdata) {
unsigned char* pngSignature;
pngSignature = malloc(kPngSignatureLength);
memcpy(pngSignature,buf,kPngSignatureLength);
if(png_check_sig(pngSignature, kPngSignatureLength)) {
png_compress(buf,bufsize,retdata);
return;
}
unsigned short jpgSignature1;
memcpy(&jpgSignature1,buf,2);
if(jpgSignature1==0xd8ff) {
myjpg_compress(buf,bufsize,retdata);
return;
}
unsigned char gifSig1;
unsigned char gifSig2;
unsigned char gifSig3;
memcpy(&gifSig1,buf,1);
memcpy(&gifSig2,buf+1,1);
memcpy(&gifSig3,buf+2,1);
if(gifSig1==0x47&&gifSig2==0x49&&gifSig3==0x46) {
mygif_compress(buf,bufsize,retdata);
return;
}
failSet(retdata);
}