Closed doraTeX closed 8 years ago
その2箇所からコメント等をたどるとそれぞれコード例はいろいろ出てきました。これが仮に実現すれば「ImageMagick なしで GIF アニメを PDF から直接作る GUI ソフト」としての利用も可能になって面白いと思います。無責任なことに、基本的仕様すら全く知らないうえ手元で試せないのですが、実装が困難なのかもしれない気はしています(アニメーションにできたつもりが動かないとか起こりそうで)。
実装するとすればカスタマイズ性を求められるのは必至で、おっしゃるとおり2つのパラメータを既に手狭な UI にどう配置するかは悩みます。その一方でこれらはどう考えても animation GIF 固有(APNG とか MNG は今後もありえないはず)なので、自由度は高いという見方もできるかもしれません。
パラメータ設定用UIの問題は後で考えるとして,とりあえず,TeX2imgからアニメーションGIFを生成させることには成功しました。
気づいた点として……
まったく同じことをいま書こうとしていました…「各フレーム画像のサイズが同じでない場合にどんな animation GIF ができるか」。
いま本提案を出した理由の一つは、元のページサイズを保持する機能 (#36) によって「生成する全画像のサイズがそろいやすくなった」ことです。これは GIF アニメのフレームスタックが(記憶が正しければ)特別にずらさないかぎり左上基準で始まるので、画像サイズが不ぞろいの場合に右下に直前のフレームが取り残されるのではないかと危惧していたのですが、Mac では「幅の最大値 x 高さの最大値」になってしまうのですね。「全ページのサイズを統一する」のが一つの課題ですね(従来の TeX2img に比べていまはその可能性が高まったのは確かですが)。
GIF アニメのフレームスタックが(記憶が正しければ)特別にずらさないかぎり左上基準で始まる
animation GIF 自体は各フレームの画像サイズが必ずしも統一されている必要はなく、2フレーム目以降は左上からのオフセットで配置することもできます。実際に、Windows で有名な Giam にはこのオフセット機能をベースにして「前後のコマの内容が同じ領域があればそこは省略」という GIF サイズ縮小アルゴリズムのような最適化も実装されています。ただ OS X API では不可能なのですね。
別件として,アニメーションGIF生成のときは,プレビューではなく Safari でプレビューさせた方が良さそうですね。アニメーションを確認するにはブラウザで閲覧する必要がありますので。
プレビューではなく Safari でプレビューさせた方が良さそうですね。
それも書こうと思ったところでした☺
こんなUIはどうでしょう?
アニメは GIF だけなので、「PDF のページ切り替え効果でも付くのか」と思われないようにチェックボックスを増やしたいのが本音ですが、そうしてしまうと CUI オプションも増やさないと分かりづらくなりますね… ということで「詳細…」のポップアップ内に GIF と明記していいと思います。(CUI オプションは convert を踏襲して --delay と --loop でしょうね)
GUI版,CUI版ともに一通り実装が完了し,Ver. 2.0.3 beta 1 としてビルドしました。 CUI版のオプションは,ご提案通り --delay と --loop にしてあります。 --delay は小数値での指定が可能です。
tex2img Ver.2.0.3b1
Usage: tex2img [options] InputFile OutputFile
Arguments:
InputFile : path of a TeX source or PDF/PS/EPS file
OutputFile : path of an output file
(*extension: eps/pdf/svg/jpg/png/gif/tiff/bmp)
Options:
--latex COMPILER : set the LaTeX compiler (default: platex)
*synonym: --compiler
--kanji ENCODING : set the Japanese encoding (no|utf8|sjis|jis|euc) (default: no)
--[no-]guess-compile : disable/enable guessing the appropriate number of compilation (default: enabled)
--num NUMBER : set the (maximal) number of compilation
--dvidriver DVIDRIVER : set the DVI driver (default: dvipdfmx)
*synonym: --dviware, --dvipdfmx
--gs GS : set ghostscript (default: gs)
--resolution RESOLUTION : set the resolution level (default: 15)
--left-margin MARGIN : set the left margin (default: 0)
--right-margin MARGIN : set the right margin (default: 0)
--top-margin MARGIN : set the top margin (default: 0)
--bottom-margin MARGIN : set the bottom margin (default: 0)
--unit UNIT : set the unit of margins to "px" or "bp" (default: px)
(*bp is always used for EPS/PDF/SVG)
--[no-]transparent : disable/enable transparent PNG/TIFF/GIF (default: enabled)
--[no-]with-text : disable/enable text-embedded PDF (default: disabled)
--[no-]merge-output-files : disable/enable merging products as a single file (PDF/TIFF) or animated GIF (default: disabled)
--delay TIME : set the delay time (sec) of an animated GIF (default: 1)
--loop NUMBER : set the number of times to repeat an animated GIF (default: 0 (infinity))
--[no-]delete-display-size : disable/enable deleting width and height attributes of SVG (default: disabled)
--[no-]keep-page-size : disable/enable keeping the original page size (default: disabled)
--pagebox BOX : set the page box type used as the page size (media|crop|bleed|trim|art) (default: crop)
--[no-]ignore-errors : disable/enable ignoring nonfatal errors (default: disabled)
--[no-]utf-export : disable/enable substitution of \UTF{xxxx} for non-JIS X 0208 characters (default: disabled)
--[no-]quick : disable/enable speed priority mode (default: disabled)
--[no-]preview : disable/enable opening products (default: disabled)
--[no-]delete-tmpfiles : disable/enable deleting temporary files (default: enabled)
--[no-]embed-source : disable/enable embedding of the source in products (default: enabled)
--[no-]copy-to-clipboard : disable/enable copying products to the clipboard (default: disabled)
--[no-]quiet : disable/enable quiet mode (default: disabled)
--version : display version info
--help : display this message
Mac のテスト環境にいないので動作確認は明日以降になります…すみません。
ひとつ言い忘れていました… convert の -delay
は単位が1/100秒なので、それに合わせた方が混乱を招かずに済む気がしました。デフォルト値は何がいいのでしょうね… さすがに1(つまり1/100秒)だと短いし、10か25か50か100のうち無理のないものですね。50か100が妥当でしょうか?
「1/100秒単位」という情報をGUIやCUIヘルプメッセージにどう込めましょうか? そこが難しくて,伝わりやすいであろう秒単位にしていました。
set the delay time (1/100 sec) of an animated GIF (default: 100)
set the delay time (centisecond) of an animated GIF (default: 100)
フレーム間のディレイ(1/100秒):[ ]
フレーム間のディレイ(センチ秒):[ ]
Delay (1/100 sec) : [ ]
Delay (centisecond) : [ ]
ImageMagick のヘルプドキュメントは
Set the time delay (in 1/100th of a second) to pause after drawing the images that are read in or created after this setting has been defined.
と書いていますね。CUI ヘルプには載せていないあたりが難しさを物語っている気がします。GUI が
フレーム間のディレイ(1/100秒単位):[ ]
Delay (in 1/100 sec) : [ ]
で、CUI が
Set the time delay (in 1/100 sec) of an animated GIF (default: 100)
とするのがギリギリでしょうか。たしかに難しい…小数を認めて秒単位にした方がいいでしょうか…
直感的にも,「1/100秒の50倍のディレイを入れる」ととらえるより,「0.5秒のディレイを入れる」ととらえる方が分かりやすい気がしますので,ImageMagick との互換性は気にせず,現状の秒単位の方がよいのではという気がしてきました。
たしかに直感的なのは秒単位ですね。ではそうしましょう。
SnowLeopard 対応版 Ver. 1.10 系列にも #43, #44, #45 を追従させました。 SnowLeopard 対応版ではポップオーバーが使えず,GIFアニメ設定の詳細を表示するスペースがありませんでしたので,(ちょっと大げさではありますが)「アニメ」タブを増設して対応しました。 ちょうど,Ver. 2.x 系列における「色」タブが Ver. 1.10.x 系列では削除されており,タブの横幅に余裕がありましたので,助かりました。
なんかギャグっぽい(失礼)機能なのにオプションが短いのが気になります.(ImageMagickは短めのが多いのでいいのですが,TeX2imgは曖昧さがない長いのが多いので.)--animation-delayとかじゃダメですか?
さて,GIFはサポートしていないのでまた隠し機能かな…….
ImageMagickは短めのが多いのでいいのですが,TeX2imgは曖昧さがない長いのが多いので.
確かに。それに,--delay の仕様を ImageMagick と異なるものにした以上,ImageMagick とオプション名を揃える必然性もなくなりましたしね。
--animation-delay
と
--animation-loop
としましょうか。
必然性がないというよりむしろ --animation-delay と --animation-loop に変えたほうが、TeX2img の仕様と convert の仕様を区別できるので賛成です。
オプション名の修正,エラー処理強化,種々のバグの修正を行った,Ver. 2.0.3 beta 2 を作りました。
別件として,アニメーションGIF生成のときは,プレビューではなく Safari でプレビューさせた方が良さそうですね。アニメーションを確認するにはブラウザで閲覧する必要がありますので。
GIF出力の場合のプレビューアプリの選択は次のようにしました。
現時点の最新版を Ver. 2.0.3 beta 3 としてビルドしました。
Windows 版の新しいもの(pdfTeX を減らしたもの)を試しました。透過 GIF だと早いですね! 一瞬なぜ透過だけなのかわからなかったのですが、そもそも
なのでそういうことですね。
Mac 版 Ver. 2.0.3 beta 3 を試してみました。画質優先モードはおそらく問題ないのですが、速度優先モードの場合に200ページの PDF ができてから次に移行するまでにもの凄いライムラグがありました。ページ数が150ページのときはちょっと待てば次のステップが始まるのですが、200だと一向に進まないうえ中断機能も働かず、その間なにも出力ウィンドウに出てこないので何をやっているのか分からず不安になります(たぶん gs ですね)。Win 版は BoundingBox 取得中は gs -sDEVICE=bbox のコマンドと %%BoundingBox: の出力がザーッと流れていくので特に驚かないのですが。
Ver. 2.0.3 beta 4 を作成しました。
Mac Ver. 2.0.3 beta 4 だと問題ないです。gs の回数も最小限で、スムーズにログが出て安心しました。
テストありがとうございます。 ではそろそろ Ver. 2.0.3 を正式リリースしましょう!
いよいよ両方ともリリースですかね!? 無茶をお願いして申し訳なかったのですが、派生して処理速度向上にもつながり、普通の利用にも還元できてよかったです。
透過だけ
そーなんです.ただなんで透過時だけpdfiumdrawを使っているのかとか,GhostscriptでPDFから直接PNGを作らないの何でだっけとか,忘れてしまいました……(後者は余白のせいかな)いずれにせよ
普通の利用にも還元できてよかったです
こっちはSVG利用時のというなんかびみょーな場所だけ速くなりました.(GIFはサポート外.)
変換スキームは私もすっかり記憶の彼方です。変えるとまたいろいろ怖いのと GIF はそもそも隠し機能なので考えないということで。
GIF アニメまで作れるようになったので TeX2“img”としてこれ以上はないでしょう。ほかにサポートしているツールを聞いたことがないですし、ソース保持もできていて強力になりましたね。(ちょうど引き継いでいただいてから一年くらいですが、ひたすら何かしら続けていたような。)
GIF アニメまで作れるようになったので TeX2“img”としてこれ以上はないでしょう。ほかにサポートしているツールを聞いたことがないですし、ソース保持もできていて強力になりましたね。(ちょうど引き継いでいただいてから一年くらいですが、ひたすら何かしら続けていたような。)
お陰様でこの一年の進歩はめざましく,まさしく「最強の」ツールに進化しましたね。
といった様々な要因の相乗効果で,これらのめざましい進歩が遂げられました。 改めてお二人に感謝いたします。m(__)m
例えばpng作るときでもpdftexで一括余白処理→Ghostscriptで変換とすれば倍速弱にはなるかなぁ,と思ってみました.しかし同じようなことは定期的に思っている気がして,何もしていないということは何か問題があるんだろうか(忘れた)
現在の手元のConverter.csは1556行,ちなみに僕が書く前のは611行です.大分増えました.前開発者からのお題でできていないのは英語版くらいでしょうか.どうにもやる気が……. 手前味噌でやっていても仕方が無いですし,まぁ何かあればイロイロやっていきましょう.
44 のコメントから派生。
コード例
課題
の2つのパラメータを指定するUIをどうするかが悩みどころ。