Путь разработчика    

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

eda2480d

Пример Сжатие файлов 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:

Основа для карточной игры в C#

Цель этого примера - предоставить некоторую поддержку для создания карточной игры. В нем показано, как сделать класс для представления карт и рассказать, к...

24 01 2021 6:16:58

Длина строки в C#

Свойство Length в String Class возвращает общее количество символов в String. Синтаксис: int string.length Возвращает: Целое число: количество символов в у...

23 01 2021 0:48:53

Итерации над элементами массивов и списков в C#

Вы можете использовать цикл foreach для перебора элементов массивов, списков, коллекций и других объектов с методом GetEnumerator. Этот цикл часто больше п...

22 01 2021 19:33:57

Удалите нецифровые или не-буквы из строки в C#

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

21 01 2021 3:30:59

Всплывающие окна в JavaScript

Всплывающие окна являются наиболее полезным способом отображения предупреждения или любой другой важной информации для посетителей сайта. JavaScript имеет...

20 01 2021 0:35:45

Сделать общий класс очереди приоритетов в C#

В этом примере показано, как создать общий класс очереди приоритетов. Общий класс похож на обычный класс, за исключением того, что он может принимать один...

19 01 2021 17:49:41

Сделать созданный владельцем ListBox в C#

В этом примере показано, как вы можете сделать созданный владельцем ListBox. Обычно ListBox отображает текстовое представление своих объектов, но вы можете...

18 01 2021 0:15:39

Как открыть файл PDF в C#

Во время разработки я добавил в форму элемент WebBrowser. Когда программа запускается, он использует следующий код для открытия PDF-файла в элементе управл...

17 01 2021 21:51:56

Изменение разрешения изображения в C#

В этом примере показано, как изменить разрешение изображения. Это еще один пример, который я создал для написания книг. Обычно компьютеры работают с изобра...

16 01 2021 12:28:48

Воспроизвести мелодии с определенными частотами в C#

В этом примере показано, как вы можете воспроизводить тоны с заданной частотой и продолжительностью. Когда пользователь нажимает кнопку « Воспроизведение»,...

15 01 2021 3:27:57

Изучаем Python, 4-е издание (Марк Лутц)

Такие известные компании, как Google и Intel, Cisco и Hewlett-Packard, используют язык Python, выбрав его за гибкость, простоту использования и обеспечивае...

14 01 2021 22:43:14

Как преобразовать TimeStamp в Date в Java?

API JDBC использует отдельный класс Date, Time и Timestamp для подтверждения типа данных DATE, TIME и DATETIME из базы данных, но большая часть объектно-ор...

13 01 2021 18:36:20

Как определить ОС на клиентском компьютере в JavaScript?

Свойство Window.navigator только для чтения возвращает ссылку на объект Navigator, который может быть запрошен для получения информации о приложении, выпол...

12 01 2021 15:20:19

Сравните изображения, чтобы найти различия в C#

В этом примере вы можете сравнивать изображения, чтобы убедиться, что они одинаковые. Когда вы выбираете два изображения для сравнения и нажмите кнопку Go,...

11 01 2021 6:42:45

Выберите N случайных элементов из массива в C#

В этом примере создается общий метод расширения, который позволяет вам легко выбирать N случайных объектов из массива. Например, он позволяет выбрать 5 эле...

10 01 2021 16:59:34

Добавить варианты ComboBox во время выполнения в C#

В этом примере вы можете добавить ComboBox варианты, когда пользователь выбирает их во время выполнения. Чтобы отслеживать выбор для будущего использования...

09 01 2021 5:39:29

Как найти файл и заменить в нем текст C#

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

08 01 2021 1:20:12

Понимание переходных переменных в Java

Сериализация в Java - это механизм записи состояния объекта в поток байтов, а десериализация - это процесс преобразования потока байтов обратно в копию исх...

07 01 2021 7:46:25

Многопоточное программирование сокетов в Java?

Все разработчики знакомы с написанием последовательных программ, каждая последовательная программа имеет начало, последовательность выполнения и конец. Пот...

06 01 2021 21:27:43

Как перезагрузить страницу в JavaScript

Поскольку существует много способов сделать это, но следующий способ - перезагрузить один и тот же документ с помощью JavaScript. Свойство Window.location...

05 01 2021 11:46:27

C# Программирование на языке высокого уровня (Т.А. Павловская)

Книга "C# Программирование на языке высокого уровня" представляет собой учебный курс по программированию на языке C#. Автор рассказывает в своей книге об о...

04 01 2021 8:58:58

Анимация изображений в C#

В этом примере показано, как анимировать изображения, загружая их во время выполнения, а затем воспроизводя их по одному. Чтобы упростить поиск изображений...

03 01 2021 21:50:36

Нарисуйте кривую с разной напряженностью в C#

Пример Изменение натяжения гладкой кривой в C# показывает, как использовать метод draw Graphics класса DrawCurve для рисования гладкой кривой, соединяющей...

02 01 2021 12:33:18

Нарисуйте цветное колесо в C#

В программе используется PathGradientBrush, чтобы заполнить цветовое колесо цветовыми образцами. Рисование колеса в основном автоматическое, но прикладывае...

01 01 2021 1:14:49

Добавление метода расширения в класс Graphics в C#

По какой-то странной причине метод DrawRectangle класса Graphics не может принимать параметр RectangleF в качестве параметра. Он может принимать значения R...

31 12 2020 5:44:59

Что такое объектная модель браузера в JavaScript

Модель объекта браузера (BOM) - это соглашение, специфичное для браузера, относящееся ко всем объектам, открываемым веб-браузером. Когда браузер анализируе...

30 12 2020 6:25:54

Увеличьте и прокрутите изображение, нарисованное на C#

Эта программа позволяет масштабировать и прокручивать изображение, нарисованное программой. Программа содержит Panel с AutoScale, установленным в true. Вну...

29 12 2020 2:33:27

Используйте двойную буферизацию, чтобы предотвратить мерцание при рисовании на C#

Пример Нарисуйте цветную кривую бабочки в C# показывает, как рисовать красочную кривую бабочки. Не упоминая об этом, я использовал двойную буферизацию в эт...

28 12 2020 14:59:41

Клонирование сериализуемых объектов в C#

Если класс сериализуем, то вы можете создать глубокий клон объекта из этого класса, сериализируя его и десериализируя его. В этом примере используется след...

27 12 2020 19:53:19

Пусть пользователь перетаскивает изображение с прозрачными пикселями поверх фонового изображения в C#

В этом примере показано, как вы можете позволить пользователю перетащить изображение на PictureBox. Свойству PictureBox Изображение задано фоновое изображе...

26 12 2020 0:27:41

Что такое NullPointerException в Java

NullPointerException - исключение RuntimeException. Исключения в Runtime являются критическими и не могут быть пойманы во время компиляции. Они приводят к...

25 12 2020 16:12:35

Легко нарисовать повернутый текст на форме в C#

Пример Нарисовать повернуть текст в C# показывает, как рисовать повернуть текст. К сожалению, этот метод требует, чтобы вы использовали код во время выполн...

24 12 2020 3:37:43

Среда разработки NetBeans

NetBeans – бесплатно распространяемая среда разработки для языков C, C++, Java, PHP, Javascript, Python и прочих. Этот проект разрабатывается независимой г...

23 12 2020 9:58:52

Язык JavaScript (Илья Контор)

Эта часть позволит вам изучить Javascript с нуля или упорядочить и дополнить существующие знания. Мы будем использовать браузер в качестве окружения, но ос...

22 12 2020 15:20:40

Выполнение бинарного усиления контраста на изображении в C#

В улучшении бинарного контраста вы меняете каждый пиксель изображения на черный или белый, в зависимости от того, светлее ли он, чем какое-либо значение от...

21 12 2020 1:29:47

Перечислить узлы TreeView в C#

Предыдущие два сообщения показывают два способа перечисления узлов TreeView, которые проверяются. Идея состоит в том, чтобы рекурсивно сканировать узлы дер...

20 12 2020 13:53:41

Преобразование типа Python

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