有时图像缩小不起作用

时间:2017-02-01 08:34:07

标签: powershell

我有一个缩小图像的脚本,但我注意到有些照片被放大了。例如,我有一张大小为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}

}

1 个答案:

答案 0 :(得分:0)

这种情况会发生,因为文件默认以PNG格式保存。但是,文件扩展名不会更改,因此很难区分。这可以通过在十六进制编辑器中打开文件并检查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)