2013-04-30 13 views
8

Ich versuche eine GIF-Animation in R zu erstellen. Ich habe ein Array von Matrizen, die ich in eine GIF-Animation konvertieren möchte. Meine Strategie ist aus diesem Beispiel inspiriert:Fehler beim Ausführen von ImageMagick von R: Ungültiger Parameter

http://ryouready.wordpress.com/2010/11/21/animate-gif-images-in-r-imagemagick/

wo der folgende Code 11 PNG-Bilder mit dem „png“ -Funktion in R. Als nächstes erzeugt er für den externen ImageMagick-Programm ruft „convert“ zu kompilieren die GIF-Animation.

dir.create("examples") 
setwd("examples") 

# Animated countdown from 10 to "GO!". 
png(file="example%02d.png", width=200, height=200) 
for (i in c(10:1, "G0!")){ 
plot.new() 
text(.5, .5, i, cex = 6) 
} 
dev.off() 

# convert the .png files to one .gif file using ImageMagick. 
system("convert -delay 80 *.png example_1.gif") 
#shell("convert -delay 80 *.png example_1.gif") 

Das Problem ist, dass R scheint nicht die exe-Datei "convert" finde, die ein Teil von ImageMagick ist und installiert auf dem C-Laufwerk (C: \ Programme \ ImageMagick-6.8.5 -Q16). In den Kommentaren zu der Website i am linking to earlier wird es für Windows-Benutzer empfohlen, "Shell" anstelle von "System" zu verwenden, um externe Programme auszuführen, aber keiner der beiden funktioniert. Die Fehlermeldung ist

Invalid parameter - 80 
Warning message: 
running command 'convert -delay 80 *.png example_1.gif' had status 4 

Ich habe versucht, das Windows-PATH Umgebungsvariable in den Systemen Eigenschaften zu ändern, wie in diesen answer vorgeschlagen, aber der PATH-Variable wurde allready corectlly auf meinem System definiert. Ich habe auch versucht, die ganze Zeichenfolge der Datei convert.exe, aber auch ohne Glück ...

Wie kann ich ImageMagick durch R laufen?

Specs: Windows 7 Servicepack 1, R 3.0.0

Vielen Dank im Voraus ...

+0

Die Fehlermeldung, die Sie zitieren angibt, ist nicht, dass R nicht finden 'convert' ist ... Was Fehlermeldung, wenn Sie den vollständigen Pfad verwenden Sie bekommen? Eine Möglichkeit ist, dass Sie in Ihrem 'PATH' ein anderes' Konvertierungs'-Programm haben. Falls Sie das Verzeichnis am Ende der Umgebungsvariablen 'PATH' hinzugefügt haben, versuchen Sie es stattdessen an den Anfang zu stellen. – flodel

+0

Was gibt 'system (" wo convert ", intern = TRUE) dir? – flodel

+1

Der allererste Dateipfad in der 'convert' -Variablen ist der ImageMagick-Dateipfad, der nur noch einmal überprüft wird. Wenn ich den Code "system" ("C:/Programme/ImageMagick-6.8.5-Q16/konvertiere -delay 80 * .png example_1.gif") "scheinbar nichts passiert. Wenn ich shellshell ("C:/Programme/ImageMagick-6.8.5-Q16/konvertiere -delay 80 * .png example_1.gif") 'Ich bekomme die Fehlermeldung: '' C:/Program 'war nicht als interne oder externe Befehls-, Programm- oder Batch-Datei erkannt.' und dann eine ganze Reihe von R-Fehlern. – Duffau

Antwort

6

Unter Windows gibt es mehrere convert.exe-Befehle, die alle im PATH enthalten sind. Sie müssen also den Pfad zur rechten ausführbaren Datei convert.exe angeben. In meinem Fall hatte ich es im LyX-Ordner (Sie finden es jedoch auch in der ImageMagick-Installation). Seien Sie vorsichtig mit den Anführungszeichen, den umgekehrten Schrägstrichen und dem Abstand, wenn Sie einfügen. Z.B. aus R:

system('"C:\\Program Files (x86)\\LyX 2.0\\imagemagick\\convert.exe" -delay 20 -loop 0 files_*.png animation.gif') 
0

weiß, dass ich jemand anderes bereits die Lösung für Ihr Problem gefunden, aber es ist ein einfacher Weg zu lösen es ohne den gesamten Weg in System() einzuschließen. Legen Sie einfach ani.options(convert = 'pathway/convert.exe') nach dem Laden des Animationspakets.

0

Nachdem all diese Korrekturen sowie these und these zu keinem Erfolg versucht, verwendete ich alternative Software die Konvertierung zu machen, von denen mehrere here beschrieben sind. Ich bin ein Windows-Benutzer und fand die einfachen Anweisungen auf dieser Website für VirtualDub schnell diese Aufgabe erfüllt.

2

Ich bin ein Fenster 10 Benutzer, nachdem das Arbeitsverzeichnis definiert, ich habe es in R arbeitet mit

shell("convert -set delay 80 -loop 0 *.jpg example_shell_test.gif") 

innerhalb cmd jeder Befehl bedeutet folgende

convert = open Funktion convert aus ImageMagick

-Set Verzögerungs x = die Verzögerungszeit zwischen jedem Rahmen auf x gesetzt (1000 = 1 Sekunde)

-loop 0 = Schleife immer, wenn es auf 1 gesetzt wird einmal durch die Bilder gehen

*.[Bildtyp] = und Datei. [Bildtyp]

[Name des Ausgabe gif] .gif = new .gif speichern als

Ich habe es zuerst in Eingabeaufforderung arbeiten, indem Sie in das Verzeichnis navigieren und Laufen die Linie

convert -set delay 80 -loop 0 *.jpg example_cmd_test.gif 

Vor diesem war ich mit -delay = 80 statt -Set 80 in cmd verzögern und bekam Fehler: convert: ungültige Argument für die Option '-delay': = @ Fehler/convert.c/ConvertImageCommand/1277.

In R das Systems() Befehl mit der richtigen "-Set Verzögerung x" unter Verwendung von I wurde immer Fehler:

> system("convert -set delay = 80 -loop 0 *.jpg example_3.gif") 
Invalid Parameter - delay 
Warning message: 
running command 'convert -set delay = 80 -loop 0 *.jpg example_3.gif' had status 4 

andere Fehler in der Schale()

> shell("convert -set delay = 80 -loop 0 *.jpg example_shell_test11.gif") 
convert: unable to open image '80': No such file or directory @ error/blob.c/OpenBlob/3094. 
convert: no decode delegate for this image format `' @ error/constitute.c/ReadImage/509. 
Warning messages: 
1: running command 'C:\WINDOWS\system32\cmd.exe /c convert -set delay = 80 -loop 0 *.jpg example_shell_test11.gif' had status 1 
2: In shell("convert -set delay = 80 -loop 0 *.jpg example_shell_test11.gif") : 
    'convert -set delay = 80 -loop 0 *.jpg example_shell_test11.gif' execution failed with error code 1 

I lief es in R mit Schale() nach, und es scheint auch in diesem Thread

shell("convert -set delay = 80 -loop 0 *.jpg example_shell_test.gif") 

haben sie einen Blick zu funktionieren

ImageMagick - Issue with Windows and convert function

Verwandte Themen