2017-02-01 2 views
0

У меня есть сценарий, который уменьшает изображение, но я просто заметил, что некоторые фотографии увеличены. Например, у меня есть фотография размером 808 Ko, после выполнения моего сценария размер изображения составляет 1520 ко.Иногда уменьшение изображения не работает

Почему некоторые фотографии увеличены, а не другие?

Вот мой сценарий:

$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. Однако расширение файла не изменяется, поэтому трудно сказать разницу. Это можно проверить, открыв файл в шестнадцатеричном редакторе и наклеив заголовок для байтов магии PNG 89 50 4e 47 0d 0a 1a 0a. Заголовок JPG начинается с ff d8 ff.

JPG - формат с потерями и сжимает фотографии довольно хорошо. PNG без потерь и не может использовать те же самые трюки для уменьшения размера файла, как это делает JPG. Таким образом, преобразование из JPG в PNG имеет тенденцию к увеличению размера файла. Не всегда, хотя некоторые изображения очень сжимаются в формате PNG.

В качестве решения, save the file в формате JPG, как это так,

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

Спасибо Вам за экспликации, я понимаю. Я пытаюсь решить проблему, однако в «c: \ path-to-file» я поставил «$ source». Еще раз спасибо – pcarrey