Сжатие файлов JPG в каталоге в C#

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

Пример Быстрый выбор уровня сжатия JPG в C# показывает, как настроить сжатие JPG-файла для экономии места. В этом примере применяется этот метод для сжатия JPG-файлов в каталоге. Следующий код показывает ключевой цикл, используемый в этом примере.

// Прокручиваем файлы JPEG.
string dir_name = txtFolder.Text;
foreach (string file_name in
    Directory.GetFiles(dir_name, "*.jp*g"))
{
    // Обработать этот файл.
    try
    {
        // Обновляем исходный размер.
        long file_size = new FileInfo(file_name).Length;
        original_size += file_size;
        txtOriginalTotalSize.Text = original_size.ToFileSizeApi();

        if (set_level)
        {
            // Сохраним файл на нужном уровне.
            using (Bitmap bm = ImageStuff.LoadBitmap(file_name))
            {
                ImageStuff.SaveJpg(bm, file_name, level);
            }
        }
        else
        {
            // Сохраним файл размером не более, чем желаемый размер.
            if (file_size > max_size)
            {
                using (Bitmap bm = ImageStuff.LoadBitmap(file_name))
                {
                    ImageStuff.SaveJpgAtFileSize(
                        bm, file_name, max_size);
                }
            }
        }

        // Обновляем окончательный размер.
        final_size += new FileInfo(file_name).Length;
        txtFinalTotalSize.Text = final_size.ToFileSizeApi();
        num_files++;
        txtFilesProcessed.Text = num_files.ToString();

        txtFilesProcessed.Refresh();
        txtOriginalTotalSize.Refresh();
        txtFinalTotalSize.Refresh();

        if (num_files % 10 == 0) Application.DoEvents();
    }
    catch (Exception ex)
    {
        // Отображение сообщения об ошибке и
        // даем пользователю возможность остановиться.
        if (MessageBox.Show("Error compressing file " +
            file_name + "\n" + ex.Message +
                "\nDo you want to continue?",
            "Error", MessageBoxButtons.YesNo,
            MessageBoxIcon.Error) == DialogResult.No)
        {
            break;
        }
    }
}

В коде используется Directory.GetFiles, чтобы получить массив, содержащий файлы, которые заканчиваются на .jpg или .jpeg. Для каждого файла программа либо вызывает SaveJpg, либо SaveJpgAtFileSize, чтобы сохранить файл с новым уровнем сжатия или с новым максимальным размером, в зависимости от того, выбран ли выбранный уровень сжатия радио.

Загрузите пример, чтобы увидеть остальную часть кода.

Обратите внимание, что код не открывается, если установлен переключатель «Установить максимальный размер файла», а размер файла уже достаточно мал. Это экономит немало времени. Это также мешает программе повторно сохранять файл, если это не нужно, что может снизить качество файла без уважительной причины.

Источник: http://csharphelper.com/blog/2016/08/compress-jpg-files-in-a-directory-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector