Как присоединиться к 2 jpegs вместе без потерь, не декодируя использование Hex-редактора?

Я смешиваю здесь две разные вещи?

Да.

Первый случай касается зависимостей во время выполнения , в то время как второй случай касается зависимостей во время компиляции .

Например, во время выполнения бизнес-уровень может вызывать функции / методы, реализованные на уровне базы данных. Но во время компиляции код бизнес-уровня не упоминает никакого кода на уровне базы данных. Обычно это достигается с помощью полиморфизма.

13
задан Bill the Lizard 25 November 2011 в 01:07
поделиться

6 ответов

Хорошо я разработал, где я шел не так, как надо.

1) данные сканирования изображения сохраняются в байтах, но фактическая важная информация кодируется как строки битов переменной длины. Это означает, что конец данных действительного образа не обязательно падает на границу байта. Когда jpeg кодер должен увеличить число битов для создания границы байта, это просто добавляет ряд 1 с.

2) путем информация о фактическом пикселе хранится, немного слишком сложный (по крайней мере, для меня) для объяснения, но в основном все кодируется в MCU, минимальных единицах кодирования или чем-то. Они варьируются по размеру в зависимости от подвыборки цветности, при этом горизонтальные и вертикальные размеры составляют любые 8 или 16 пикселей. Для каждого MCU существует DC и части AC, которые составляют единственный компонент Яркости, Y, или цветность, Cb и Cr. Проблема состояла в том, что постоянные составляющие тока хранятся как значения относительно соответствующего значения DC предыдущего MCU. Таким образом, когда я добавил новые данные изображения от jpg B, это сохранило свои значения DC относительно 0 (потому что не было никаких предыдущих MCUs), но это должно было принять во внимание заключительные значения DC последнего MCU от jpg A. (надежда, которая имеет смысл).

Решение:

Необходимо сделать начальное декодирование (Хаффман + runlength) данных изображения для обнаружения точно, где данные изображения заканчиваются, и затем разделите запаздывание 1 с. Также необходимо изменить начальные значения DC во втором jpg соответственно. Затем необходимо повторно закодировать соответствующие биты, добавить 1 с для установки к границе байта, и вуаля.

Если Вы хотите добавить в оси X, это немного более сложно. Необходимо перестроить MCUs так, чтобы они просканировали в правильном порядке. Сканирование Jpgs слева направо, затем от начала до конца и затем корректирует значения DC соответственно.

До сих пор я только протестировал это на единственном MCU jpgs, но теоретически он должен работать с большими также.

BTW я только разработал это благодаря владельцу этого превосходного jpg связанного ресурса / блог

3
ответ дан 1 December 2019 в 22:58
поделиться

Это очень выполнимо. Я сделал это на большом количестве мозаик изображения карты Google, чтобы присоединиться к ним и сформировать изображение размера плаката. Существует пакет для Unix под названием Инструменты JPEG для того, чтобы сделать точно это. Программу называют jpegjoin. Чистый источник C, с доступными двоичными файлами Windows. При компиляции это создает приложение командной строки который, когда выполненные соединения два jpeg отображает loselessly среди многих других вещей. Это НЕ распаковывает изображения, просто объединяет сжатые данные вместе и исправляет заголовок соответственно. Я использовал его для слияния 100 изображений для создания 50 полос и затем объединил те полосы снова для создания большого изображения.

Больше информации может быть найдено по http://en.wikipedia.org/wiki/Lossy_compression#Lossless_editing

Исходный код

Исходный код для базовой jpegtran библиотеки может быть найден здесь. Сценарий в качестве примера для имитации jpegjoin здесь.

19
ответ дан 1 December 2019 в 22:58
поделиться

jpeg - как mp3 - обычно стабилен при пересжатии его (использование того же алгоритма).

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

2
ответ дан 1 December 2019 в 22:58
поделиться

Два подхода:

1) декодируйте и исходные изображения JPEG, объедините полученные растровые изображения и закодируйте снова JPEG. Недостаток здесь является повторным сжатием.

2) Удостоверьтесь, что ширина исходного изображения и высота являются кратными числами 16, возможно путем обрезки изображений. Не декодируйте изображения, но вместо этого собирайте целевой JPEG из источника блоки MCU (16 x 16 размеров эльфов, поэтому обрезка).

2
ответ дан 1 December 2019 в 22:58
поделиться

То, к чему Вы пытаетесь, в основном не возможно.
Кодирование файла JPEG несколько сложно и если Вы изменяете содержание пикселей затем, кодирование будет измененным. Вы могли бы закончить с изображением, меньшим или больше, чем сумма двух изображений, которые Вы комбинируете. Единственные операции, которые возможны без потерь, являются, кто поддерживает взаимно-однозначное соответствие с пикселями исходного изображения. это в основном сводится к вращениям на 90 градусов.

-4
ответ дан 1 December 2019 в 22:58
поделиться

Операции JPEG без потерь являются в значительной степени оксюмороном. Можно сделать некоторый обман, как вращение, но это - в значительной степени это.

Я предложил бы, чтобы у Вас были исходные изображения без потерь (TIFF, или PNG приходит на ум), или переоцените свои требования качества изображения – передискретизация JPEG еще раз, учитывая достойные исходные файлы, неразличима подавляющему большинству людей там.

-3
ответ дан 1 December 2019 в 22:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: