2009-06-03 36 views
5

Tôi có một thuật toán cho các tour du lịch của hiệp sĩ trên bàn cờ với các kích cỡ khác nhau (kích thước lớn, như 100x100) và tôi muốn tạo hiệu ứng cho kết quả. Mỗi khi hiệp sĩ di chuyển đến một hình vuông mới, một pixel tương ứng trong canvas vuông sẽ thay đổi màu sắc, cho đến khi toàn bộ canvas được tô màu. Phim kết quả sẽ có sẵn để xem trên trang web về thuật toán.Cách tốt nhất để tạo GIF động bằng thuật toán là gì?

GIF động có vẻ như là phương pháp tốt nhất nếu tôi muốn hỗ trợ trình duyệt rộng (mặc dù các đề xuất khác được hoan nghênh). Công cụ hay thư viện nào tốt nhất để làm điều này? Tôi rất vui khi sử dụng bất kỳ thứ gì có sẵn miễn phí trên máy tính Linux hoặc Mac.

Thuật toán thực tế là quá dài để làm một ví dụ hữu ích ở đây (xem this paper nếu bạn thực sự tò mò) nhưng đây là mã giả cho tour du lịch một (nhàm chán) vua trên một bảng 8x8:

movie = new Movie() 
frame = new Frame() 
frame.fillRectangle((1,1), 8, 8, BLUE) 
for row in [1..8] { 
    if (row.isOdd()) { colrange = [1..8] } else { colrange = [8..1] } 
    for col in colrange { 
     frame.colourPixel(row, col, RED) 
     movie.addFrame(frame) 
    } 
} 
movie.saveAsGIF("tour.gif") 

Câu hỏi thêm về tín dụng: chúng ta có thể tận dụng các tính năng đặc biệt của phim này để giảm kích thước tệp không? Các Wikipedia article cho thấy rằng chúng tôi có thể có thể làm điều này, nếu chúng tôi chỉ thay đổi một số các điểm ảnh - trong thực tế, chúng tôi chỉ thay đổi một cho mỗi khung!

+0

Không sử dụng hình động. Chuyển đổi nó sang định dạng phim thay vào đó, quá trình nén sẽ cao hơn nhiều –

+0

Bạn định dạng định dạng nào và công cụ nào để tạo nó? –

+0

Mức độ nén phụ thuộc vào rất nhiều thứ. Đối với hình ảnh đơn giản gifs sẽ làm tốt. Bên cạnh đó, kích thước có thể không quan tâm nhiều đến sự đơn giản. Gifs động không phải là công nghệ tuyệt vời, nhưng chúng được hỗ trợ tốt. – Naaff

Trả lời

4

Bạn có thể sử dụng giflib để thực hiện việc này. Tài liệu đang tải xuống.

Ví dụ: this page chứa gif động được tạo bằng cách sử dụng giflib và mã nguồn cho chương trình được sử dụng để tạo hoạt ảnh. Có thể hữu ích khi xem cách sử dụng giflib cho hoạt ảnh.

Chỉnh sửa: Một giải pháp thay thế khác, nếu bạn không ngại xử lý sau, chỉ cần xuất khung hình của bạn bằng một định dạng đơn giản (such as PPM) và sau đó make the animated gif using ImageMagick.

Đối với câu hỏi tín dụng phụ của bạn: ImageMagick thậm chí có thể làm frame comparisons để bạn giảm kích thước đầu ra.

+1

Cảm ơn vì điều này. Tôi đang nghĩ đến việc chọn tùy chọn thứ hai của bạn: sử dụng Thư viện hình ảnh Python để vẽ một bộ sưu tập các tệp .gif và sau đó ImageMagick để đặt chúng lại với nhau thành một hoạt ảnh (được tối ưu hóa). –

0

Để trả lời câu hỏi về tín dụng bổ sung của bạn, bạn có thể tự cải thiện bản thân này bằng cách chỉ vẽ phần đã thay đổi của hình ảnh trên khung mới và đặt phần còn lại thành minh bạch.

+0

OK. Có vẻ như ImageMagick sẽ làm việc so sánh và tối ưu hóa cho tôi, nhưng tôi có thể làm điều đó bằng tay nếu điều đó dường như không hoạt động. –

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