Created
June 4, 2016 00:51
-
-
Save noorus/fcd02b398639a940c1e9b16fbc9e87af to your computer and use it in GitHub Desktop.
old photoutils backup
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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