Skip to content

Commit

Permalink
Support JPEG compression
Browse files Browse the repository at this point in the history
  • Loading branch information
seikichi committed Oct 31, 2016
1 parent 84c288f commit abeec83
Show file tree
Hide file tree
Showing 4 changed files with 3,198 additions and 9,197 deletions.
30 changes: 25 additions & 5 deletions build.sh
Expand Up @@ -2,7 +2,9 @@

export EMCC_CFLAGS="-O2"
ZLIB_PKGVER=1.2.8
LIBTIFF_PKGVER=4.0.3
LIBTIFF_PKGVER=4.0.6
LIBJPEG_PKGVER=9b
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# build zlib
wget http://zlib.net/current/zlib-${ZLIB_PKGVER}.tar.gz
Expand All @@ -12,20 +14,37 @@ emconfigure ./configure
emmake make
cd ..

# build libtiff
# build libjpeg
wget http://www.ijg.org/files/jpegsrc.v${LIBJPEG_PKGVER}.tar.gz
tar xf jpegsrc.v${LIBJPEG_PKGVER}.tar.gz
cd jpeg-${LIBJPEG_PKGVER}
emconfigure ./configure
emmake make clean # do not ask me why i have to clean here...
emmake make
cd ..

# # build libtiff
wget http://download.osgeo.org/libtiff/tiff-${LIBTIFF_PKGVER}.tar.gz
tar xzvf tiff-${LIBTIFF_PKGVER}.tar.gz
cd tiff-${LIBTIFF_PKGVER}
# see: https://github.com/kripken/emscripten/issues/662
patch -p0 < ../tif_open.c.patch
patch -p0 < ../tiff.h.patch
emconfigure ./configure --enable-shared
emconfigure ./configure \
--with-zlib-include-dir=${DIR}/zlib-${ZLIB_PKGVER}/ \
--with-zlib-lib-dir=${DIR}/zlib-${ZLIB_PKGVER}/ \
--with-jpeg-include-dir=${DIR}/jpeg-${LIBJPEG_PKGVER}/ \
--with-jpeg-lib-dir=${DIR}/jpeg-${LIBJPEG_PKGVER}/.libs/ \
--enable-shared
emmake make
cd ..

emcc -o tiff.raw.js \
-I ./tiff-${LIBTIFF_PKGVER}/libtiff \
--pre-js pre.js \
--post-js post.js \
--memory-init-file 0 \
-s ALLOW_MEMORY_GROWTH=1 \
-s EXPORTED_FUNCTIONS="["\
"'_TIFFOpen',"\
"'_TIFFClose',"\
Expand All @@ -41,11 +60,12 @@ emcc -o tiff.raw.js \
"'FS']" \
export.c \
tiff-${LIBTIFF_PKGVER}/libtiff/.libs/libtiff.a \
zlib-${ZLIB_PKGVER}/libz.a
zlib-${ZLIB_PKGVER}/libz.a \
jpeg-${LIBJPEG_PKGVER}/.libs/libjpeg.a

echo 'var TiffTag = {' > tiff_tag.ts
grep '^#define[[:space:]]\+TIFFTAG_[A-Za-z_]\+[[:space:]]\+' \
tiff-4.0.3/libtiff/tiff.h \
tiff-${LIBTIFF_PKGVER}/libtiff/tiff.h \
| sed -e "s@^\#define[[:space:]]*TIFFTAG_\([A-Za-z_]*\)[[:space:]]*\([A-Za-z0-9]*\).*@ \1 : \2,@g" \
>> tiff_tag.ts
echo '};' >> tiff_tag.ts
Expand Down
224 changes: 25 additions & 199 deletions tiff.d.ts
@@ -1,16 +1,23 @@
declare var loadModule: (options: Tiff.InitializeOptions) => typeof Module;
declare class Tiff {
private _filename;
private _tiffPtr;
private static uniqueIdForFileName;
private static Module;
static initialize(options: Tiff.InitializeOptions): void;
constructor(params: Tiff.Params);
public width(): number;
public height(): number;
public currentDirectory(): number;
public countDirectory(): number;
public setDirectory(index: number): void;
public getField(tag: number): number;
public readRGBAImage(): ArrayBuffer;
public toCanvas(): HTMLCanvasElement;
public toDataURL(): string;
public close(): void;
width(): number;
height(): number;
currentDirectory(): number;
countDirectory(): number;
setDirectory(index: number): void;
getField(tag: number): number;
readRGBAImage(): ArrayBuffer;
toCanvas(): HTMLCanvasElement;
toDataURL(): string;
close(): void;
private static createUniqueFileName();
private static createFileSystemObjectFromBuffer(buffer);
}
declare module Tiff {
interface InitializeOptions {
Expand All @@ -20,195 +27,14 @@ declare module Tiff {
buffer: ArrayBuffer;
}
class Exception {
public message: string;
public name: string;
message: string;
name: string;
constructor(message: string);
}
var Tag: {
SUBFILETYPE: number;
OSUBFILETYPE: number;
IMAGEWIDTH: number;
IMAGELENGTH: number;
BITSPERSAMPLE: number;
COMPRESSION: number;
PHOTOMETRIC: number;
THRESHHOLDING: number;
CELLWIDTH: number;
CELLLENGTH: number;
FILLORDER: number;
DOCUMENTNAME: number;
IMAGEDESCRIPTION: number;
MAKE: number;
MODEL: number;
STRIPOFFSETS: number;
ORIENTATION: number;
SAMPLESPERPIXEL: number;
ROWSPERSTRIP: number;
STRIPBYTECOUNTS: number;
MINSAMPLEVALUE: number;
MAXSAMPLEVALUE: number;
XRESOLUTION: number;
YRESOLUTION: number;
PLANARCONFIG: number;
PAGENAME: number;
XPOSITION: number;
YPOSITION: number;
FREEOFFSETS: number;
FREEBYTECOUNTS: number;
GRAYRESPONSEUNIT: number;
GRAYRESPONSECURVE: number;
RESOLUTIONUNIT: number;
PAGENUMBER: number;
COLORRESPONSEUNIT: number;
TRANSFERFUNCTION: number;
SOFTWARE: number;
DATETIME: number;
ARTIST: number;
HOSTCOMPUTER: number;
PREDICTOR: number;
WHITEPOINT: number;
PRIMARYCHROMATICITIES: number;
COLORMAP: number;
HALFTONEHINTS: number;
TILEWIDTH: number;
TILELENGTH: number;
TILEOFFSETS: number;
TILEBYTECOUNTS: number;
BADFAXLINES: number;
CLEANFAXDATA: number;
CONSECUTIVEBADFAXLINES: number;
SUBIFD: number;
INKSET: number;
INKNAMES: number;
NUMBEROFINKS: number;
DOTRANGE: number;
TARGETPRINTER: number;
EXTRASAMPLES: number;
SAMPLEFORMAT: number;
SMINSAMPLEVALUE: number;
SMAXSAMPLEVALUE: number;
CLIPPATH: number;
XCLIPPATHUNITS: number;
YCLIPPATHUNITS: number;
INDEXED: number;
JPEGTABLES: number;
OPIPROXY: number;
GLOBALPARAMETERSIFD: number;
PROFILETYPE: number;
FAXPROFILE: number;
CODINGMETHODS: number;
VERSIONYEAR: number;
MODENUMBER: number;
DECODE: number;
IMAGEBASECOLOR: number;
JPEGPROC: number;
JPEGIFOFFSET: number;
JPEGIFBYTECOUNT: number;
JPEGRESTARTINTERVAL: number;
JPEGLOSSLESSPREDICTORS: number;
JPEGPOINTTRANSFORM: number;
JPEGQTABLES: number;
JPEGDCTABLES: number;
JPEGACTABLES: number;
YCBCRCOEFFICIENTS: number;
YCBCRSUBSAMPLING: number;
YCBCRPOSITIONING: number;
REFERENCEBLACKWHITE: number;
STRIPROWCOUNTS: number;
XMLPACKET: number;
OPIIMAGEID: number;
REFPTS: number;
REGIONTACKPOINT: number;
REGIONWARPCORNERS: number;
REGIONAFFINE: number;
MATTEING: number;
DATATYPE: number;
IMAGEDEPTH: number;
TILEDEPTH: number;
PIXAR_IMAGEFULLWIDTH: number;
PIXAR_IMAGEFULLLENGTH: number;
PIXAR_TEXTUREFORMAT: number;
PIXAR_WRAPMODES: number;
PIXAR_FOVCOT: number;
PIXAR_MATRIX_WORLDTOSCREEN: number;
PIXAR_MATRIX_WORLDTOCAMERA: number;
WRITERSERIALNUMBER: number;
COPYRIGHT: number;
RICHTIFFIPTC: number;
FRAMECOUNT: number;
PHOTOSHOP: number;
EXIFIFD: number;
ICCPROFILE: number;
IMAGELAYER: number;
JBIGOPTIONS: number;
GPSIFD: number;
FAXRECVPARAMS: number;
FAXSUBADDRESS: number;
FAXRECVTIME: number;
FAXDCS: number;
STONITS: number;
FEDEX_EDR: number;
INTEROPERABILITYIFD: number;
DNGVERSION: number;
DNGBACKWARDVERSION: number;
UNIQUECAMERAMODEL: number;
LOCALIZEDCAMERAMODEL: number;
CFAPLANECOLOR: number;
CFALAYOUT: number;
LINEARIZATIONTABLE: number;
BLACKLEVELREPEATDIM: number;
BLACKLEVEL: number;
BLACKLEVELDELTAH: number;
BLACKLEVELDELTAV: number;
WHITELEVEL: number;
DEFAULTSCALE: number;
DEFAULTCROPORIGIN: number;
DEFAULTCROPSIZE: number;
ANALOGBALANCE: number;
ASSHOTNEUTRAL: number;
ASSHOTWHITEXY: number;
BASELINEEXPOSURE: number;
BASELINENOISE: number;
BASELINESHARPNESS: number;
BAYERGREENSPLIT: number;
LINEARRESPONSELIMIT: number;
CAMERASERIALNUMBER: number;
LENSINFO: number;
CHROMABLURRADIUS: number;
ANTIALIASSTRENGTH: number;
SHADOWSCALE: number;
DNGPRIVATEDATA: number;
MAKERNOTESAFETY: number;
BESTQUALITYSCALE: number;
RAWDATAUNIQUEID: number;
ORIGINALRAWFILENAME: number;
ORIGINALRAWFILEDATA: number;
ACTIVEAREA: number;
MASKEDAREAS: number;
ASSHOTICCPROFILE: number;
ASSHOTPREPROFILEMATRIX: number;
CURRENTICCPROFILE: number;
CURRENTPREPROFILEMATRIX: number;
DCSHUESHIFTVALUES: number;
FAXMODE: number;
JPEGQUALITY: number;
JPEGCOLORMODE: number;
JPEGTABLESMODE: number;
FAXFILLFUNC: number;
PIXARLOGDATAFMT: number;
DCSIMAGERTYPE: number;
DCSINTERPMODE: number;
DCSBALANCEARRAY: number;
DCSCORRECTMATRIX: number;
DCSGAMMA: number;
DCSTOESHOULDERPTS: number;
DCSCALIBRATIONFD: number;
ZIPQUALITY: number;
PIXARLOGQUALITY: number;
DCSCLIPRECTANGLE: number;
SGILOGDATAFMT: number;
SGILOGENCODE: number;
LZMAPRESET: number;
PERSAMPLE: number;
};
var Tag: typeof TiffTag;
}
declare var process: any;
declare var require: any;
declare var module: any;
declare var define: any;
declare var self: any;

0 comments on commit abeec83

Please sign in to comment.