Skip to content

Instantly share code, notes, and snippets.

@noorus
Created June 4, 2016 00:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save noorus/fcd02b398639a940c1e9b16fbc9e87af to your computer and use it in GitHub Desktop.
Save noorus/fcd02b398639a940c1e9b16fbc9e87af to your computer and use it in GitHub Desktop.
old photoutils backup
var shelly = require( "shelly" );
var childProcess = require( "child_process" );
var typist = require( "typist" );
var moment = require( "moment" );
var gm = require( "gm" );
var Q = require( "q" );
var im = gm.subClass({ imageMagick: true });
module.exports = {
parseImage: function( buffer )
{
var deferred = Q.defer();
gm( buffer ).identify( function( error, data )
{
if ( error || !data.format || !data.size )
return deferred.reject( error || new Error( "Unable to identify image" ) );
var fmt = data.format.toLowerCase();
if ( ["jpeg","tiff"].indexOf( fmt ) == -1 )
return deferred.reject( new Error( "Image is not in jpeg or tiff format" ) );
var image = {
format: fmt,
size: data.size
};
if ( data.hasOwnProperty( "JPEG-Quality" ) )
image.jpegQuality = data["JPEG-Quality"];
if ( data.hasOwnProperty( "JPEG-Colorspace" ) )
image.jpegColorspace = data["JPEG-Colorspace"];
if ( data.hasOwnProperty( "JPEG-Sampling-factors" ) )
image.jpegSampling = data["JPEG-Sampling-factors"];
deferred.resolve( image );
});
return deferred.promise;
},
parseExif: function( filename )
{
var deferred = Q.defer();
var cmd = shelly( "exiftool -json -d \"%Y-%m-%dT%H:%M:%S\" -b ?", filename );
var exec = childProcess.exec( cmd, function( error, output )
{
if ( error )
return deferred.reject( error );
var data;
try {
data = JSON.parse( output );
} catch( err ) {
return deferred.reject( err );
}
if ( !data || data.length < 1 )
return deferred.reject( new Error( "Exiftool output failed" ) );
var values = [];
for ( var key in data[0] )
{
if ( !data[0].hasOwnProperty( key ) )
continue;
var native = data[0][key];
var entry = {
name: key
};
if ( moment( native, moment.ISO_8601 ).isValid() ) {
entry.value = moment( native );
entry.type = "datetime";
} else if ( typist.typeOf( native ) == "string" ) {
if ( native.substr( 0, 7 ) == "base64:" ) {
entry.value = new Buffer( native.substr( 7 ), "base64" );
entry.type = "binary";
} else {
entry.value = native.trim();
entry.type = "string";
}
} else {
entry.value = native;
entry.type = typist.typeOf( entry.value );
}
values.push( entry );
}
deferred.resolve( values );
});
return deferred.promise;
},
stripImage: function( buffer )
{
var deferred = Q.defer();
im( buffer ).strip().toBuffer( function( error, buffer )
{
if ( error || !buffer )
return deferred.reject( error || new Error( "Cannot strip image file" ) );
deferred.resolve( buffer );
});
return deferred.promise;
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment