libmagic

Last updated:

0 purchases

libmagic Image
libmagic Images
Add to Cart

Description:

libmagic

A binding to the libmagic library for magic numbers detection using dart:ffi provinding a simple and easy way to identify file types from dart code.
Prerequisites #
To fully use this package, you need to have the libmagic library installed on your system. You can install it using the following commands:
# For Ubuntu/Debian
sudo apt-get install libmagic-dev

# For Fedora
sudo dnf install file-devel

# For Alpine
apk add file-dev

# For MacOS
brew install libmagic
copied to clipboard
Usage #
Add the library to your project by adding the following to your pubspec.yaml file:
dependencies:
libmagic: ^5.45.0
copied to clipboard
Then run pub get to download the library.
import 'dart:ffi';
import 'dart:io';

import 'package:libmagic/libmagic.dart';

void main() {

late final Magic libmagic;
late final magic_t magic;


/// Load the libmagic library from the system
DynamicLibrary? lib;

try {
lib = switch (Platform.operatingSystem) {
'linux' => DynamicLibrary.open('libmagic.so'),
'macos' =>
DynamicLibrary.open('libmagic.dylib'),
'windows' => DynamicLibrary.open('magic1.dll'),
_ => throw Exception('Unsupported platform')
};
} catch (e) {
print('Failed to load libmagic: $e');
}

if (lib == null) {
return;
}

libmagic = Magic(lib);

/// Open the magic database
magic = libmagic.magic_open(MAGIC_NONE);

/// Load the magic database
libmagic.magic_load(magic, nullptr);

/// Get the version of the magic database
final version = libmagic.magic_version();

/// Set the flags for the magic database
final flags = libmagic.magic_setflags(magic, MAGIC_MIME_TYPE);

/// Get the flags for the magic database
final getFlags = libmagic.magic_getflags(magic);

/// Close the magic database
libmagic.magic_close(magic);
}
copied to clipboard
Update / Generate the bindings #
Updating the binding require both the prerequisites and the following steps:
dart pub run ffigen
copied to clipboard
Versionning scheme #
The versionning scheme used in this package is the same as the one used in the libmagic library. The version number is composed of three parts: the major version, the minor version, and the patch version. The version number is in the format x.y.z where x is the major version, y is the minor version, and z is the patch version.
A +v is added to the version number to indicate that the version is a custom version and not the original version of the library.
Credit #
Libmagic authors #

Måns Rullgård Initial libmagic implementation, and configuration.
Christos Zoulas API cleanup, error code and allocation handling.

Test files #

https://samplelib.com

License:

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files In This Product:

Customer Reviews

There are no reviews.