AsciiDoc 文書をVS-Codeの拡張機能でスクリーンショットを取り込む

## 概要
AsciiDoc 文書をVS-Codeの拡張機能でスクリーンショットを取り込む方法のメモです。ついでに、技術屋がよくやる簡易な画像加工のノウハウも少し記載しています。

### これまで

* 画面キャプチャーを取り込むのに画像の保存ディレクトリを開いて、ファイルコピーしていた
* ATOMで `asciidoc-image-helper` といもので保存ができることが分かって満足
  * ただ、ファイル名に日付の代わりにハッシュとなり、ファイル名順のソートが自然に日付順にならない
* AsciiDocの編集にはもともとATOMを使っていたが、仕事でVS-Codeを使うことが増えて VS-Code でも良いのではと思い始め、VS-CodeのExtensionの導入を検討 (いまここ)

## 使用したアプリケーション

* Visual Studio Code
  * Paste Image 1.04  
    AsciiDoc文書に画面保存
* IrfanView 4.5.1
  * キャプチャー用途。好きなのを使えばよいですが、加工方法がわかると便利なので後で少し説明します。
  * Windows10だと `Snipping Tool` というものがあって、`Windows`+`Shift`+`S` でスクリーンショットを取れる。加工しないなら、これが一番楽な方法)

## やりたいこと

* OneNoteでもよいが、章立て、文書取り込みがしやすい Markdown or AsciiDoc などのマークアップ言語を使いたい
* フォルダーへの保存の手間をなくしたい → Paste Image の使用
* ファイル名はほかの文書と混ざらないように保存場所を指定したい
* ファイル名には、ファイル名を埋め込みたい
  * ファイル名は独自形式でなく ISO-8601 に近づけたい
* ファイル名には、タイムスタンプを埋め込んで日付順に並ぶようにしたい

## Paste Image

[asciidoctor-vscode](https://marketplace.visualstudio.com/items?itemName=joaompinto.asciidoctor-vscode)は削除しておくこと。
入っていると `AsciiDoc:Paste Image` というのが優先して動き、Paste Imageのショートカットや設定が無効となってしまう。
なお、このパッケージはobsolete(廃止)状態にある。

### イメージの貼り付けの例
Paste Image は `Ctrl` + `Alt` + `V` でクリップボード中のイメージを張り付けることができる。

以下、 images フォルダに格納され、`image::ファイル名.png` の画像ファイルのマークアップが挿入された。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326797/5229e5bb-e983-451c-c18f-990ce26192b1.png)

### 設定
標準より次のように設定を変えます。

| 設定名 | 説明
|-|-|
| `pasteImage.defaultName` | ファイル名(プレフィックス、拡張子を除く) <br/> **Default**: `Y-MM-DD-HH-mm-ss`
| `pasteImage.insertPattern` | ファイル名のパターン <br/> **Default**: `${imageSyntaxPrefix}${imageFilePath}${imageSyntaxSuffix}`
| `pasteImage.namePrefix` | ファイル名の前に付ける文字 <br/> **Default**: 空(プレフィックスなし)
| `pasteImage.path` | ファイルを格納するパス <br/> **Default**: `${currentFileDir}`

#### 方法1) 画面上で変更する場合

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326797/38d4a4f8-9244-f549-4f5b-60ed4c49c8c8.png)

* 日付のフォーマットの指定  
設定名(`pasteImage.defaultName`)で検索してもよい。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326797/0dd7345a-0688-057b-b17b-021ae0a38d26.png)
* エンコード指定  
  ※ 必要ないかもしれないが一応。日本語ファイル名だとかパーセントエンコーディングされかも…と思ったので。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326797/b34b4622-b0a3-86fa-c888-6d9dc48e02ba.png)
* ファイル名の前に付ける文字列指定  
  今回は、拡張子を含まないファイル名を付与している。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326797/245a5ebc-e2f9-ec27-3fb3-c04f1f1a87ff.png)
* 貼り付けたイメージの保存場所  
  今回は、ファイルが多くなってくると文書を選ぶのが面倒になるので、 `images` ディレクトリに保存するようにカスタマイズする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326797/2949ff05-c926-9391-67f0-16681d4a3762.png)

#### 方法2) settings.json を編集する場合

Windows だと `%APPDATA%\Code\User\settings.json` をいじります。
次の 4 行を加えます。
以下の例では画像の保存場所は `images` です。

```javascript
{
    // ...snip
    "pasteImage.defaultName": "YYYYMMDDTHHmmss",
    "pasteImage.path": "${currentFileDir}\\images",
    "pasteImage.namePrefix": "${currentFileNameWithoutExt}-",
    "pasteImage.insertPattern": "${imageSyntaxPrefix}${imageFileName}${imageSyntaxSuffix}",
    // ...snip
}
```



**参考: Markdown設定**

```javascript
{
    // ...snip
    "pasteImage.defaultName": "YYYYMMDDTHHmmss",
    "pasteImage.path": "${currentFileDir}/images",
    "pasteImage.namePrefix": "${currentFileNameWithoutExt}-",
    "pasteImage.insertPattern": "${imageSyntaxPrefix}${imageFileName}${imageSyntaxSuffix}",
    // ...snip
}
```

### 例: editor-vscode.adoc に貼り付けをした場合

```asciidoc
=== Paste Image
// image::images/editor-vscode-20200411T235816.png[]

* 日付のフォーマットの指定
+
image::images/editor-vscode-20200412T000452.png[]
* エンコード指定
+
image::images/editor-vscode-20200412T000616.png[]
* ファイル名の前に付ける文字列指定
+
image::images/editor-vscode-20200412T000837.png[]
* 貼り付けたイメージの保存場所
+
image::images/editor-vscode-20200412T003316.png[]
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326797/8e442697-074e-4286-4b6b-49abd9952bdb.png)


## おまけ: IrfanViewによるイメージ加工

### キャプチャーの設定

1. `C` ボタンを押下し、キャラクターのメニューを出す  
   今回は、ファイル保存する前に IrfanView でファイル加工をするので `Show captured Image in main Window` を選んでいる。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326797/bc355fe4-ea18-4bbe-f773-27aad77c7208.png)
2. `Ctrl` + `F11` でキャプチャーをとれる(デフォルト設定)


### イメージ加工
1. `F12` のボタンをおすと表示している画像の編集ができる。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326797/6646af21-22a7-8e53-2f51-611d2c28e693.png)
2. 加工が終わったら、再度 `F12` を押す  
   ウインドウが消えて範囲選択できるようになる。

私がよく使うのは □のアイコン。
Ctrl を押しながら操作すると、範囲選択の縦横比を固定化できる。

### ぼかしなど

1. 範囲指定をする
2. `Ctrl` + `E` を押す (Imageメニュー → `Effects` の項目)  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326797/2c414ad4-7fac-2f42-5257-5f60f3002953.png)
3. ぼかしは Blur、モザイクは Pixelize を選ぶ
4. `Save and draw on image` ボタンで描画される

### 範囲選択の縦横比の比率を変更する
範囲選択機能があるが、縦横比を固定したい場合のカスタマイズができる。`Shift` + `C` を押すと設定画面が開く。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326797/7fcae449-26c5-14ce-9f6f-576679270330.png)

## 参考

* [Paste Image - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=mushan.vscode-paste-image)
* ISO 8601 関連
  * [Definitive ISO-8601 file naming standard : ISO8601 - Reddit](https://www.reddit.com/r/ISO8601/comments/74g08z/definitive_iso8601_file_naming_standard/)  
    Reddit は一次情報でないので参考程度。
  * [ISO 8601 -- Date and Time API の基礎知識 (ja) - notepad](https://www.coppermine.jp/docs/notepad/2016/12/iso-8601.html)
* [ASCII.jp：Windows 10で画面キャプチャーを撮れるショートカットが追加](https://weekly.ascii.jp/elem/000/001/427/1427109/)