-
Делаю так: jpg:=TJpegImage.Create; jpg.LoadFromFile(path); jpg_compress:=jpg.CompressionQuality;
так вот какой бы я файл не открыл jpg_compres всегда равен 90, очевидно что это не так, а мне нужно знать точное значение компрессии т.к. я загружаю картинку, обрабатываю ее и сохраняю обратно на диск и при этом важно сохранить с той-же компрессией, но для этого нужно знать исходную компрессию...
-
> так вот какой бы я файл не открыл jpg_compres всегда равен > 90, очевидно что это не так, а мне нужно знать точное значение > компрессии
На этот вопрос есть ответ в справке: This property is not used for reading in files. Причина простая - формат JPEG не предусматривает хранение данного параметра.
т.к. я загружаю картинку, обрабатываю ее и сохраняю > обратно на диск и при этом важно сохранить с той-же компрессией, > но для этого нужно знать исходную компрессию...
Можете провести простой эксперимент - загрузить jpeg, сохраненный, например, с 70% компресиией и записать его со 100%. Потом сравните размеры двух файлов и сделайте выводы.
-
Сжатие — чисто субъективный параметр, измеряемый в попугаях, у любой программы он может быть свой.
> и при этом важно сохранить с той-же компрессией
Этого не получится никогда. Формат jpg — формат сжатия с потерей качества, при любом следующем пересохранении это качество неизбежно теряется и теряется. Чем меньше пересохранений, тем лучше сохраняется исходное изображение.
Выберете для своих целей другой формат, например PNG.
-
> Этого не получится никогда.
Не факт, да jpg с потерей качества сжимает, но насколько мне известно при опред. кратности размеров исходного изображения (вроде 16) ухудшения качества после трансформации и сохранения не происходит.
-
> кратности размеров исходного изображения (вроде 16) ухудшения > качества после трансформации и сохранения не происходит.
8, не 16.
1) Сделал скртншот форума дельфимастер 2) Сохранил в фотошопе для веба с качеством 30 попугаев. 3) Открыл, сохранение. 4) Снова сохранил с теми-же опциями, под други мененм. 5) Открыл второй файл и вставил его как слой в первый. 6) Выбрал режим наложения «разница» (у меня русский фотошоп :)), нашел пиксели не чисто черного цвета 7) Сделал вывод, что прав я :)
-
> други мененм
Вот эта мешанина символов переводится как «другим именем» :)
-
при опред. кратности размеров исходного изображения (вроде 16) ухудшения качества после трансформации и сохранения не происходит.
Это называется Jpeg lossless transform. Трансформации не произвольные, а только гор./.верт. отражение, поворот на 90/180/270 град., вырезание фрагмента c кратностью размеров 8 или 16 (зависит от типа сжатия jpeg). Потери качества не происходит, потому что операции выполняются над сжатыми данными (которые представляют собой фрагменты 8*8 или 16*8 пикселей) без перепаковки. Если нужна pas-реализация - ищите библиотеку pasjpeg, но там вырезание с глюком... где-то у меня была исправленная версия...
|