このアニメーションは、Linux(Lubuntu)上でLibreOffice Draw(以下 Draw と省略)を使って書いた絵を .bmp で保存して、それら画像ファイルをimagemagicのconvertコマンドでGIFアニメーションに変換した。
簡単に入手できるツールで、さくっと作れた。良い時代になったものだ。
Draw上で、1ページ、1コマとして絵を書いた。
最初に描いた絵をページごとコピーして、それを少し変更して…の繰り返しでそれぞれの絵を用意する。
何枚もの絵を用意するが、それぞれほんの少しの変更なので、意外と簡単に描けた。
20日の帰宅後に書き始めて、2時間ぐらい。品質にこだわらなければその程度だ。
自由曲線の制御点をちょいちょい動かしたり、曲率を変えたりの作業なので、あまり手間がかからない。
慣れればもっと速くなるだろう。
しかし、面倒なこともあった。
.bmpに限らず、画像形式でのエクスポートは、1ページ単位で行うことになる。
ページを選択して、メニューから、「ファイル」->「エクスポート」を選んで、エクスポートダイアログ上で、「BMP - Windows bitmap(.bmp)」を選んで、適切なファイル名(連番の数字)を指定して、「OK」をクリックする。BMPオプションダイアログが表示されるので、そこでまた「OK」ボタンを押す。
コマ数が10コマ程度なので、すべて手動で1ページずつ行ったが、私は超おっちょこちょい男なので、何度も失敗し、イライラした。
イライラしたら、精神衛生上良くない。
マクロを組もうかなとも思ったが、その時はやらなかった。
しかし、プログラマなのだから、やっぱり組もうと、今週になって決断した。
昨日の夜から調べ始め、今日の朝から実装作業を始めた。
Excelでのマクロや、VBでの開発の経験はあるが、Libreofficeでの開発は初めてだ。
Drawはマクロ記録機能もないし、実装方法は大きく分けて3種類あるらしい。無駄にややこしい。調べれば調べるほどわからないことが出てきて、深みにハマる。
とはいえ、午前中になんとか動くものができた。
初めて書いたLibreOffice BASIC なので、いろいろおかしいところもあるだろう。sub SavePagesAsBMP dim doc as Object dim dirDialog as Object dim ucb as Object dim directory as String dim controller as Object dim pages as Object dim prevCurrentPage as Object dim args(1) as new com.sun.star.beans.PropertyValue GlobalScope.BasicLibraries.LoadLibrary("Tools") doc = ThisComponent '---------------------------' ' Select directory ' '---------------------------' dirDialog = CreateUnoService( "com.sun.star.ui.dialogs.FolderPicker" ) ucb = createUnoService("com.sun.star.ucb.SimpleFileAccess") directory = DirectoryNameoutofPath(doc.getURL(),"/") if ucb.Exists( directory ) then dirDialog.SetDisplayDirectory( directory ) end if if dirDialog.Execute() <> 1 then exit sub end if directory = dirDialog.getDirectory '---------------------------' ' Save each page as .BMP ' '---------------------------' controller = doc.CurrentController pages = doc.drawPages args(0).Name = "FilterName" args(0).Value = "draw_bmp_Export" prevCurrentPage = controller.getCurrentPage ' preserve current page for i=0 to pages.Count -1 controller.setCurrentPage( pages(i) ) 'url = directory + "/" + controller.getCurrentPage.Name +".bmp" url = directory + "/" + right( "0000000" + i, 8) +".bmp" 'MsgBox url doc.storeToURL( url, args ) next i controller.setCurrentPage( prevCurrentPage ) ' restore current page end sub
Draw上で、このマクロを実行すると、保存ディレクトリを選択するために、ディレクトリ選択ダイアログが表示される。
ディレクトリを選択すると、そのディレクトリ内へ、各ページが "8桁の数字.bmp" で保存される。
後はshell上で、convertコマンドを使って、アニメーションにする。
上記は、サブディレクトリ"animation/"に、一連の.bmp が保存されていることを期待している。convert -delay 50 animation/* animation.gif
出来上がったアニメーションは、ファイル名"animation.gif"で保存される。
1コマ0.5秒のアニメーションができる。
これで、コマの多いアニメーションでもイライラしないで作ることができる。
とはいえ、そうそうアニメーションを描くことはないだろう。
おそらく、次に使うときには、何もかも忘れて、イライラしているに違いない。
そして、終わった後で再発見し、「なんという、おっちょこちょい男だろう!」と思うことだろう。
LibreOffice Draw でアニメーション作製
LibreOffice Draw でアニメーション作製#2
LibreOffice Draw でアニメーション作製#3
LibreOffice Draw でアニメーション作製#4
LibreOffice Draw でアニメーション作製#5
2017/10/20 リンクが間違っていた。張り直した。
0 件のコメント:
コメントを投稿