first commit
This commit is contained in:
81
build/node_modules/bmp-js/lib/encoder.js
generated
vendored
Normal file
81
build/node_modules/bmp-js/lib/encoder.js
generated
vendored
Normal file
@@ -0,0 +1,81 @@
|
||||
/**
|
||||
* @author shaozilee
|
||||
*
|
||||
* BMP format encoder,encode 24bit BMP
|
||||
* Not support quality compression
|
||||
*
|
||||
*/
|
||||
|
||||
function BmpEncoder(imgData){
|
||||
this.buffer = imgData.data;
|
||||
this.width = imgData.width;
|
||||
this.height = imgData.height;
|
||||
this.extraBytes = this.width%4;
|
||||
this.rgbSize = this.height*(3*this.width+this.extraBytes);
|
||||
this.headerInfoSize = 40;
|
||||
|
||||
this.data = [];
|
||||
/******************header***********************/
|
||||
this.flag = "BM";
|
||||
this.reserved = 0;
|
||||
this.offset = 54;
|
||||
this.fileSize = this.rgbSize+this.offset;
|
||||
this.planes = 1;
|
||||
this.bitPP = 24;
|
||||
this.compress = 0;
|
||||
this.hr = 0;
|
||||
this.vr = 0;
|
||||
this.colors = 0;
|
||||
this.importantColors = 0;
|
||||
}
|
||||
|
||||
BmpEncoder.prototype.encode = function() {
|
||||
var tempBuffer = new Buffer(this.offset+this.rgbSize);
|
||||
this.pos = 0;
|
||||
tempBuffer.write(this.flag,this.pos,2);this.pos+=2;
|
||||
tempBuffer.writeUInt32LE(this.fileSize,this.pos);this.pos+=4;
|
||||
tempBuffer.writeUInt32LE(this.reserved,this.pos);this.pos+=4;
|
||||
tempBuffer.writeUInt32LE(this.offset,this.pos);this.pos+=4;
|
||||
|
||||
tempBuffer.writeUInt32LE(this.headerInfoSize,this.pos);this.pos+=4;
|
||||
tempBuffer.writeUInt32LE(this.width,this.pos);this.pos+=4;
|
||||
tempBuffer.writeUInt32LE(this.height,this.pos);this.pos+=4;
|
||||
tempBuffer.writeUInt16LE(this.planes,this.pos);this.pos+=2;
|
||||
tempBuffer.writeUInt16LE(this.bitPP,this.pos);this.pos+=2;
|
||||
tempBuffer.writeUInt32LE(this.compress,this.pos);this.pos+=4;
|
||||
tempBuffer.writeUInt32LE(this.rgbSize,this.pos);this.pos+=4;
|
||||
tempBuffer.writeUInt32LE(this.hr,this.pos);this.pos+=4;
|
||||
tempBuffer.writeUInt32LE(this.vr,this.pos);this.pos+=4;
|
||||
tempBuffer.writeUInt32LE(this.colors,this.pos);this.pos+=4;
|
||||
tempBuffer.writeUInt32LE(this.importantColors,this.pos);this.pos+=4;
|
||||
|
||||
var i=0;
|
||||
var rowBytes = 3*this.width+this.extraBytes;
|
||||
|
||||
for (var y = this.height - 1; y >= 0; y--){
|
||||
for (var x = 0; x < this.width; x++){
|
||||
var p = this.pos+y*rowBytes+x*3;
|
||||
tempBuffer[p+2]= this.buffer[i++];//r
|
||||
tempBuffer[p+1] = this.buffer[i++];//g
|
||||
tempBuffer[p] = this.buffer[i++];//b
|
||||
i++;
|
||||
}
|
||||
if(this.extraBytes>0){
|
||||
var fillOffset = this.pos+y*rowBytes+this.width*3;
|
||||
tempBuffer.fill(0,fillOffset,fillOffset+this.extraBytes);
|
||||
}
|
||||
}
|
||||
|
||||
return tempBuffer;
|
||||
};
|
||||
|
||||
module.exports = function(imgData, quality) {
|
||||
if (typeof quality === 'undefined') quality = 100;
|
||||
var encoder = new BmpEncoder(imgData);
|
||||
var data = encoder.encode();
|
||||
return {
|
||||
data: data,
|
||||
width: imgData.width,
|
||||
height: imgData.height
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user