2017-02-01 5 views
0

画像を縮小するスクリプトがありますが、写真が拡大されていることがわかりました。例として私は808 Koのサイズの写真を撮っていますが、スクリプトの実行後には画像のサイズは1520 Koです。ときどき画像の縮小がうまくいかない

なぜ写真が拡大されているのですか?

ここに私のスクリプト:

$source = "P:\PAULINE DF informatique\Communication\*.jpg" 
$exclude_list = "(LOGOS ET DIVERS SUPPORT|!CARTES DE VOEUX 2017|LOGO)" 
$scale = 2.2 

$source_listephotos = Get-ChildItem $source -Recurse | where {$_.FullName -notmatch $exclude_list} 

$log = "U:\TEST\Photos - test\log_photo_2.txt" 

foreach ($source_photos in $source_listephotos) { 

$log_image = Get-Content "U:\TEST\Photos - test\log_photo_2.txt" 

for ($a = 1; $a -lt 100; $a++) { 
    Write-Progress -Activity "Working ..." -PercentComplete $a -CurrentOperation "$a% complete" -Status "Please Wait." 
    } 

    if ($log_image -eq $source_photos) {Write-Host OK} 
     else { 
      $source = [System.Drawing.Image]::FromFile($source_photos.FullName) 
      $size = "$([int]($source.Width/$scale)), $([int]($source.Height/$scale))" 
      $dest = New-Object System.Drawing.Bitmap($source, $size) 
      $source.Dispose() 
      $dest.Save($source_photos.Fullname) 
      $dest.Dispose() 
     } 

    if($? -eq $false){echo "$source_photos pas compressé" | out-file -append $log} 
      else 
       {echo "$source_photos" | out-file -append $log} 

} 

答えて

0

ファイルはPNG形式にデフォルトで保存されるので、これは、発生します。しかし、ファイル拡張子は変更されないので、その違いを伝えるのは難しいです。これは、16進エディタでファイルを開き、PNGマジックバイト89 50 4e 47 0d 0a 1a 0aのヘッダを調べることで確認できます。 JPGヘッダーはff d8 ffで始まります。

JPGはロッシーな形式で、写真をきれいに圧縮します。 PNGは無損失であり、JPGと同じようにファイルサイズを縮小するために同じトリックを利用することはできません。したがって、JPGからPNGに変換すると、ファイルサイズが大きくなる傾向があります。必ずしもそうではありませんが、一部の画像はPNG形式でも非常に圧縮可能です。そのようなJPG形式の解決策として

save the file、解明のための

$dest.Save("C:\path-to-file", [System.Drawing.Imaging.ImageFormat]::jpeg) 
+0

おかげで、あなたを、私は理解しています。私は解決策を試していますが、 "c:\ path-to-file"では "$ source"を入れました。もう一度ありがとう – pcarrey

関連する問題