GD imagejpeg () сжатие? - PullRequest
       15

GD imagejpeg () сжатие?

4 голосов
/ 03 июля 2011

Я работаю над проектом, где я редактирую пиксели jpg в PHP, используя библиотеку GD. Это очень важно и ключ к моему проекту в том, что вывод PHP сохраняет значения пикселей , которые я установил (кашель-стеганография-кашель).

Это первая попытка манипулирования изображениями в PHP. Раньше у меня не было проблем в моих реализациях Java, поэтому я был глуп, чтобы не исследовать jpeg качество сжатия GD, прежде чем продолжить.

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

Мои вопросы:

  1. Единственная проблема, которую я вижу, это сжатие imagejpeg(). Могу ли я быть прав?

  2. Существуют ли библиотеки, которые обеспечивают сжатие, которое мне нужно? (Сохранить значения пикселей, которые я изменил)

Ответы [ 3 ]

3 голосов
/ 03 июля 2011

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

  bool imagejpeg ( resource $image [, string $filename [, int $quality ]] )

Проверьте руководство дляБолее подробная информация.

Также попробуйте использовать imagecopyresampled .(Я думаю, что вы использовали бы imagecopyresized где-то в вашем коде. Используйте imagecopyresampled вместо него.)

РЕДАКТИРОВАТЬ

Тогда я думаю, что вы должны попробовать ImageMagick (или GD2).Это дает лучшее качество, чем GD.Проверьте это

2 голосов
/ 03 июля 2011

Формат файла JPEG не очень подходит для стеганографии, если вы делаете стеганографию пиксель за пикселем.

JPEG использует изображениесжатие - даже с максимальным качеством - которое уничтожит информацию об уровне битов на каждом пикселе.Сжатие в формате JPEG ( сжатие с потерями ) сделано для того, чтобы человеческий глаз / мозг сохраняли изображение, но не биты изображения в файле.

Вам нужно использовать формат изображения, способный сохранять пиксели - как вы уже написали.Скорее всего, такой формат будет BMP со сжатием RLE или формат изображения TIFF со сжатием ZIP или RLE ,Это называется сжатие данных без потерь .

0 голосов
/ 10 октября 2013

Используйте imagepng() вместо функции imagejpeg() и установите сжатие на 0:

bool imagepng ( resource $image [, string $filename [, int $quality [, int $filters ]]] )

См .: http://php.net/manual/en/function.imagepng.php

...