Как я могу узнать, имеет ли изображение TIFF формат CCITT T.6 (Группа 4)? - PullRequest
9 голосов
/ 10 октября 2009

Как узнать, что изображение в формате TIFF имеет формат CCITT T.6 (группа 4)?

Ответы [ 4 ]

13 голосов
/ 13 октября 2009

Вы можете использовать этот (C #) пример кода. Возвращает значение, указывающее тип сжатия:

1: без сжатия
2: CCITT Group 3
3: Факсимильная совместимость CCITT Group 3
4: CCITT Group 4 (T.6)
5: LZW

public static int GetCompressionType(Image image)
{
    int compressionTagIndex = Array.IndexOf(image.PropertyIdList, 0x103);
    PropertyItem compressionTag = image.PropertyItems[compressionTagIndex];
    return BitConverter.ToInt16(compressionTag.Value, 0);
}
8 голосов
/ 10 октября 2009

Вы можете проверить эти ссылки

В теге 259 (hex 0x0103) хранится информация о методе сжатия.

--- Сжатие Tag = 259 (103) Тип = слово N = 1 По умолчанию = 1.

1 = Без сжатия, но упаковывать данные в байты как можно плотнее, без неиспользованные биты за исключением конца строки. Байты хранятся в виде массива байтов, для BitsPerSample <= 8, слово if BitsPerSample> 8 и <= 16, и dword if BitsPerSample> 16 и <= 32. Порядок байтов данных> 8 бит должен соответствовать указанному в заголовке файла TIFF (байты 0 и 1). Строки должны начинаться с байтовых границ.

2 = CCITT Group 3 1-мерное модифицированное кодирование длин серий Хаффмана. Смотрите ALGRTHMS.txt BitsPerSample должно быть 1, так как этот тип сжатия определяется только для двухуровневых изображений (например, изображений факса ...)

3 = Факсимильная совместимость CCITT Group 3, в точности как указано в «Стандартизация факсимильного аппарата группы 3 для документов «Рекомендация T.4, том VII, раздел VII.3, Терминальное оборудование и протоколы для телематических услуг, Международный телеграфно-телефонный консультативный комитет (CCITT), Женева, 1985, стр. С 16 по 31. Каждая полоса должна начать на границе байта. (Но помните, что изображение может быть одиночная полоса.) Ряды, которые не являются первым рядом полосы, не требуется начинать с границы байта. Данные хранятся как байты, а не слова - обращение байтов не допускается. Увидеть Поле Group3Options для параметров группы 3, таких как 1D или 2D-кодирование.

4 = факсимильная совместимость CCITT Group 4 , точно так, как указано в «Схемы факсимильного кодирования и функции управления кодированием для группы 4 Факсимильный аппарат, "Рекомендация T.6, Том VII, Fascicle VII.3, Терминальное оборудование и протоколы для телематических услуг, Международный телеграфно-телефонный консультативный комитет (CCITT), Женева, 1985, стр. С 40 по 48. Каждая полоса должна начать на границе байта. Строки, которые не являются первым рядом полоса не обязана начинаться на границе байта. Данные хранится как байты, а не слова. Смотрите поле Group4Options для Группа 4 варианта.

5 = LZW-сжатие, для оттенков серого, картированных цветных и полноцветных изображений.

4 голосов
/ 10 октября 2009

Вы можете запустить identify -verbose из набора ImageMagick на изображении. Ищите «Сжатие: Группа 4» в выходных данных.

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

UPDATE:

Итак, я скачал библиотеку libtiff по ссылке, которую я упоминал ранее, и из того, что я видел, вы можете сделать следующее: (не проверено)

int isTIFF_T6(const char* filename)
{
TIFF* tif= TIFFOpen(filename,"r");
TIFFDirectory *td = &tif->tif_dir;
if(td->td_compression == COMPRESSION_CCITTFAX4) return 1;
return 0;
}

Назад: Эта страница содержит много информации об этом формате и ссылки на некоторый код в C:

Вот выдержка:

Следующая бумага покрывает T.4, T.6 и JBIG:

«Обзор стандартов на электронные визуализация для факсимильных систем "в Журнал электронной визуализации, Vol. 1, № 1, с. 5-21, январь 1992 г.

Исходный код можно получить как часть инструментарий TIFF - изображение TIFF методы сжатия для двоичного изображения включают CCITT T.4 и T.6:

FTP: //ftp.sgi.com/graphics/tiff/tiff-v3.4beta035-tar.gz Контакт: sam@engr.sgi.com

Подробнее: http://www.faqs.org/faqs/compression-faq/part1/section-16.html#ixzz0TYLGKnHI

...