ダブルクリックすれば再生するアニメーションGIFをWindowsで妄想する

今回のネタはかなり人を選ぶと思う。

つうのは、「レベルが高い」とかじゃなくて。こんなん、需要ないと思うのよね。

こういう困り方をしてる人限定:

  • チーム(プロジェクト)は全員 Windows
  • インターネットには気軽には行けない(か全く行けない)
  • 教育とか技術周知にアニメーションGIFを使いたくなった
  • けれども GIF ダブルクリックが IE に関連付いているとは限らない
  • 「ブラウザで開いてね」と説明するの面倒だわぁ

ありがちなのが「Windowsフォトビューワ」に関連付けされているケース。「Windowsフォトビューワ」は、少なくともWindows 7 のそれは、「アニメーションGIF」だとは思ってくれない。

こういうときに頼りになるのは「新しい技術」ではなくて、むしろ旧態依然のテクノロジ。

save_as_mht

上画像の「mht」。これ、ただの MIMEMultipart。MIME は登場した年からの付き合いの割には全然知らないので、「それ」が MS 方言なのかどうか、とかそんなことは知らない。ただ、とにかく以下で画像一個を mht に出来る:

img2mht.py
 1 # -*- coding: utf-8 -*-
 2 from email.mime.image import MIMEImage
 3 from email.mime.multipart import MIMEMultipart
 4 from email.mime.text import MIMEText
 5 import sys
 6 import os
 7 filename = sys.argv[1]
 8 filebase = os.path.basename(filename)
 9 
10 outer = MIMEMultipart()
11 outer['Subject'] = filebase
12 outer.preamble = 'This is a multi-part message in MIME format.\n'
13 
14 msg = MIMEText("""\
15 <html>
16 <body>
17 <img src="{}"/>
18 </body>
19 </html>
20 """.format(filebase), _subtype="html")
21 msg.add_header('Content-Location', "{}.html".format(filebase))
22 outer.attach(msg)
23 img = MIMEImage(open(filename, "rb").read())
24 img.add_header('Content-Location', "{}".format(filebase))
25 outer.attach(img)
26 temp = outer.as_string().split("\n")
27 temp[0] = temp[0].replace(
28     "Content-Type: multipart/mixed; ",
29     "Content-Type: multipart/related; type=text/html; ")
30 open(filebase + ".mht", "w").write("\n".join(temp))

最後の replace が凄まじく気に入らないのだけれど、これ、入れないと面白いことになるので、是非試してみ。

gif とは違って、余程の天邪鬼(単なるマニア?)の環境でない限り mht は普通は IE か Outlook のどちらかが反応するので、「LAN内のファイルサーバ」に説明なく置いておいても皆「動画だ!」と気付いてくれる。

ところで、こうやって作った mht を「素晴らしい」とかってインターネットの世界にバラまかないでね。こんなん受け取った *nix/Macユーザはたまらん。

追記 ほんとに Windows 限定で、「ちゃんとしたプレゼン」したいなら、きっとパワポあたりで真面目なプレゼン資料作る方がいいのだよ、こういう「インチキプレゼン」に飛びつかずに。でもね、「ちょっとした非公式の説明」したいことって、あるでしょう? そんなときに時間かけたくないじゃん。