Конференция "Media" » Траблы при получении уровня компресии у JPG-файлов
 
  • leonidus © (13.07.07 22:44) [0]
    Делаю так:
     
    jpg:=TJpegImage.Create;
    jpg.LoadFromFile(path);
    jpg_compress:=jpg.CompressionQuality;

    так вот какой бы я файл не открыл jpg_compres всегда равен 90, очевидно что это не так, а мне нужно знать точное значение компрессии т.к. я загружаю картинку, обрабатываю ее и сохраняю обратно на диск и при этом важно сохранить с той-же компрессией, но для этого нужно знать исходную компрессию...
  • Sambrook © (14.07.07 13:43) [1]

    > так вот какой бы я файл не открыл jpg_compres всегда равен
    > 90, очевидно что это не так, а мне нужно знать точное значение
    > компрессии

    На этот вопрос есть ответ в справке:
    This property is not used for reading in files.
    Причина простая - формат JPEG не предусматривает хранение данного параметра.


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

    Можете провести простой эксперимент - загрузить jpeg, сохраненный, например, с 70% компресиией и записать его со 100%. Потом сравните размеры двух файлов и сделайте выводы.
  • homm © (15.07.07 15:16) [2]
    Сжатие — чисто субъективный параметр, измеряемый в попугаях, у любой программы он может быть свой.


    > и при этом важно сохранить с той-же компрессией

    Этого не получится никогда. Формат jpg — формат сжатия с потерей качества, при любом следующем пересохранении это качество неизбежно теряется и теряется. Чем меньше пересохранений, тем лучше сохраняется исходное изображение.

    Выберете для своих целей другой формат, например PNG.
  • Efir © (15.07.07 15:34) [3]

    > Этого не получится никогда.


    Не факт, да jpg с потерей качества сжимает, но насколько мне известно при опред. кратности размеров исходного изображения (вроде 16) ухудшения качества после трансформации и сохранения не происходит.
  • homm © (15.07.07 15:55) [4]
    > кратности размеров исходного изображения (вроде 16) ухудшения
    > качества после трансформации и сохранения не происходит.

    8, не 16.

    1) Сделал скртншот форума дельфимастер
    2) Сохранил в фотошопе для веба с качеством 30 попугаев.
    3) Открыл, сохранение.
    4) Снова сохранил с теми-же опциями, под други мененм.
    5) Открыл второй файл и вставил его как слой в первый.
    6) Выбрал режим наложения «разница» (у меня русский фотошоп :)), нашел пиксели не чисто черного цвета
    7) Сделал вывод, что прав я :)
  • homm © (15.07.07 16:46) [5]
    > други мененм

    Вот эта мешанина символов переводится как «другим именем» :)
  • Sapersky (16.07.07 13:34) [6]
    при опред. кратности размеров исходного изображения (вроде 16) ухудшения качества после трансформации и сохранения не происходит.

    Это называется Jpeg lossless transform. Трансформации не произвольные, а только гор./.верт. отражение, поворот на 90/180/270 град., вырезание фрагмента c кратностью размеров 8 или 16 (зависит от типа сжатия jpeg). Потери качества не происходит, потому что операции выполняются над сжатыми данными (которые представляют собой фрагменты 8*8 или 16*8 пикселей) без перепаковки.
    Если нужна pas-реализация - ищите библиотеку pasjpeg, но там вырезание с глюком... где-то у меня была исправленная версия...
 
Конференция "Media" » Траблы при получении уровня компресии у JPG-файлов
Есть новые Нет новых   [134431   +10][b:0][p:0]