2016-02-28 3 views
-1

я попытался реализовать стеганографии со следующими шагами: 1. Преобразованного изображения забуференных изображений 2. Converted буферных изображений в байтах массив 3. внесены изменений в массив байт 4. Преобразованный массив обратно в забуференное изображение 5. сохраненный его как JPG файлПреобразованного массив байт в изображение и обратно в массив байт, значения изменилось

проблема возникла, когда я снова прочитал сохраненный файл, преобразовала его в массив байт и обнаружила, что массив отличается от что я получил после шага 3. (хотя не было большой разницы, так как 6 преобразовывались в 7, 9-8 и т. д.)

Я действительно не знаю, почему это произошло.

+1

Возможный дубликат [Я читаю изображение и меняю его. Но изменения не сохраняются] (http://stackoverflow.com/questions/25562479/i-am-reading-an-image-and-changing-it-but-the-changes-are-not-being-saved) – Reti43

ответ

0

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

Решение должно использовать формат без потерь, например PNG.

0

BufferedImage может быть уже массивом байтов. Если при создании вами BufferedImage вы используете кодировку TYPE_BYTE_GRAY, 3BYTE_BGR или 4BYTE_ABGR, то ваш BufferedImage уже является байтовым массивом. Чтобы получить доступ к массиву байтов, выполните следующие действия: byte[] buffer = ((DataBufferByte)my image.getRaster().getDataBuffer()).getData() ;

И когда вы пишете изображение в формате JPEG, вы сжимаете с потерей изображения. Таким образом, информация, которую вы сохраняете, изменяется и не может быть восстановлена ​​по-прежнему. Вы должны использовать PNG/TIFF/BMP, PNG является наиболее распространенным.

1
  1. Если вы сохраняете данные в формате JPEG, данные RGB преобразуются в YCbCr. Эти два цветовых пространства имеют разные гаммы, поэтому значения зажимаются.

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

  3. JPEG, ДКП может ввести небольшие ошибки (ограничивается +/- 1, если сделано правильно)

  4. Квантование сделает довольно большие изменения в данных. Вы можете избежать изменений на этом шаге, указав все 1s в ваших таблицах квантования.

Независимо от того, что вы делаете, # 1 и # 3 могут вносить изменения в процесс сжатия JPEG.

 Смежные вопросы

  • Нет связанных вопросов^_^