LoginSignup
0
0

More than 1 year has passed since last update.

クリップボードにあるイメージデータを拡大縮小するPowerShellスクリプト

Posted at

製作動機

現在参画している仕事環境では、支給されたPCに会社規定以外のアプリケーションのインストールが認められておらず、管理者権限もありません。
テストのエビデンスを取得する際に画面コピーを多用するのですが、モニタをスケーリング設定して使用していると、Excel等に貼り付けた画面コピーのイメージがやたらと大きくなってしまいます。
毎度々々ペイントで縮小するとか、貼り付けた後で手で縮めるとかをやっていると、テストが永遠に終わらないので調べたところ、PowerShellであればできそうだという結論に達しました。
あちらこちらからコードを拝借して、なんとか完成しましたので、公開させていただきます。

処理内容

  1. クリップボードにあるイメージデータを読み込む
  2. 7行目にある$ratioの値に従って、読み込んだデータを拡大・縮小する
  3. 2.で拡大・縮小したイメージデータをクリップボードに戻す

これだけです…

shrink.ps1
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にも上げてあります。

使い方

  1. 上のshrink.ps1をファイルに保存します。ファイル名は何でも構いませんが、拡張子は.ps1にしてください
  2. PrtSc/ALT+PrtSc/Win+SHIFT+Sで画面コピーを取得します
    または、任意のイメージをクリップボードへコピーします
  3. エクスプローラー上で1.で作成したファイルを右クリックすると、「PowerShellで実行」というメニューがでますので、それを選択します
  4. 一瞬コマンドプロンプトが表示され、すぐに消えます
  5. CTRL+Vまたはアプリの「貼り付け」でペーストしてください

注意点

コマンドラインから実行しようとすると、PowerShellの実行ポリシーの制限により実行できない場合があります。デフォルトのポリシーでは実行不可となっており、設定を変更しようとすると、管理者権限が必要になります。
一回のみであればpowershell -ExecutionPolicy RemoteSigned shrink.ps1で可能です。

PowerShellについて感じたこと

PowerShellは.NETのライブラリが呼べるので、実質C#やVBと同じことができます。
強力だが危険というのは確かにそのとおりで、インターネット上からダウンロードしたPowerShellスクリプトを、中のコードを見ずに実行してはいかんというのが、良くわかりました。
といいつつ、PowerShellのコードを公開しているのですが(汗)、やっていることが単純ですのでご心配なく…

0
0
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
0
0