Ich möchte für beschädigte JPEG-Bilder überprüfen und so weit, gerade in der Kommandozeile kann ich identify image.jpg
verwenden, die Ausgänge:Wie überprüft man beschädigte JPG-Bilder mit node.js und gm?
image.jpg JPEG 1920x1200 1920x1200+0+0 8-bit sRGB 65.5KB 0.000u 0:00.009
identify: Premature end of JPEG file `image.jpg' @ warning/jpeg.c/JPEGWarningHandler/352.
identify: Corrupt JPEG data: premature end of data segment `image.jpg' @ warning/jpeg.c/JPEGWarningHandler/352.
oder gm identify image.jpg
die Ausgänge:
image.jpg JPEG 1920x1200+0+0 DirectClass 8-bit 64.0Ki 0.000u 0:01
gm identify: Corrupt JPEG data: premature end of data segment (image.jpg).
gm identify: Corrupt JPEG data: premature end of data segment (image.jpg).
wäre es schön, wenn ich die gm package verwenden kann, um auch die beschädigten JPEG-Daten zu erhalten. Einfach mit identify()
gibt eine Menge Daten, aber nichts über korrupte Daten
gm('image.jpg')
.identify('%C',function (err, data) {
if (!err) console.log(data)
else console.error(err)
});
ich diese Notiz in der Readme bemerkt haben:
Wenn gm Sie benötigen, oder tut es Ihnen nicht mit einem Verfahren liefern nicht arbeiten als Sie möchten, können Sie einfach gm(). in() oder gm(). out(), um Ihre eigenen Argumente.
Ich habe so etwas wie dies versucht:
gm()
.command("identify")
.in('image.jpg');
aber ich bekomme keine Ausgabe so bin ich wohl etwas falsch gemacht.
Ich habe auch Knoten-cmd versucht:
cmd.get(
'gm identify image.jpg',
function(data){
console.log('output: ',data)
}
);
aber ich nur die erste Zeile der Ausgabe sehen.
Was ist die saubere/empfohlene Möglichkeit, die Multiline-Ausgabe von identify
über gm
Paket zu bekommen? Ansonsten, was ist eine Knoten elegante Lösung zum Lesen der vollständigen Ausgabe des Befehls identifizieren.
aktualisieren Meine Vermutung ist die Zeichenfolge gm
nicht angezeigt wird verwendet, weil es durch stderr
kommt, nicht stdout
.
Ich habe mit einer gezwickt Version von this snippet getestet:
var spawn = require('child_process').spawn;
var bin = "identify"
var args = ['image.jpg'];
var cspr = spawn(bin, args);
cspr.stderr.on('data', function (data) {
data += '';
console.log(data.replace("\n", "\nstderr: "));
});
cspr.on('exit', function (code) {
console.log('child process exited with code ' + code);
process.exit(code);
});
Was ist die saubere Art und Weise die stderr
Ausgabe über gm
zu bekommen?
Hallo George, Sorry, ich spreche 'node' nicht aber ich denke das ist sehr ähnlich - vielleicht? http://StackOverflow.com/a/43222531/2836621 –
Wenn das Problem ist, dass Sie "identifizieren" anstelle von "konvertieren" verwenden möchten, können Sie "konvertieren" wie "identifizieren" (und damit deren Aufruf verwenden Interface) mit 'gm konvertieren someImage.jpg info: -' optional bei Bedarf' -verbose' hinzufügen. –
@MarkSetchell vielen Dank für die Eingabe. Ich habe Ihren Vorschlag an den Knoten angepasst: '' 'gm (jpgPath) .Kommando ('convert') .write ('out.png', Funktion (Fehler, stdout, stderr) { console.log (" stderr " , stderr); }); '' 'und es funktioniert! Wenn Sie Ihren Kommentar als Antwort hinzufügen, wäre ich mehr als glücklich zu akzeptieren :) –