markdown と画像
◆ VSCode (markdown-it) は mime タイプが正しくなかったり改行を含むと img タグに変換してくれない
◆ Marked はそれらも対応してる
◆ github の markdown は data スキームの画像に非対応
◆ base64 で埋め込めない
◆ Marked はそれらも対応してる
◆ github の markdown は data スキームの画像に非対応
◆ base64 で埋め込めない
mime タイプ
VSCode の場合
<img src="data:img/png;base64,aaaaaaaa">
は画像が表示されるけど
![image](data:img/png;base64,aaaaaaa)
は画像が表示されずソースの文字列がそのまま表示されます
mime タイプが正式な image/png じゃないと img タグにならないみたいです
img タグであれば正式 mime タイプでなくても動いてます
実際 img/png どころではなく極端に
<img src="data:;base64,aaaaaaaa">
と mime タイプ書かなくても画像が表示されます
img タグ化されてからはブラウザ(Electron だから Chrome 依存)の動作次第なので Chrome が対応してるからです
仕様は確認してませんが Chrome/Firefox は mime タイプなしでもロードされてます
marked の場合
JavaScript の有名な markdown パーサですこれは img/png だろうと data:;base64 だろうと markdown 記法で画像表示であればなんでも img タグにしてくれます
なのでブラウザ img タグの動作次第になります
github の場合
その他でよく使うのは github ですが 意外にも data スキームに非対応ですbase64 で画像を埋め込むことができません
img タグには変換されるものの src 属性がなく壊れた画像アイコンになります
リポジトリのどこかのパス もしくは画像用リポジトリを用意するか画像用ブランチを作るなどで対処することになります
ただ gist の場合はブラウザ上のみで使うことが多いので少し面倒です
git を使って画像を埋め込むか github 中の何処かのコメント欄に画像をクリップボードにコピーした状態でペーストして github のサーバにアップロードする必要があります
ダウンロードして別の場所で使うことも考えれば git を使って同じリポジトリ中にいれたほうがいいのですが面倒なのですよね
だめな理由は svg のセキュリティどうこうらしくて現時点でも動かないです
https://github.com/github/markup/issues/270
base64 の書き方
改行を使って見やすくできます折り返ししないなら 人が見る部分じゃないので 1 行にしてしまったほうがスッキリするかもなのでどっちがいいとは言いづらいですが この辺にも違いがあったのでまとめておきます
<img src="data:image/png;base64,
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAAAX
NSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMA
AA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0Lj
EuNWRHWFIAAAAuSURBVChTYyAM/uMApEhDOWCAIoLCAQMUERQO
GKCIoHDAAEUEwsEExEnjBAwMAN8Qj3HDGTF2AAAAAElFTkSuQm
CC
">
![image](data:image/png;base64,
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAAAX
NSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMA
AA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0Lj
EuNWRHWFIAAAAuSURBVChTYyAM/uMApEhDOWCAIoLCAQMUERQO
GKCIoHDAAEUEwsEExEnjBAwMAN8Qj3HDGTF2AAAAAElFTkSuQm
CC)
VSCode の場合
上は問題ないですが 下は img タグに変換されませんVSCode のパーサは結構判定が厳しめみたいです
marked の場合
marked はどちらも対応してますただ ほかパーサにも言えますが 空行があるとタグの途中でも別段落として分割されてしまうので空行を作ることはできません
github の場合
表示はできないのですが img タグに変換すらされていないので VSCode と同じく構文的に改行を許していないようですまとめ
marked が柔軟で使いやすいですVSCode のパーサは調べてみたところ markdown-it が使われてるようです
ちなみに JavaScript の markdown パーサは⇩のものなどが有名らしいです
- CommonMark
- Marked
- markdown-it
- remarkable
- Showdown
markdown 記法で base64 中に改行を書けないのが多いのが残念です
img タグだと使いまわしできないので書けたほうが助かるのですけどね
〇〇です
![image1]
✕✕です
![image2]
〇〇です
![image1]
<!-- references -->
[image1]: data:image/png;base64,aaaaaaaaaa
[image2]: data:image/png;base64,bbbbbbbbbb
画像だと同じ画像を毎回その場に埋め込むとけっこう重くなってしまいますから 一度どこかに定義してあとは参照とすると見やすくもなります
markdown パーサでもいろいろ違いがあるので 別環境ではちゃんと表示されないことも多いのですよねー