Сжатие файлов JPG в каталоге в C#
Я написал этот пример, чтобы помочь создать уменьшенные версии некоторых из тысяч фотографий, которые я собирал за эти годы. К сожалению, фотографии, которые вы снимаете с современной камерой или телефоном, как правило, огромны. К счастью, большинству моих родственников и друзей Facebook обычно не нужно видеть изображения с их оригинальной точностью. Обычно вы можете немного уменьшить уровень сжатия, чтобы сжать файлы 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, чтобы сохранить файл с новым уровнем сжатия или с новым максимальным размером, в зависимости от того, выбран ли выбранный уровень сжатия радио.
Загрузите пример, чтобы увидеть остальную часть кода.
Обратите внимание, что код не открывается, если установлен переключатель «Установить максимальный размер файла», а размер файла уже достаточно мал. Это экономит немало времени. Это также мешает программе повторно сохранять файл, если это не нужно, что может снизить качество файла без уважительной причины.