2013-04-30 20 views
8

Sto cercando di creare un'animazione GIF in R. Ho una matrice di matrici che desidero convertire in un'animazione GIF. La mia strategia è ispirato da questo esempio:Errore durante l'esecuzione di ImageMagick da R: parametro non valido

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

dove il seguente codice produce 11 PNG-Pictures con la -funzione "png" in R. successivo si chiede per l'esterno ImageMagick-programma "convertire" per compilare l'animazione GIF.

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") 

Il problema è che R non sembra finde il file exe "convertire", che è una parte di ImageMagick e installato sul C-drive (C: \ Program Files \ ImageMagick-6.8.5 -Q16). Nei commenti al sito web i am linking to earlier, si consiglia agli utenti di Windows di utilizzare "shell" anziché "system" per eseguire programmi esterni, ma nessuno dei due funziona. Il messaggio di errore è

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

Ho provato a cambiare la variabile PATH ambiente di Windows nelle proprietà di sistema, come suggerito in questo answer, ma la variabile PATH stato giá corectlly definito sul mio sistema. Ho anche provato a specificare l'intera stringa del file convert.exe, ma anche senza fortuna ...

Come posso ottenere ImageMagick da eseguire attraverso R?

Spec: di Windows 7 Servicepack 1, R 3.0.0

Grazie in anticipo ...

+0

Il messaggio di errore si cita non indica che R non sta trovando 'convert' ... Che messaggio di errore si ottiene quando si utilizza il percorso completo? Una possibilità è che tu abbia un altro programma 'convert' nel tuo' PATH'. Se hai aggiunto la directory alla fine della variabile di ambiente 'PATH', prova a metterla all'inizio. – flodel

+0

Cosa offre 'system (" where convert ", intern = TRUE)? – flodel

+1

Il primo percorso file nella variabile 'convert' è il percorso file ImageMagick, appena controllato di nuovo. Quando eseguo il codice 'system (" C:/Programmi/ImageMagick-6.8.5-Q16/convert -delay 80 * .png example_1.gif ")' apparentemente non succede nulla. Quando eseguo shell ("C:/Programmi/ImageMagick-6.8.5-Q16/convert -delay 80 * .png example_1.gif") "viene visualizzato il messaggio di errore: " C:/Program "era non riconosciuto come comando interno o esterno, programma o file batch. e quindi un'intera serie di errori R. – Duffau

risposta

6

Su Windows, ci sono diversi comandi convert.exe, tutti presenti nel PERCORSO. Quindi è necessario specificare il percorso dell'eseguibile convert.exe corretto. Nel mio caso, l'ho avuto nella cartella LyX (tuttavia, lo troverete anche nell'installazione di ImageMagick). Fai attenzione con le virgolette, i backslash e la spaziatura se stai incollando. Per esempio. dall'interno R:

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

So che qualcuno altro ha già trovato la soluzione al vostro problema, ma c'è un modo più semplice per risolvere senza dover includere l'intero percorso nel sistema(). È sufficiente impostare ani.options(convert = 'pathway/convert.exe') dopo aver caricato il pacchetto di animazione.

0

Dopo aver tentato tutte queste correzioni nonché these e these nessun successo, ho usato software alternativo per effettuare la conversione, molti dei quali sono descritti here. Sono un utente di Windows e ho trovato che le semplici istruzioni contenute in quel sito per VirtualDub completavano rapidamente questa attività.

2

Sono un Windows 10 utente, dopo aver definito la directory di lavoro ho ottenuto lavorando in R utilizzando

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

all'interno di ogni comando cmd significa quanto segue

convertito funzione = convert aperto da ImageMagick

ritardo -set x = impostare il tempo di ritardo tra ogni fotogramma x (1000 = 1 secondo)

-loop 0 = ciclo infinito, se impostato a 1 lo farà passare attraverso le immagini una volta

*.[Tipo di immagine] = e il file di. [Tipo di immagine]

[nome del gif uscita] .gif = salvare il nuovo .gif come

ho ottenuto lavorando prima nel prompt dei comandi navigando alla directory e funzionante la linea

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

Prima di questo stavo usando -delay = 80 piuttosto che -set ritardare 80 cmd e ha ricevuto l'errore: convertito: non valido argomento per l'opzione '-delay': = @ errore/convert.c/ConvertImageCommand/1277.

Nel R utilizzando il comando di sistema() con la corretta "ritardo -set x" Mi stavo errore:

> 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 

altri errori in guscio()

> 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 

mi sono imbattuto in R con guscio() dopo e sembra funzionare bene

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

fare dare un'occhiata a questa discussione anche

ImageMagick - Issue with Windows and convert function

Problemi correlati