![]() |
|
![]() ![]() ![]() |
|
rudolfninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: нет Всего: 6 |
Приветсвтую.
Нужно реализовать алгоритм сжатия JPEG. Сам еще не пробовал, искал в интеренете готовые решения, но не смог найти. Может есть у кого-нибудь реализация этого алгоритма на каком-нибудь языке высокого уровня? Или, на крайний случай, может есть какие известные сторонние библиотеки с реализацией данного алгоритма? Нужно иметь возможноть задавать коэффициент качества. Заранее спасибо. |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
rudolfninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: нет Всего: 6 |
Спасибо.
=) Видимо, да, нужно прокачать скилл =) Просто тут очень много файлов и непонятно где смотреть сам алгоритм. Сейчас буду смотреть. Может, все-таки, у кого нибудь есть более простая реализация? Это сообщение отредактировал(а) rudolfninja - 17.3.2015, 11:45 |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: нет Всего: 459 |
Совсем просто не выйдет. JPEG файл состоит из многих фрагментов. Их нужно уметь читать все иначе просто не добраться до сжатого битмапа.
Я бы использовать open source проект libjpeg . Ему уже сто лет в обед. Написан на С. Переносить логику на язык более высокого уровня не логично с точки зрения производительности и переносимости. Формат JPEG был разработан из расчета что файл может эффективно создаваться даже на 16ти битном процессоре. Но думаю, что эта ссылка вам больше поможет чем стандарт. http://www.mediascan.by/index.files/jpeg-ref.pdf -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
rudolfninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: нет Всего: 6 |
Alexeis, спасибо. pdf эту видел.
По поводу библиотеки, может есть пример как с ее помощью bmp перегнать в jpeg с заданным коэффициентом качества? |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: нет Всего: 459 |
Все зависит от того, каким компилятором владеете.
Для меня самым простым способом был бы такой http://delphiworld.narod.ru/base/jpeg_work.html Delphi компилятор использует ту же библиотеку libjpeg, просто С файлы скомпилированы C++ Builder ом в obj, а obj файлы собираются уже компилятором делфи. Ну и плюс обертка объектная вокруг всего этого добра. Кто владеет QT наверняка предложит вам не менее простой способ ее использования. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
rudolfninja, А что делать -то надо? Я что-то задумался, а зачем нормальному человеку могут понадобится исходники jpeg? В любой системе программирования работе с картинками выделен свой солидный кусок. Для решения любой прикладной задачи стандартных возможностей вполне может хватить, imho.
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
rudolfninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: нет Всего: 6 |
ksnk, вообще задумка такова, что с помощью различных алгоритмов стеганографии я прячу в bmp сообщение, затем сжимаю картинку в jpeg с различными коэффициентами качества, достаю из полученной jpeg закодированное сообщение и побитово сравниваю его с оригиналом.
То есть мне не надо исходники, мне надо нетяжелая(имеется в виду, не большая по объему) библиотека, которая сожмет bmp в jpeg с определенным коэффициентом качества. Ну и желательно, чтоб библиотека была компиляторонезависимой. |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: нет Всего: 459 |
Тогда качаем сам libjpeg http://sourceforge.net/projects/libjpeg/files/libjpeg/6b/ Распаковываем в папку. Находим jconfig.vc (для Visual Studio) переименовываем в jconfig.h открываем командную строку переходим в командной строке сначала в C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin Ну или в папку той версии что есть у вас. Запускаем vcvars32.bat - он установит правильно переменные окружения. Теперь в командной строке переходим на диск куда распаковали libjpeg и пишем строчку nmake /f makefile.vc Через пару секунд получите файл статической библиотеки libjpeg.lib Пример кодирования, декодирования есть там же в example.c . Зависимостей никаких подключили либу и пользуемся. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
rudolfninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: нет Всего: 6 |
Самому собрать либу не получилось, вылетала ошибка NMAKE: fatal error U1073: don't know how to make 'jcapimin.c'
Скачал либу с нета. Подключил ее к проекту через свойства Property-Linker-Input-Additional Dependencies. Но получается, что мне сейчас надо скопировать .h файлы, чтоб я мог использовать функции и типы, объявленные в либке? |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: нет Всего: 459 |
Я бы скопировал сначала jpeglib.h, а затем если он что-то еще будет искать докладывал по мере запросов. Скорее всего нужно будет два три хидера типа jconfig.h, jmorecfg.h, jerror.h . Вряд ли все. На счет компиляции странно что не сработало, может что-то с переменными окружения? Файл vcvars32.bat запускали из той же командной строки или просто двойным кликом? По идее vcvars32.bat конфигурирует переменные окружения только для текущего приложения (cmd.exe). Добавлено через 4 минуты и 48 секунд Еще попробуйте запустить командную строку самой среды Пуск -> Все программы -> Visual Studio 2005 -> Visual Studio tools -> Visual Studio 2005 command Prompt и в ней исполнить vcvars32.bat -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
rudolfninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: нет Всего: 6 |
Пробовал, не получилось. Такая же ошибка валится.
А с той статической либой что я скачал валятся unresolved external symbol на функции из либы. Запускаю Сommand Prompt, пишу там C:\>"Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" В командную строку выводится следующее: \Microsoft was unexpected at this time. Ради интереса, попробуйте, пожалуйста, у себя собрать Получилось! Это сообщение отредактировал(а) rudolfninja - 18.3.2015, 18:10 |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: нет Всего: 459 |
Так я ж так и сделал. Сначала собрал, потом написал. Просто я собирал на 2005й, возможно по сравнению с 2012й есть еще особенности. unresolved external symbol могут быть как раз из-за того что либа скомпилирована была в другой среде. В этом случае лучше уж Dll использовать (если чужую брать). Когда компилишь сам, можешь указать нужный вариант CRT Debug/Release/MultiThread/SingleThread . А что именно получилось? Собрать или подключить? Или и то и другое? -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
rudolfninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: нет Всего: 6 |
Уже и собрал и подключил и даже сжал свою bmp в несколько jpg с различными коэффициентами качества =)
![]() Вообще, если судить по содержанию темы, ее названию и разделу, в котором она создана, то получился сплошной оффтоп =) Alexeis, ksnk, спасибо вам большое! Кинул бы каждому по плюсику в карму, но не хватает количества постов. Перевожу тему в решенное состояние. Это сообщение отредактировал(а) rudolfninja - 18.3.2015, 18:58 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |