Home

Awesome

FormatParser

Code Quality Continuous Integration Coverage Status Hex.pm version Hex.pm downloads

FormatParser can be used to figure out the type and the format of a file. It also can extract some additional information.

Documentation can be found here.

Inspired heavily by format_parser.

Basic usage

# Image
{:ok, file} = File.read("myimage.png")
match = FormatParser.parse(file)
match.nature                      #=> :image
match.format                      #=> :gif
match.width_px                    #=> 256
match.height_px                   #=> 256
match.intrinsics[:filter_method]  #=> 0

# Video
{:ok, file} = File.read("myvideo.flv")
match = FormatParser.parse(file)
match.nature                      #=> :video
match.format                      #=> :flv

# Document
{:ok, file} = File.read("mydocument.rtf")
match = FormatParser.parse(file)
match.nature                      #=> :document
match.format                      #=> :rtf

# Audio
{:ok, file} = File.read("myaudio.wav")
match = FormatParser.parse(file)
match.nature                      #=> :audio
match.format                      #=> :wav
match.sample_rate_hz              #=> 44100
match.num_audio_channels          #=> 2

# Font
{:ok, file} = File.read("myfont.ttf")
match = FormatParser.parse(file)
match.nature                      #=> :font
match.format                      #=> :ttf

Supported Formats

Audio

TypeNatureFormatSample Rate# of ChannelsIntrinsics
aiffxxxnum_frames, bits_per_sample
wavxxxxbyte_rate, block_align, bits_per_sample
oggxxxx
flacxxxx

Video

TypeNatureFormat
flvxx

Document

TypeNatureFormatIntrinsics
rtfxx
pdfxxpage_count

Image

TypeNatureFormatWidthHeightIntrinsics
jpgxx
gifxxxx
icoxxxxnum_color_palette, color_planes, bits_per_pixel
curxxxxnum_color_palette, hotspot_horizontal_coords, hotspot_vertical_coords
cr2xxxxdate_time, model, preview_byte_count, preview_offset
nefxxxxdate_time, model, preview_byte_count, preview_offset
tifxxxx
bmpxxxx
pngxxxxbit_depth, color_type, compression_method, crc, filter_method, interlace_method
psdxxxx
jb2xx
xcfxx
exrxx
webpxx

Font

TypeNatureFormat
ttfxx
otfxx
fonxx

Installation

Add the following to your mix.exs file

def deps do
  [
    {:format_parser, "~> 1.4.0"}
  ]
end

And run mix deps.get

Contribute

Please feel free to fork and send us a PR or open up an issue.