2009-06-03 5 views
5

나는 다양한 크기 (100x100과 같은 큰 크기)의 체스 판에서 나이트 투어를위한 알고리즘을 가지고 있으며 그 결과를 애니메이트하고 싶습니다. 기사가 새로운 정사각형으로 움직일 때마다 (사각) 캔버스의 해당 픽셀은 결국 전체 캔버스가 채색 될 때까지 색상이 바뀝니다. 결과 동영상은 알고리즘에 대한 웹 페이지에서 볼 수 있습니다.알고리즘을 사용하여 애니메이션 GIF를 만드는 가장 좋은 방법은 무엇입니까?

넓은 브라우저 지원을 원한다면 애니메이션 GIF가 가장 좋은 방법 인 것처럼 보입니다 (다른 제안 사항은 환영하지만). 이 작업을 수행하는 데 가장 적합한 도구 또는 라이브러리는 무엇입니까? Linux 또는 Mac 컴퓨터에서 무료로 사용할 수있는 것을 사용해 드리겠습니다.

실제 알고리즘은 (당신이 정말로 궁금 경우 this paper 참조) 여기에 유용한 예제를 만들기 위해 너무 긴하지만 여기에 8 × 8 보드에 (지루한) 왕의 투어에 대한 의사의 :

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

추가 크레딧 질문 : 우리는이 영화의 특수 기능을 활용하여 파일 크기를 줄일 수 있습니까? Wikipedia article은 일부 픽셀 만 변경하는 경우이를 수행 할 수 있음을 제안합니다. 실제로는 프레임 당 하나만 변경합니다.

+0

애니메이션 GIF를 사용하지 마십시오. 대신 동영상 형식으로 변환하면 압축률이 훨씬 높아집니다. –

+0

어떤 형식을 권장하며 어떤 도구를 사용하여 만들 수 있습니까? –

+0

압축 수준은 많은 것들에 달려 있습니다. 간단한 이미지의 경우 gif가 정상적으로 작동합니다. 게다가, 크기는 단순함만큼 관심사가 아닐 수도 있습니다. 애니메이션 GIF는 멋진 기술은 아니지만 잘 지원됩니다. – Naaff

답변

4

giflib을 사용하면이 작업을 수행 할 수 있습니다. 문서가 다운로드됩니다.

예를 들어 this page에는 애니메이션을 생성하는 데 사용되는 프로그램에 giflib와 소스 코드를 사용하여 만든 애니메이션 gif가 들어 있습니다. 애니메이션을 위해 giflib을 사용하는 방법을 보시면 도움이 될 것입니다.

편집 : 일부 사후 처리를 괜찮다면 또 다른 대안은, 단순한 형식 (such as PPM) 다음 make the animated gif using ImageMagick를 사용하여 간단하게 출력 할 프레임이다.

추가 신용 관련 질문 : ImageMagick은 출력 크기를 줄이기 위해 frame comparisons을 수행 할 수도 있습니다.

+1

감사합니다. 나는 두 번째 옵션을 생각하고있다 : 파이썬 이미지 라이브러리를 사용하여 .gif 컬렉션을 그린 다음 ImageMagick을 사용하여 그 이미지를 (최적화 된) 애니메이션으로 묶을 생각이다. –

0

귀하의 추가 신용 질문에 대한 답변으로, 새로운 프레임에서 이미지의 변경된 부분을 드로잉하고 나머지는 투명하게 만 설정하여 직접 개선 할 수 있습니다.

+0

알았어요. ImageMagick이 나를 위해 비교 및 ​​최적화를 수행하는 것처럼 보이지만 작동하지 않는 경우 수동으로 할 수 있습니다. –

관련 문제