🐍

[小ネタ] ファイルをdata URLの形式でクリップボードに保存するPythonスクリプト

2024/01/11に公開

Markdown でメモを取る際に、画像をメモに貼りたい場合には皆さんどのようにしていますか?

画像を別途保管して、それを下記の例のように参照しても良いのですが、このやり方だとメモの可搬性が低くなります[1]

example
![note](path/to/some/image.png)

この場合、画像を data URL の形式にして貼ってしまえば、Markdown ファイルで完結する[2]ので可搬性の高い形でメモをとれます。

example of data URL
![note](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==)
example to use data URL with IMG tag
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==">

https://ja.wikipedia.org/wiki/Data_URI_scheme

この data URL の文字列を簡単に生成するスクリプトをご紹介します。

スクリプトの内容

GitHub を参照してください:

https://github.com/aikige/homeBinWin/blob/master/copyDataUrlToClipboard.pyw

簡単に言うと以下の処理をします:

  1. 引数から取得したファイルを開き、それを base64 ライブリを使って Base64 形式の文字列を取得します。
    この際、base64.b64encode() の出力は bytes 型なので、decode() で文字列に変換する必要があります。
  2. mimetype ライブラリを使ってファイル名から、MIME Type を推定します。
  3. 上記の2つを合わせて data URL の文字列を作り、それを pyperclip ライブラリを使ってクリップボードにコピーします。

上記の例では、Windows 上で python スクリプトをコンソールなしで起動するために拡張子を pyw にしています。

スクリプトの使い方

依存パッケージのインストール

pyperclip に依存していますので、お使いのシステムに入っていない場合はパッケージをインストールしてください:

pip install pyperclip

コマンドの使い方

スクリプトは引数をひとつ取ります。以下のコマンドを実施すると、

copyDataUrlToClipboard.pwy $FILENAME

$FILENAME の中身を data URL の形式にしたものがクリップボードに保管されます。

Windows における便利な使い方

  1. Windows の場合 shell:sendto にこのスクリプトのショートカットを登録します。
  2. Explorer などで、変換したいファイルを右クリックし、出てきたメニューの「送る」からこのスクリプトに送ると、data URL の文字列がクリップボードに保管されます。
  3. お使いのエディタに貼り付けて利用します。
脚注
  1. Markdown に加えて、参照先の画像も一緒に、同じフォルダ構成になるように持ち運ぶ必要があります。 ↩︎

  2. ただし、Markdown のファイルサイズが大きくなります。 ↩︎

Discussion