Как быстро выбрать уровень сжатия JPEG в C#

Пример Сжатие файлов JPG до определенного размер в C# позволяет вам отрегулировать уровень сжатия JPG файла, пока он не станет больше указанного размера. Он делает это, начиная с уровня сжатия 100 и затем уменьшая уровень до тех пор, пока не найдет значение, которое делает файл достаточно маленьким.
Этот метод является достаточно быстрым, но часто вызывает заметную задержку, особенно если конечный уровень сжатия мал, поэтому программа должна делать много попыток. В худшем случае, если программа должна использовать уровень сжатия 5, программа сжимает и сохраняет файл 20 раз с уровнями сжатия 100, 95, 90, 85, ... 5.
В этом примере используется следующий код для выполнения более быстрого бинарного поиска для лучшего уровня сжатия.
PythonВ коде используется константа delta для определения коэффициентов, которые он считает для уровня сжатия. Эта версия использует кратность 5, поэтому она рассмотрит уровни сжатия 5, 10, 15, 20 и т. д. Код делает это значение постоянным, поэтому легко изменить кратность. Например, вы можете установить это значение 1, чтобы рассмотреть все возможные уровни сжатия. (Используемый здесь алгоритм достаточно быстр, чтобы сделать это практически. Предыдущий пример должен был сохранить файл до 20 раз в худшем случае. Эта версия должна сохранить файл всего 8 раз, чтобы найти лучший уровень сжатия, даже если вы установите delta = 1.)
Для управления поиском программа использует две ключевые переменные: le_level и gt_level. Значение le_level всегда меньше или равно оптимальному уровню. Значение gt_level всегда строго больше оптимального уровня. Когда он проходит через свой цикл, программа рассматривает уровни сжатия, где le_level & le; = level & lt; gt_level .
Изначально программа устанавливает le_level = delta и gt_level = следующий кратный delta больше 100. В этом примере это значение равно 105, поэтому изначально 5 & le; = уровень & lt; 105 . Это имеет смысл, потому что метод всегда должен возвращать значение от 5 до 100. (Я сделал delta наименьший уровень сжатия, который будет использовать метод, даже если файл по-прежнему больше желаемого.)
Установив le_level и gt_level, программа вводит бесконечный цикл. Внутри цикла код устанавливает test_level как кратное delta, ближайшего к середине между le_level и gt_level >. (Это шаг двоичного деления.)
Если test_level == le_level, тогда программа рассмотрит все возможные значения уровня, чтобы она вышла из цикла. Например, предположим le_level = 30, gt_level = 35 и delta = 5. Затем код устанавливает test_level = 30. На этом этапе мы знаем, что 30 & le; уровень & lt; 35, поэтому желаемый результат должен быть 30, что является значением le_level.
Если цикл не заканчивается в этот момент, программа сохраняет файл на уровне сжатия test_level и получает размер файла. Если файл слишком велик, программа понижает gt_level до test_level, поэтому он рассматривает меньшие уровни в следующем цикле. Если файл не слишком большой, то программа поднимает le_level на test_level, поэтому он рассматривает более крупные уровни в следующем цикле.
Цикл продолжается, опуская gt_level или поднимая le_level, пока test_level == le_level и код не выйдет из цикла. р>
Когда цикл завершается, программа, вероятно, просто сохранила файл на самом маленьком уровне, который делает файл слишком большим, поэтому он сохраняет файл на уровне le_level и возвращает le_level . р>
Источник: http://csharphelper.com/blog/2016/08/quickly-pick-jpg-compression-level-in-c/
Отзывы (через Facebook):
Оставить отзыв с помощью аккаунта FaceBook:
Цель этого примера - предоставить некоторую поддержку для создания карточной игры. В нем показано, как сделать класс для представления карт и рассказать, к...
24 01 2021 6:16:58
Свойство Length в String Class возвращает общее количество символов в String. Синтаксис: int string.length Возвращает: Целое число: количество символов в у...
23 01 2021 0:48:53
Вы можете использовать цикл foreach для перебора элементов массивов, списков, коллекций и других объектов с методом GetEnumerator. Этот цикл часто больше п...
22 01 2021 19:33:57
Иногда вам может понадобиться извлечь только строки, буквы или другую группу символов из строки. Вы можете прокручивать строку, анализируя каждый символ в...
21 01 2021 3:30:59
Всплывающие окна являются наиболее полезным способом отображения предупреждения или любой другой важной информации для посетителей сайта. JavaScript имеет...
20 01 2021 0:35:45
В этом примере показано, как создать общий класс очереди приоритетов. Общий класс похож на обычный класс, за исключением того, что он может принимать один...
19 01 2021 17:49:41
В этом примере показано, как вы можете сделать созданный владельцем ListBox. Обычно ListBox отображает текстовое представление своих объектов, но вы можете...
18 01 2021 0:15:39
Во время разработки я добавил в форму элемент WebBrowser. Когда программа запускается, он использует следующий код для открытия PDF-файла в элементе управл...
17 01 2021 21:51:56
В этом примере показано, как изменить разрешение изображения. Это еще один пример, который я создал для написания книг. Обычно компьютеры работают с изобра...
16 01 2021 12:28:48
В этом примере показано, как вы можете воспроизводить тоны с заданной частотой и продолжительностью. Когда пользователь нажимает кнопку « Воспроизведение»,...
15 01 2021 3:27:57
Такие известные компании, как Google и Intel, Cisco и Hewlett-Packard, используют язык Python, выбрав его за гибкость, простоту использования и обеспечивае...
14 01 2021 22:43:14
API JDBC использует отдельный класс Date, Time и Timestamp для подтверждения типа данных DATE, TIME и DATETIME из базы данных, но большая часть объектно-ор...
13 01 2021 18:36:20
Свойство Window.navigator только для чтения возвращает ссылку на объект Navigator, который может быть запрошен для получения информации о приложении, выпол...
12 01 2021 15:20:19
В этом примере вы можете сравнивать изображения, чтобы убедиться, что они одинаковые. Когда вы выбираете два изображения для сравнения и нажмите кнопку Go,...
11 01 2021 6:42:45
В этом примере создается общий метод расширения, который позволяет вам легко выбирать N случайных объектов из массива. Например, он позволяет выбрать 5 эле...
10 01 2021 16:59:34
В этом примере вы можете добавить ComboBox варианты, когда пользователь выбирает их во время выполнения. Чтобы отслеживать выбор для будущего использования...
09 01 2021 5:39:29
Эта программа позволяет рекурсивно находить файлы в иерархии каталогов, которые соответствуют одному или нескольким шаблонам. Затем вы можете заменить текс...
08 01 2021 1:20:12
Сериализация в Java - это механизм записи состояния объекта в поток байтов, а десериализация - это процесс преобразования потока байтов обратно в копию исх...
07 01 2021 7:46:25
Все разработчики знакомы с написанием последовательных программ, каждая последовательная программа имеет начало, последовательность выполнения и конец. Пот...
06 01 2021 21:27:43
Поскольку существует много способов сделать это, но следующий способ - перезагрузить один и тот же документ с помощью JavaScript. Свойство Window.location...
05 01 2021 11:46:27
Книга "C# Программирование на языке высокого уровня" представляет собой учебный курс по программированию на языке C#. Автор рассказывает в своей книге об о...
04 01 2021 8:58:58
В этом примере показано, как анимировать изображения, загружая их во время выполнения, а затем воспроизводя их по одному. Чтобы упростить поиск изображений...
03 01 2021 21:50:36
Пример Изменение натяжения гладкой кривой в C# показывает, как использовать метод draw Graphics класса DrawCurve для рисования гладкой кривой, соединяющей...
02 01 2021 12:33:18
В программе используется PathGradientBrush, чтобы заполнить цветовое колесо цветовыми образцами. Рисование колеса в основном автоматическое, но прикладывае...
01 01 2021 1:14:49
По какой-то странной причине метод DrawRectangle класса Graphics не может принимать параметр RectangleF в качестве параметра. Он может принимать значения R...
31 12 2020 5:44:59
Модель объекта браузера (BOM) - это соглашение, специфичное для браузера, относящееся ко всем объектам, открываемым веб-браузером. Когда браузер анализируе...
30 12 2020 6:25:54
Эта программа позволяет масштабировать и прокручивать изображение, нарисованное программой. Программа содержит Panel с AutoScale, установленным в true. Вну...
29 12 2020 2:33:27
Пример Нарисуйте цветную кривую бабочки в C# показывает, как рисовать красочную кривую бабочки. Не упоминая об этом, я использовал двойную буферизацию в эт...
28 12 2020 14:59:41
Если класс сериализуем, то вы можете создать глубокий клон объекта из этого класса, сериализируя его и десериализируя его. В этом примере используется след...
27 12 2020 19:53:19
В этом примере показано, как вы можете позволить пользователю перетащить изображение на PictureBox. Свойству PictureBox Изображение задано фоновое изображе...
26 12 2020 0:27:41
NullPointerException - исключение RuntimeException. Исключения в Runtime являются критическими и не могут быть пойманы во время компиляции. Они приводят к...
25 12 2020 16:12:35
Пример Нарисовать повернуть текст в C# показывает, как рисовать повернуть текст. К сожалению, этот метод требует, чтобы вы использовали код во время выполн...
24 12 2020 3:37:43
NetBeans – бесплатно распространяемая среда разработки для языков C, C++, Java, PHP, Javascript, Python и прочих. Этот проект разрабатывается независимой г...
23 12 2020 9:58:52
Эта часть позволит вам изучить Javascript с нуля или упорядочить и дополнить существующие знания. Мы будем использовать браузер в качестве окружения, но ос...
22 12 2020 15:20:40
В улучшении бинарного контраста вы меняете каждый пиксель изображения на черный или белый, в зависимости от того, светлее ли он, чем какое-либо значение от...
21 12 2020 1:29:47
Предыдущие два сообщения показывают два способа перечисления узлов TreeView, которые проверяются. Идея состоит в том, чтобы рекурсивно сканировать узлы дер...
20 12 2020 13:53:41
Python имеет пять стандартных типов данных. Иногда необходимо преобразовывать значения из одного типа в другой. Python определяет функции преобразования ти...
19 12 2020 4:49:41
Parse error: syntax error, unexpected ',' in /home/users/9/9165884745/domains/flash-mx.ru/lessons/926.php on line 69