スクリーンショットやプログラムから画像をコピーしてもそのあとにファイルにしたい場合は画像編集ソフトを起動する必要があり面倒です。ここで Custom Context Menu と PowerShell を使った方法を説明します。 Custom Context Menu はあらかじめストアからダウンロードしてください(有料アプリですが、永遠の試用期間があります)。
Custom Context MenuをインストールしたらWindowsを再起動して有効にしてください。何も警告や案内が出ないので再起動を忘れますが、それでは動きません。
次に以下のPowerShellスクリプトとを作成して適当なファイル名で保存します。今回は「SaveClipboardImageAsJpeg.ps1」で保存しています。エンコードはSJISにしてください。
- param ([parameter(mandatory=$true)][String]$Arg1)
- Add-Type -AssemblyName System.Windows.Forms
- Add-Type -AssemblyName System.Drawing
- function Save-ClipboardImageAsJpeg {
- [CmdletBinding()]
- param ()
- # 現時刻を取得し、ファイル名を生成
- $timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
- $outputPath = Join-Path -Path "$Arg1" -ChildPath "img$timestamp.jpg"
- # クリップボードから画像を取得
- $clipboardImage = [System.Windows.Forms.Clipboard]::GetImage()
- if ($clipboardImage -ne $null) {
- # 画像をJPEG形式で保存
- $jpegEncoder = [System.Drawing.Imaging.ImageCodecInfo]::GetImageEncoders() | Where-Object { $_.MimeType -eq "image/jpeg" }
- $encoderParameters = New-Object System.Drawing.Imaging.EncoderParameters(1)
- $encoderParameters.Param[0] = New-Object System.Drawing.Imaging.EncoderParameter([System.Drawing.Imaging.Encoder]::Quality, 100L)
- $clipboardImage.Save($outputPath, $jpegEncoder, $encoderParameters)
- Write-Output "画像が保存されました: $outputPath"
- } else {
- # ポップアップ表示
- [System.Windows.Forms.MessageBox]::Show("クリップボードに画像がありません。", "エラー", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
- }
- }
- # コマンドレットを実行
- Save-ClipboardImageAsJpeg
次に Custom Context MenuのMenu Configで以下を設定します。
Exe 「"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"」
-Param 「 -ExecutionPolicy Bypass -File "C:\data\powershell\SaveClipboardImageAsJpeg.ps1" {path}」
です。 メニュー名は任意で決めてください。 これで、何か画像をコピーして、適当なフォルダを右クリックすると、タイムスタンプのファイル名でJPEGファイルが保存されます。
この設定は便利ですので是非行ってみて下さい。