2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

WSL上からWindowsのクリップボードに保存されている画像をpng保存する

Posted at

解答編

以下のコマンドをwsl上のbashで実行すれば、Windows上でコピーした画像がWSL上のカレントディレクトリにファイルとして保存される。

$ powershell.exe '(Get-Clipboard -Format Image).Save("image.png")'

解説編

まず、WSLはWindowsとは別にUbuntuが動いているので、クリップボードは共有されない。したがって、Widows上でのクリップボードにアクセスする仕組みが必要。

RubyにWin32などのライブラリもあるが、それはRubyをWindows上で動かしたときに機能するものであって、WSL上のRubyでwin32のgemを使っても、Lunux上でkernel32.soを探しに行こうとする(当然ない)。

幸い、WSLからはWindowsのexeファイルは実行可能で、PowerShellも実行可能。PowerShellにGet-Clipboardというコマンドがあるので、そいつを使う。

シンプルに

$ powershell.exe Get-Clipboard

と実行すれば、テキストファイルの場合には、テキストが出力される。Macで言えば、pbpasteを実行したのと同じ結果になる。

クリップボードに画像が入ってる時には、-Format Image の引数を付与する。

$ powershell.exe Get-Clipboard -Format Image


Tag                  :
PhysicalDimension    : {Width=909, Height=527}
Size                 : {Width=909, Height=527}
Width                : 909
Height               : 527
HorizontalResolution : 96
VerticalResolution   : 96
Flags                : 335888
RawFormat            : [ImageFormat: b96b3caa-0728-11d3-9d7b-0000f81ef32e]
PixelFormat          : Format32bppRgb
Palette              : System.Drawing.Imaging.ColorPalette
FrameDimensionsList  : {7462dc86-6180-4c7e-8e3f-ee7333a7a483}
PropertyIdList       : {}
PropertyItems        : {}

このように、メタ情報のみが出力される。返すのはImageオブジェクトなので、画像形式で保存するには、Saveメソッドをつける必要がある。インスタンス変数にセットすることなく、いきなりメソッドをつけたいときには、カッコでくくることで、メソッドが実行できる。

$ powershell.exe '(Get-Clipboard -Format Image).Save("image.png")'

なぜ必要になったか

MarkDownで文書を書いてる時にはスクショもどんどん入れていきたい。MarkDownはVSCodeで書いてる。VSCodeは基本的にはWSLで動かしている(ほとんどがLinux上で動かしたいものばかりなので)。そこでWSL上で実行するだけで、画像のパスを生成し、そのパスにクリップボードの画像を保存し、さらにクリップボードに画像のパス(文字列)を入れるということを一気にやりたいと思った。

と、ここまで書いて思ったけど、MarkDownで文書を書く時だけ、Windows上でVSCodeを開けば、「CTL+ALT+Vでクリップボードの画像を保存してなおかつMarkDonw形式で挿入してくれるツール」がそのまま使えるなと思った。こういうツール。
https://marketplace.visualstudio.com/items?itemName=mushan.vscode-paste-image

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?