MarkdownにBase64で画像を埋め込む


# Markdownに画像を埋め込みたい

ExcelやらWordやらは嫌い、PDFもソフトがないと編集できない。
でも画像をひとつのファイルにまとめておいたりしたい。
少なくとも画像だけでも埋め込めたらいいのに．．．
という発想から、Markdownに画像ファイルを埋め込んだり
抜き出したりできるコンバータを実験的に作ってみました。

# 埋め込む形式

埋め込みたいものはバイナリファイルなので、それをテキストで表現できるように
Base64でエンコードして文字列として埋め込む。

# 成果物

Rubyのスクリプトで書いてみた。
[github](https://github.com/singy15/pacmark)で公開してます。
サンプルファイルを用意してあるので試してみてね。

※玄人仕様だから（手抜きだから）元のファイル上書きしちゃうから気をつけてね。

こんな感じで変換と逆変換ができる。

```shell-session:変換（埋め込み）
ruby pacmark.rb pack sample.md
```

```shell-session:逆変換（画像ファイル抜き出し＆埋め込み文字列削除）
ruby pacmark.rb unpack sample.md
```

```text:sample.md（変換前）
# Sample

## Section 1

Pacmark is a binary packaged markdown converter.

![alt](./pacmark-img.png)
```

```text:sample.md（変換後）

# Sample

## Section 1

Pacmark is a binary packaged markdown converter.

![alt](./pacmark-img.png)


<!-- base64:pacmark-img.png
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
sCGrBDZklcB/JDGKQx2j0HsAAAAASUVORK5CYII=
-->
```
こんなかんじで画像ファイルがMarkdownファイルに文字列として埋め込まれる。
コメントで囲まれているので画像が埋め込まれたファイルを表示しても
きちんとMarkdownとして表示できるし、埋め込み文字列はファイルの一番最後に
追加されるので大して邪魔にならない。
画像を差し替えたり編集したりしたくなったらunpackして画像を差し替えて再びpackすればいい。

# 利点だとおもうこと

- Markdownにファイルが埋め込めるので複数ファイルを一緒に移動しなくてもいい。
- 変換後のファイルをそのまま開いても問題なく、普通のMarkdownファイルと同じように扱える
- 今回は画像だけだったけどファイルだったら何でもいいのでいろいろ使えそう
- ファイルを取り出して再び埋め込むこともできるのでメンテナンスも簡単かも？（変換の手間はさておき）

# 欠点だと思うこと

- ファイルサイズがでかい<br>小さい画像でも大きいファイルサイズになるので、
もっと大きな画像とかファイルだったらどうなるの．．．
- 変換がめんどくさいし、変換してからじゃないと見れないだとzip圧縮して解答するのとかわらんのでは？

# まとめ

Markdownエディタが対応してくれれば便利につかえるかもしれないけど、それもうWordとかExcelとかと
あんまり変わらんのではと思ってしまいます。
ソフトがなくても一応中身が見られるし編集もできるし、書くのも簡単というのはいいところだと思うんですがね．．．

以上、小ネタでした。