doraTeX / TeX2img

TeX2img for macOS
https://tex2img.tech
Other
26 stars 2 forks source link

アニメーションGIF出力 #45

Closed doraTeX closed 8 years ago

doraTeX commented 9 years ago

44 のコメントから派生。

コード例

の2つのパラメータを指定するUIをどうするかが悩みどころ。

aminophen commented 9 years ago

その2箇所からコメント等をたどるとそれぞれコード例はいろいろ出てきました。これが仮に実現すれば「ImageMagick なしで GIF アニメを PDF から直接作る GUI ソフト」としての利用も可能になって面白いと思います。無責任なことに、基本的仕様すら全く知らないうえ手元で試せないのですが、実装が困難なのかもしれない気はしています(アニメーションにできたつもりが動かないとか起こりそうで)。

実装するとすればカスタマイズ性を求められるのは必至で、おっしゃるとおり2つのパラメータを既に手狭な UI にどう配置するかは悩みます。その一方でこれらはどう考えても animation GIF 固有(APNG とか MNG は今後もありえないはず)なので、自由度は高いという見方もできるかもしれません。

doraTeX commented 9 years ago

パラメータ設定用UIの問題は後で考えるとして,とりあえず,TeX2imgからアニメーションGIFを生成させることには成功しました。

気づいた点として……

2015-09-14 23 13 34
aminophen commented 9 years ago

まったく同じことをいま書こうとしていました…「各フレーム画像のサイズが同じでない場合にどんな animation GIF ができるか」。

いま本提案を出した理由の一つは、元のページサイズを保持する機能 (#36) によって「生成する全画像のサイズがそろいやすくなった」ことです。これは GIF アニメのフレームスタックが(記憶が正しければ)特別にずらさないかぎり左上基準で始まるので、画像サイズが不ぞろいの場合に右下に直前のフレームが取り残されるのではないかと危惧していたのですが、Mac では「幅の最大値 x 高さの最大値」になってしまうのですね。「全ページのサイズを統一する」のが一つの課題ですね(従来の TeX2img に比べていまはその可能性が高まったのは確かですが)。

aminophen commented 9 years ago

GIF アニメのフレームスタックが(記憶が正しければ)特別にずらさないかぎり左上基準で始まる

animation GIF 自体は各フレームの画像サイズが必ずしも統一されている必要はなく、2フレーム目以降は左上からのオフセットで配置することもできます。実際に、Windows で有名な Giam にはこのオフセット機能をベースにして「前後のコマの内容が同じ領域があればそこは省略」という GIF サイズ縮小アルゴリズムのような最適化も実装されています。ただ OS X API では不可能なのですね。

doraTeX commented 9 years ago

別件として,アニメーションGIF生成のときは,プレビューではなく Safari でプレビューさせた方が良さそうですね。アニメーションを確認するにはブラウザで閲覧する必要がありますので。

aminophen commented 9 years ago

プレビューではなく Safari でプレビューさせた方が良さそうですね。

それも書こうと思ったところでした☺

doraTeX commented 9 years ago

こんなUIはどうでしょう?

2015-09-14 23 46 25
aminophen commented 9 years ago

アニメは GIF だけなので、「PDF のページ切り替え効果でも付くのか」と思われないようにチェックボックスを増やしたいのが本音ですが、そうしてしまうと CUI オプションも増やさないと分かりづらくなりますね… ということで「詳細…」のポップアップ内に GIF と明記していいと思います。(CUI オプションは convert を踏襲して --delay と --loop でしょうね)

doraTeX commented 9 years ago

GUI版,CUI版ともに一通り実装が完了し,Ver. 2.0.3 beta 1 としてビルドしました。 CUI版のオプションは,ご提案通り --delay と --loop にしてあります。 --delay は小数値での指定が可能です。

2015-09-15 0 53 32
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
aminophen commented 9 years ago

Mac のテスト環境にいないので動作確認は明日以降になります…すみません。

ひとつ言い忘れていました… convert の -delay は単位が1/100秒なので、それに合わせた方が混乱を招かずに済む気がしました。デフォルト値は何がいいのでしょうね… さすがに1(つまり1/100秒)だと短いし、10か25か50か100のうち無理のないものですね。50か100が妥当でしょうか?

doraTeX commented 9 years ago

「1/100秒単位」という情報をGUIやCUIヘルプメッセージにどう込めましょうか? そこが難しくて,伝わりやすいであろう秒単位にしていました。

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)

GUI

日本語環境

フレーム間のディレイ(1/100秒):[    ]
フレーム間のディレイ(センチ秒):[    ]

英語環境

Delay (1/100 sec) : [  ]
Delay (centisecond) : [  ]
aminophen commented 9 years ago

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)

とするのがギリギリでしょうか。たしかに難しい…小数を認めて秒単位にした方がいいでしょうか…

doraTeX commented 9 years ago

直感的にも,「1/100秒の50倍のディレイを入れる」ととらえるより,「0.5秒のディレイを入れる」ととらえる方が分かりやすい気がしますので,ImageMagick との互換性は気にせず,現状の秒単位の方がよいのではという気がしてきました。

aminophen commented 9 years ago

たしかに直感的なのは秒単位ですね。ではそうしましょう。

doraTeX commented 9 years ago

SnowLeopard 対応版 Ver. 1.10 系列にも #43, #44, #45 を追従させました。 SnowLeopard 対応版ではポップオーバーが使えず,GIFアニメ設定の詳細を表示するスペースがありませんでしたので,(ちょっと大げさではありますが)「アニメ」タブを増設して対応しました。 ちょうど,Ver. 2.x 系列における「色」タブが Ver. 1.10.x 系列では削除されており,タブの横幅に余裕がありましたので,助かりました。

「Ver. 1.10.x 系列には新機能の追加はせずバグ修正のみに留める」と言っていた割には,積極的に新機能を搭載してしまっていますね……😅

2015-09-15 2 09 29
abenori commented 9 years ago

なんかギャグっぽい(失礼)機能なのにオプションが短いのが気になります.(ImageMagickは短めのが多いのでいいのですが,TeX2imgは曖昧さがない長いのが多いので.)--animation-delayとかじゃダメですか?

さて,GIFはサポートしていないのでまた隠し機能かな…….

doraTeX commented 9 years ago

ImageMagickは短めのが多いのでいいのですが,TeX2imgは曖昧さがない長いのが多いので.

確かに。それに,--delay の仕様を ImageMagick と異なるものにした以上,ImageMagick とオプション名を揃える必然性もなくなりましたしね。

--animation-delay

--animation-loop

としましょうか。

aminophen commented 9 years ago

必然性がないというよりむしろ --animation-delay と --animation-loop に変えたほうが、TeX2img の仕様と convert の仕様を区別できるので賛成です。

doraTeX commented 9 years ago

オプション名の修正,エラー処理強化,種々のバグの修正を行った,Ver. 2.0.3 beta 2 を作りました。

doraTeX commented 9 years ago

別件として,アニメーションGIF生成のときは,プレビューではなく Safari でプレビューさせた方が良さそうですね。アニメーションを確認するにはブラウザで閲覧する必要がありますので。

GIF出力の場合のプレビューアプリの選択は次のようにしました。

doraTeX commented 8 years ago

現時点の最新版を Ver. 2.0.3 beta 3 としてビルドしました。

aminophen commented 8 years ago

Windows 版の新しいもの(pdfTeX を減らしたもの)を試しました。透過 GIF だと早いですね! 一瞬なぜ透過だけなのかわからなかったのですが、そもそも

なのでそういうことですね。

aminophen commented 8 years ago

Mac 版 Ver. 2.0.3 beta 3 を試してみました。画質優先モードはおそらく問題ないのですが、速度優先モードの場合に200ページの PDF ができてから次に移行するまでにもの凄いライムラグがありました。ページ数が150ページのときはちょっと待てば次のステップが始まるのですが、200だと一向に進まないうえ中断機能も働かず、その間なにも出力ウィンドウに出てこないので何をやっているのか分からず不安になります(たぶん gs ですね)。Win 版は BoundingBox 取得中は gs -sDEVICE=bbox のコマンドと %%BoundingBox: の出力がザーッと流れていくので特に驚かないのですが。

doraTeX commented 8 years ago

Ver. 2.0.3 beta 4 を作成しました。

aminophen commented 8 years ago

Mac Ver. 2.0.3 beta 4 だと問題ないです。gs の回数も最小限で、スムーズにログが出て安心しました。

doraTeX commented 8 years ago

テストありがとうございます。 ではそろそろ Ver. 2.0.3 を正式リリースしましょう!

aminophen commented 8 years ago

いよいよ両方ともリリースですかね!? 無茶をお願いして申し訳なかったのですが、派生して処理速度向上にもつながり、普通の利用にも還元できてよかったです。

abenori commented 8 years ago

透過だけ

そーなんです.ただなんで透過時だけpdfiumdrawを使っているのかとか,GhostscriptでPDFから直接PNGを作らないの何でだっけとか,忘れてしまいました……(後者は余白のせいかな)いずれにせよ

普通の利用にも還元できてよかったです

こっちはSVG利用時のというなんかびみょーな場所だけ速くなりました.(GIFはサポート外.)

aminophen commented 8 years ago

変換スキームは私もすっかり記憶の彼方です。変えるとまたいろいろ怖いのと GIF はそもそも隠し機能なので考えないということで。

GIF アニメまで作れるようになったので TeX2“img”としてこれ以上はないでしょう。ほかにサポートしているツールを聞いたことがないですし、ソース保持もできていて強力になりましたね。(ちょうど引き継いでいただいてから一年くらいですが、ひたすら何かしら続けていたような。)

doraTeX commented 8 years ago

GIF アニメまで作れるようになったので TeX2“img”としてこれ以上はないでしょう。ほかにサポートしているツールを聞いたことがないですし、ソース保持もできていて強力になりましたね。(ちょうど引き継いでいただいてから一年くらいですが、ひたすら何かしら続けていたような。)

お陰様でこの一年の進歩はめざましく,まさしく「最強の」ツールに進化しましたね。

といった様々な要因の相乗効果で,これらのめざましい進歩が遂げられました。 改めてお二人に感謝いたします。m(__)m

もう胸を張って「LaTeXiT → 問題が発生する場合は TeX2img を使用する」と言えますね😏

abenori commented 8 years ago

例えばpng作るときでもpdftexで一括余白処理→Ghostscriptで変換とすれば倍速弱にはなるかなぁ,と思ってみました.しかし同じようなことは定期的に思っている気がして,何もしていないということは何か問題があるんだろうか(忘れた)

現在の手元のConverter.csは1556行,ちなみに僕が書く前のは611行です.大分増えました.前開発者からのお題でできていないのは英語版くらいでしょうか.どうにもやる気が……. 手前味噌でやっていても仕方が無いですし,まぁ何かあればイロイロやっていきましょう.