1.0.1 • Published 6 years ago
jpeg-marker-stream v1.0.1
jpeg-marker-stream
parse markers from a JPEG:
- SOI
- JFIF
- JFXX
- EXIF
- FPXR
- DQT
- DHT
- DRI
- SOF
- SOS
- DATA
- EOI
example
var jpeg = require('jpeg-marker-stream')
process.stdin.pipe(jpeg())
.on('data', console.log)output:
$ node exif.js < files/cactus.jpg 2>/dev/null | head -n20
{ type: 'SOI', start: 0, end: 2 }
{ type: 'JFIF',
start: 2,
end: 20,
version: '1.1',
density: { units: 'pixels per inch', x: 72, y: 72 },
thumbnail: { x: 0, y: 0, data: <Buffer > } }
{ image:
{ ImageWidth: 2560,
ImageHeight: 1920,
Make: 'google',
Model: 'Nexus S',
Orientation: 1,
Software: 'JZO54K',
ModifyDate: Fri Jun 19 2015 11:40:52 GMT+0100 (BST),
YCbCrPositioning: 1,
ExifOffset: 164 },
thumbnail:
{ ImageWidth: 320,
ImageHeight: 240,api
var jpeg = require('jpeg-marker-stream')var stream = jpeg()
Return a transform stream jpeg that takes a binary stream of jpeg data as
input and produces an object stream as output with the object types described
below.
output object types
SOI
start of image
marker.type = 'SOI'marker.start- offset of first bytemarker.end- offset of last byte + 1
JFIF (APP0)
marker.type = 'JFIF'marker.start- offset of first bytemarker.end- offset of last byte + 1marker.version- jfif version string ('major.minor')marker.density.units-'aspect','pixels per inch'or'pixels per cm'marker.density.x- x densitymarker.density.y- y densitymarker.thumbnail.width- thumbnail widthmarker.thumbnail.height- thumbnail heightmarker.thumbnail.data- thumbnail data as a Buffer
JFXX (APP0)
marker.type = 'JFXX'marker.start- offset of first bytemarker.end- offset of last byte + 1marker.thumbnail.format-'JPEG','PAL', or'RGB'marker.thumbnail.width- thumbnail width (not available for'JPEG'marker.thumbnail.height- thumbnail height (not available for'JPEG')marker.thumbnail.data- thumbnail data as a Buffermarker.thumbnail.palette- thumbnail palette (forPALthumbnails)
EXIF (APP1)
exif data
marker.type = 'EXIF'marker.start- offset of first bytemarker.end- offset of last byte + 1marker.image- exif image datamarker.thumbnail- exif thumbnail datamarker.exif- other exif data
FPXR (APP2)
exif extended data
marker.type = 'FPXR'marker.start- offset of first bytemarker.end- offset of last byte + 1
DQT
quantization table
marker.type = 'DQT'marker.start- offset of first bytemarker.end- offset of last byte + 1marker.tables- array of 64-byte quantization tables as buffers
DHT
huffman table
marker.type = 'DHT'marker.start- offset of first bytemarker.end- offset of last byte + 1marker.data- raw huffman data
DRI
define restart interoperability
marker.type = 'DRI'marker.start- offset of first bytemarker.end- offset of last byte + 1
SOS
start of scan, immediately preceeds compressed image data
marker.type = 'SOS'marker.start- offset of first bytemarker.end- offset of last byte + 1
SOF
start of frame
marker.type = 'SOF'marker.start- offset of first bytemarker.end- offset of last byte + 1marker.precision- bits of precision (8)marker.width- width of image (may or may not include padding)marker.height- height of image (may or may not include padding)marker.H0-2marker.V0-1or2
EOI
end of image
marker.type = 'EOI'marker.start- offset of first bytemarker.end- offset of last byte + 1
see also
- https://en.wikipedia.org/wiki/JPEG_File_Interchange_Format
- http://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf
install
npm install jpeg-marker-streamlicense
BSD