teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

元の画像のメタデータもコピーするように修正

2018/04/06 09:17

投稿

imihito
imihito

スコア2166

answer CHANGED
@@ -10,7 +10,7 @@
10
10
  ```powershell
11
11
  # 設定項目
12
12
  [string]$画像の保存されているフォルダ = 'C:\Users\TestUser\Pictures'
13
- [string]$縮した画像の保存先 = '{0}\圧縮画像' -f $画像の保存されているフォルダ
13
+ [string]$縮した画像の保存先 = '{0}\圧縮画像' -f $画像の保存されているフォルダ
14
14
  [int]$画像の横幅 = 800 #px
15
15
 
16
16
  [string]$元の画像の拡張子 = '*.jpg'
@@ -18,38 +18,43 @@
18
18
 
19
19
  # 画像操作に必要なライブラリ読み込み
20
20
  Add-Type -AssemblyName System.Drawing
21
- [Drawing.Imaging.ImageFormat]$縮後画像の形式 = [Drawing.Imaging.ImageFormat]::Jpeg
21
+ [Drawing.Imaging.ImageFormat]$縮後画像の形式 = [Drawing.Imaging.ImageFormat]::Jpeg
22
22
 
23
23
  # 出力先のフォルダを作成(すでにある場合は何もしない)
24
- [IO.Directory]::CreateDirectory( $縮した画像の保存先 ) > $null
24
+ [IO.Directory]::CreateDirectory( $縮した画像の保存先 ) > $null
25
25
 
26
26
  # $画像の保存されているフォルダ の中から、$元の画像の拡張子 でフィルターしたものを探す
27
27
  Get-ChildItem -LiteralPath $画像の保存されているフォルダ -Filter $元の画像の拡張子 |
28
28
  %{
29
- # 見つかったものそれぞれに対して処理
29
+ # 見つかったものそれぞれに対して処理 ( $_ -is [IO.FileInfo] )
30
-
30
+
31
31
  # 元となる画像読み込み
32
32
  [Drawing.Bitmap]$srcBmp = [Drawing.Bitmap]::FromFile($_.FullName)
33
+ # 画像のメタデータ(撮影日時など)取得
34
+ [Drawing.Imaging.PropertyItem[]]$props = $srcBmp.PropertyItems
33
35
 
36
+
34
37
  # 新しい画像の大きさを計算
35
38
  [int]$newWidth = $画像の横幅
36
- [int]$newHeight = ($srcBmp.Height / $srcBmp.Width) * $newWidth
39
+ [int]$newHeight = [int]( ($srcBmp.Height / $srcBmp.Width) * $newWidth )
37
40
 
38
- # 縮した画像を作成(メモリ内)
41
+ # 縮した画像を作成(メモリ内)
39
42
  [Drawing.Bitmap]$destBmp =
40
43
  New-Object -TypeName Drawing.Bitmap -ArgumentList $srcBmp, $newWidth, $newHeight
41
-
44
+ # 画像のメタデータ(撮影日時など)設定
45
+ $props | %{ $destBmp.SetPropertyItem( $_ ) <# $_ -is [Drawing.Imaging.PropertyItem] #> }
46
+
42
- # 縮した画像の保存先
47
+ # 縮した画像の保存先
43
48
  [string]$destPath = [IO.Path]::Combine(
44
- $縮した画像の保存先,
49
+ $縮した画像の保存先,
45
- [IO.Path]::ChangeExtension($_.Name, $縮後画像の形式.ToString()))
50
+ [IO.Path]::ChangeExtension($_.Name, $縮後画像の形式.ToString()))
46
51
 
47
52
  # ファイルの存在確認
48
53
  if ( Test-Path -LiteralPath $destPath ) {
49
54
  Write-Host ('「{0}」はすでに存在しています。' -f [IO.Path]::GetFileName($destPath))
50
55
  } else {
51
- # $縮後画像の形式 で保存
56
+ # $縮後画像の形式 で保存
52
- $destBmp.Save($destPath, $縮後画像の形式)
57
+ $destBmp.Save($destPath, $縮後画像の形式)
53
58
  Write-Host ('「{0}」を「{1}」として保存しました。' -f $_.Name, [IO.Path]::GetFileName($destPath))
54
59
  }
55
60
 
@@ -59,7 +64,7 @@
59
64
  }
60
65
 
61
66
  # 保存したフォルダを開く
62
- explorer.exe $縮した画像の保存先
67
+ explorer.exe $縮した画像の保存先
63
68
  ```
64
69
 
65
70
  ---

1

しっくりこなかったため、処理内の「圧縮」を「縮小

2018/04/06 09:17

投稿

imihito
imihito

スコア2166

answer CHANGED
@@ -60,4 +60,15 @@
60
60
 
61
61
  # 保存したフォルダを開く
62
62
  explorer.exe $圧縮した画像の保存先
63
+ ```
64
+
65
+ ---
66
+
67
+ 実行ポリシーによる制限を解除するコード
68
+
69
+ ```posh
70
+ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
71
+
72
+ # 省略形
73
+ Set-ExecutionPolicy RemoteSigned CurrentUser
63
74
  ```