Изменение размера нескольких изображений и сохранение их в отдельной папке - PullRequest
0 голосов
/ 18 мая 2018

Мне нужно изменить размер и сжать 200 изображений, которые я храню в папке.Я получаю эти изображения в списке, используя этот код, полученный из другого вопроса:

Dim dir = New IO.DirectoryInfo("C:\\Users\\Charbel\\Desktop\\Images")
Dim images = dir.GetFiles("*.jpg", IO.SearchOption.AllDirectories).ToList
Dim pictures As New List(Of PictureBox)
For Each img In images
    Dim picture As New PictureBox
    picture.Image = Image.FromFile(img.FullName)
    pictures.Add(picture)
Next

Теперь мне нужно сжать и уменьшить каждое изображение до (500x374), а затем сохранить их в другой папке на моемPC.

1 Ответ

0 голосов
/ 18 мая 2018

Хорошо, позвольте мне сначала указать пару моментов о вашем коде:

  • PictureBox здесь не имеет никакого смысла.Вы не должны создавать PictureBox для использования Image.
  • Всегда не забывайте располагать объект Image (например, оборачивая его в блок Using), чтобы избежать проблем с памятью.
  • В отличие от C #, VB.NET не требует экранирования символа \, поэтому вы можете написать свой путь так: «C: \ Users ...».

Теперь, для изменения размера изображения, вы можете просто создать экземпляр класса Bitmap с конструктором, который принимает изображение и аргумент размера: Bitmap(Image, Size) или Bitmap(Image, Int32, Int32).

Здесь:

Dim sourcePath As String = "C:\Users\Charbel\Desktop\Images"
Dim outputPath As String = "C:\Users\Charbel\Desktop\Images\Resized"

IO.Directory.CreateDirectory(outputPath)

Dim dir = New IO.DirectoryInfo(sourcePath)
Dim files As IO.FileInfo() = dir.GetFiles("*.jpg", IO.SearchOption.AllDirectories)
For Each fInfo In files
    Using img As Bitmap = Image.FromFile(fInfo.FullName)
        Using resizedImg As New Bitmap(img, 500, 374)
            resizedImg.Save(IO.Path.Combine(outputPath, fInfo.Name),
                            Imaging.ImageFormat.Jpeg)
        End Using
    End Using
Next
...