製作動機
現在参画している仕事環境では、支給されたPCに会社規定以外のアプリケーションのインストールが認められておらず、管理者権限もありません。
テストのエビデンスを取得する際に画面コピーを多用するのですが、モニタをスケーリング設定して使用していると、Excel等に貼り付けた画面コピーのイメージがやたらと大きくなってしまいます。
毎度々々ペイントで縮小するとか、貼り付けた後で手で縮めるとかをやっていると、テストが永遠に終わらないので調べたところ、PowerShellであればできそうだという結論に達しました。
あちらこちらからコードを拝借して、なんとか完成しましたので、公開させていただきます。
処理内容
- クリップボードにあるイメージデータを読み込む
- 7行目にある
$ratio
の値に従って、読み込んだデータを拡大・縮小する - 2.で拡大・縮小したイメージデータをクリップボードに戻す
これだけです…
Add-Type -AssemblyName System.Windows.Forms
[void][Reflection.Assembly]::LoadWithPartialName("System.Drawing")
$cbImage = [System.Windows.Forms.Clipboard]::GetImage()
If ($cbImage -ne $null)
{
$ratio = 71 # 拡大・縮小比率→71となっているのは、元イメージを71%に縮小するということ
$ratio = $ratio / 100
$newWidth = [int]($cbImage.Width * $ratio) # アスペクト比を変える時は、
$newHeight = [int]($cbImage.Height * $ratio) # これらの値を修正する
$bmImage = New-Object System.Drawing.Bitmap($newWidth, $newHeight)
$newImage = [System.Drawing.Graphics]::FromImage($bmImage)
$newImage.DrawImage($cbImage, $(New-Object -TypeName System.Drawing.Rectangle -ArgumentList 0, 0, $newWidth, $newHeight))
[Windows.Forms.Clipboard]::SetImage($bmImage)
$cbImage.Dispose()
$bmImage.Dispose()
$newImage.Dispose()
}
上記のソースはGitHubにも上げてあります。
使い方
- 上の
shrink.ps1
をファイルに保存します。ファイル名は何でも構いませんが、拡張子は.ps1
にしてください - PrtSc/ALT+PrtSc/Win+SHIFT+Sで画面コピーを取得します
または、任意のイメージをクリップボードへコピーします - エクスプローラー上で1.で作成したファイルを右クリックすると、「PowerShellで実行」というメニューがでますので、それを選択します
- 一瞬コマンドプロンプトが表示され、すぐに消えます
- CTRL+Vまたはアプリの「貼り付け」でペーストしてください
注意点
コマンドラインから実行しようとすると、PowerShellの実行ポリシーの制限により実行できない場合があります。デフォルトのポリシーでは実行不可となっており、設定を変更しようとすると、管理者権限が必要になります。
一回のみであればpowershell -ExecutionPolicy RemoteSigned shrink.ps1
で可能です。
PowerShellについて感じたこと
PowerShellは.NETのライブラリが呼べるので、実質C#やVBと同じことができます。
強力だが危険というのは確かにそのとおりで、インターネット上からダウンロードしたPowerShellスクリプトを、中のコードを見ずに実行してはいかんというのが、良くわかりました。
といいつつ、PowerShellのコードを公開しているのですが(汗)、やっていることが単純ですのでご心配なく…