Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/juliaio/filetypes.jl
Small and dependency-free Julia package to infer file and MIME type checking the magic numbers signature.
https://github.com/juliaio/filetypes.jl
filetype filetype-checker filetype-validator hacktoberfest julia magic-numbers mime signature
Last synced: 2 months ago
JSON representation
Small and dependency-free Julia package to infer file and MIME type checking the magic numbers signature.
- Host: GitHub
- URL: https://github.com/juliaio/filetypes.jl
- Owner: JuliaIO
- License: mit
- Created: 2021-01-04T10:55:12.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2023-09-04T15:11:43.000Z (over 1 year ago)
- Last Synced: 2024-10-12T07:16:59.316Z (3 months ago)
- Topics: filetype, filetype-checker, filetype-validator, hacktoberfest, julia, magic-numbers, mime, signature
- Language: Julia
- Homepage:
- Size: 3.64 MB
- Stars: 18
- Watchers: 14
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# FileTypes.jl
Small and dependency free [Julia](https://julialang.org/) package to infer file and MIME type checking the [magic numbers]() signature.
[![Build Status](https://github.com/JuliaIO/FileTypes.jl/actions/workflows/CI.yml/badge.svg)](https://github.com/JuliaIO/FileTypes.jl)
[![Coverage](https://codecov.io/gh/JuliaIO/FileTypes.jl/branch/main/graph/badge.svg)](https://codecov.io/gh/JuliaIO/FileTypes.jl)## Features
- Supports a [wide range](#supported-types) of file types
- Provides file extension and proper MIME type
- File discovery by extension or MIME type
- File discovery by class (image, video, audio...)
- Provides a bunch of helpers and file matching shortcuts
- Simple and semantic API## General Info
currently under developement.Take a look on [contribution](#Contribution)
## Examples
#### Simple file type checking
```julia
using FileTypesjulia> kind = matcher("example.gif")
FileType.Types("gif", "image/gif")julia> kind.extension
"gif"julia> kind.mime
"image/gif"```
#### Check type class
```julia
using FileTypes
julia> Is(FileType.Image,"example.gif")
true
```#### additional checker function
```julia
using FileTypesjulia> is_mime_supported("image/jpeg")
truejulia> is_extension_supported("png")
true```
#### You can see the supported file type using
```julia
julia> using FileTypesjulia> FileType
FileTypes.FileTypejulia> FileType.Image
Dict{FileTypes.FileType.Type, Function} with 12 entries:
Type("gif", MIME type image/gif) => Gif
Type("cr2", MIME type image/x-canon-cr2) => CR2
Type("jp2", MIME type image/jp2) => Jpeg2000
Type("psd", MIME type image/vnd.adobe.photoshop) => Psd
Type("bmp", MIME type image/bmp) => Bmp
Type("tif", MIME type image/tiff) => Tiff
Type("jpg", MIME type image/jpeg) => Jpeg
Type("ico", MIME type image/vnd.microsoft.icon) => Ico
Type("png", MIME type image/png) => Png
Type("webp", MIME type image/webp) => Webp
Type("jxr", MIME type image/vnd.ms-photo) => Jxr
Type("dwg", MIME type image/vnd.dwg) => Dwg```
## Supported types
#### Image
- **jpg** - `image/jpeg`
- **png** - `image/png`
- **gif** - `image/gif`
- **webp** - `image/webp`
- **cr2** - `image/x-canon-cr2`
- **tif** - `image/tiff`
- **bmp** - `image/bmp`
- **heif** - `image/heif`
- **jxr** - `image/vnd.ms-photo`
- **psd** - `image/vnd.adobe.photoshop`
- **ico** - `image/vnd.microsoft.icon`
- **dwg** - `image/vnd.dwg`#### Video
- **m4v** - `video/x-m4v`
- **webm** - `video/webm`
- **mov** - `video/quicktime`
- **avi** - `video/x-msvideo`
- **wmv** - `video/x-ms-wmv`
- **mpg** - `video/mpeg`
- **flv** - `video/x-flv`
- **3gp** - `video/3gpp`#### Audio
- **mid** - `audio/midi`
- **mp3** - `audio/mpeg`
- **m4a** - `audio/m4a`
- **ogg** - `audio/ogg`
- **flac** - `audio/x-flac`
- **wav** - `audio/x-wav`
- **amr** - `audio/amr`
- **aac** - `audio/aac`#### Archive
- **epub** - `application/epub+zip`
- **zip** - `application/zip`
- **tar** - `application/x-tar`
- **rar** - `application/vnd.rar`
- **gz** - `application/gzip`
- **bz2** - `application/x-bzip2`
- **7z** - `application/x-7z-compressed`
- **xz** - `application/x-xz`
- **pdf** - `application/pdf`
- **exe** - `application/vnd.microsoft.portable-executable`
- **swf** - `application/x-shockwave-flash`
- **rtf** - `application/rtf`
- **iso** - `application/x-iso9660-image`
- **eot** - `application/octet-stream`
- **ps** - `application/postscript`
- **sqlite** - `application/vnd.sqlite3`
- **nes** - `application/x-nintendo-nes-rom`
- **crx** - `application/x-google-chrome-extension`
- **cab** - `application/vnd.ms-cab-compressed`
- **deb** - `application/vnd.debian.binary-package`
- **ar** - `application/x-unix-archive`
- **Z** - `application/x-compress`
- **lz** - `application/x-lzip`
- **rpm** - `application/x-rpm`
- **elf** - `application/x-executable`
- **dcm** - `application/dicom`#### Documents
- **doc** - `application/msword`
- **xls** - `application/vnd.ms-excel`
- **ppt** - `application/vnd.ms-powerpoint`#### Font
- **woff** - `application/font-woff`
- **woff2** - `application/font-woff`
- **ttf** - `application/font-sfnt`
- **otf** - `application/font-sfnt`#### Application
- **wasm** - `application/wasm`
- **dex** - `application/vnd.android.dex`
- **dey** - `application/vnd.android.dey`## Contribution
- Currently, the ``Is`` API takes a parameter as ``FileType.Images.Image`` which is a dictionary of all the supported image. I think it should be an (immutable)namedtuple as the custom filetype should be of unknown type only.
- There should be an API to add new custom Types.
- Currently, Filetypes(publicly accessed) is a tuple that should be an Array as this library has to provide an API to add a new type, and that new type could we handled in ``Is`` API like FileType.Unknown.
- The ``FileType.Images.Image`` should be ``FileType.Images``## Benchmark
system info:
SMP Debian 5.8.7-1kali1 (2020-09-14) x86_64 GNU/Linux
Intel(R) Core(TM) i3-6006U CPU @ 2.00GHz```julia
julia> @benchmark matcher("example.png")
BenchmarkTools.Trial:
memory estimate: 1.69 KiB
allocs estimate: 16
--------------
minimum time: 12.304 μs (0.00% GC)
median time: 12.859 μs (0.00% GC)
mean time: 14.708 μs (0.00% GC)
maximum time: 329.586 μs (0.00% GC)
--------------
samples: 10000
evals/sample: 1```
## License
MIT - Prince Roshan