2013-04-30 18 views
8

Tôi đang cố gắng tạo hoạt ảnh GIF ở R. Tôi có một loạt ma trận mà tôi muốn chuyển đổi thành hoạt ảnh GIF. Chiến lược của tôi được lấy cảm hứng từ ví dụ này:Lỗi khi chạy ImageMagick từ R: Thông số không hợp lệ

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

nơi đoạn mã sau tạo ra 11 PNG-Hình với "png" -function trong R. Tiếp theo nó gọi cho bên ngoài ImageMagick chương trình "chuyển đổi" để biên dịch hoạt ảnh 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") 

Vấn đề là R dường như không finde exe-file "chuyển đổi", mà là một phần của ImageMagick và cài đặt trên C-ổ đĩa (C: \ Program Files \ ImageMagick-6.8.5 -Q16). Trong các ý kiến ​​cho các trang web i am linking to earlier, nó được đề nghị cho người dùng Windows sử dụng "vỏ" thay vì "hệ thống" để chạy các chương trình bên ngoài nhưng không ai trong số hai công việc. Các thông báo lỗi là

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

Tôi đã cố gắng để thay đổi biến PATH môi trường Windows trong các thuộc tính hệ thống, như đề xuất trong answer này, nhưng PATH biến được allready corectlly xác định trên hệ thống của tôi. Tôi cũng đã cố gắng chỉ định toàn bộ chuỗi của tệp convert.exe, nhưng cũng không có may mắn ...

Làm cách nào để tôi có ImageMagick chạy qua R?

Specs: Windows 7 ServicePack 1, R 3.0.0

Cảm ơn trước ...

+0

Thông báo lỗi bạn báo không cho biết R không tìm thấy 'chuyển đổi' ... Bạn nhận được thông báo lỗi nào khi sử dụng đường dẫn đầy đủ? Một khả năng là bạn có một chương trình 'chuyển đổi' khác trong' PATH' của bạn. Trong trường hợp bạn đã thêm thư mục vào cuối biến môi trường 'PATH', hãy thử đặt nó ở đầu thay vào đó. – flodel

+0

Hệ thống '(" nơi chuyển đổi ", intern = TRUE)' cung cấp cho bạn là gì? – flodel

+1

Filepath đầu tiên trong biến 'convert' là filepath của ImageMagick, chỉ cần kiểm tra lại. Khi tôi chạy mã 'hệ thống (" C:/Program Files/ImageMagick-6.8.5-Q16/convert -delay 80 * .png example_1.gif ")' dường như không có gì xảy ra. Khi tôi chạy ´shell ("C:/Program Files/ImageMagick-6.8.5-Q16/chuyển đổi -delay 80 * .png example_1.gif") ´ tôi nhận được thông báo lỗi: '' C:/Program 'là không được nhận dạng dưới dạng lệnh nội bộ hoặc bên ngoài, tệp chương trình hoặc tệp hàng loạt.' và sau đó là toàn bộ chuỗi R-lỗi. – Duffau

Trả lời

6

Trên Windows, có một số lệnh convert.exe, tất cả đều nằm trong PATH. Vì vậy, bạn phải chỉ định đường dẫn đến tệp thực thi convert.exe đúng. Trong trường hợp của tôi, tôi đã có nó trong thư mục LyX (tuy nhiên, bạn sẽ tìm thấy nó trong quá trình cài đặt ImageMagick). Hãy cẩn thận với các dấu ngoặc kép, dấu gạch chéo ngược và khoảng trắng nếu bạn đang dán. Ví dụ. từ bên trong R:

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

Tôi biết người nào khác đã tìm thấy giải pháp cho vấn đề của bạn, nhưng có một cách dễ dàng hơn để giải quyết nó mà không cần phải bao gồm toàn bộ đường dẫn trong hệ thống(). Chỉ cần đặt ani.options(convert = 'pathway/convert.exe') sau khi tải gói hoạt ảnh.

0

Sau khi thử tất cả các bản sửa lỗi cũng như thesethese để không thành công, tôi đã sử dụng phần mềm thay thế để thực hiện việc chuyển đổi, một vài trong số đó được mô tả here. Tôi là người dùng Windows và đã tìm thấy các hướng dẫn đơn giản có trong trang web đó cho VirtualDub nhanh chóng hoàn thành nhiệm vụ này.

2

tôi là một cửa sổ 10 người sử dụng, sau khi xác định thư mục làm việc tôi đã nhận nó làm việc trong R sử dụng

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

trong cmd mỗi lệnh có nghĩa như sau

chuyển đổi chức năng = mở chuyển đổi từ ImageMagick

trì hoãn -set x = đặt thời gian trễ giữa mỗi khung thành x (1000 = 1 giây)

-lớp 0 = loop mãi mãi, nếu được đặt thành 1 nó sẽ xem qua các hình ảnh sau khi

*.[Loại hình ảnh] = và tập tin của. [Image loại]

[tên của sản lượng gif] .gif = lưu .gif mới như

tôi nhận nó làm việc đầu tiên trong vòng command prompt bằng cách điều hướng đến thư mục và chạy dòng

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

Trước đó tôi đã sử dụng -delay = 80 hơn -Thiết trì hoãn 80 trong cmd và đã nhận lỗi: chuyển đổi: không hợp lệ đối số cho tùy chọn '-delay': = @ lỗi/convert.c/ConvertImageCommand/1277.

Trong R sử dụng hệ thống() lệnh với "chậm trễ -Thiết x" đúng tôi đã nhận được báo lỗi:

> 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 

các lỗi khác trong vỏ()

> 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 

tôi chạy nó trong R với shell() sau và nó có vẻ hoạt động tốt

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

Bạn cũng có thể xem chủ đề này

ImageMagick - Issue with Windows and convert function

Các vấn đề liên quan