Открыть или манипулировать сжатым Tiff Jpeg2000 - PullRequest
0 голосов
/ 30 января 2019

Я создаю приложение для обработки одностраничных tif(f) файлов и пакетирования их в pdf с использованием PDFSharp .Проблемы с определенными файлами, где они будут открываться или обрабатываться, но только как черная страница.Кажется, ограничивается оттенками серого или цветными изображениями.Я знаю, что они не повреждены, потому что они открываются в стороннем приложении ISV.Однако они, похоже, сжаты с использованием довольно непонятного алгоритма.До сих пор я пытался - и не смог - открыть их с помощью:

  1. Каждый встроенный в Windows просмотра изображений
  2. IfranViewer
  3. ImageMagick
  4. Faststone
  5. PhotoShop

Когда я запускаю команду ImageMagick Identify, я получаю следующее:

определить: сжатие не поддерживается

Единственное, что мне удалось найти, пока я их открою, это Brava! Desktop .Это, однако, является коммерческим приложением и, похоже, не принимает команд для автоматизации этого процесса конвертации - что мне и нужно

Кто-нибудь знает, в каком это формате или как мне правильно отрендерить его в .net?

Редактировать

Дополнительная информация EXIFTOOL exiftool.exe Black.tif -v 5 Спасибо, fmw42за то, что я обратил на это внимание!:

| 0)  SubfileType = 2
| 1)  ImageWidth = 2534
| 2)  ImageHeight = 3323
| 3)  BitsPerSample = 8 8 8
| 4)  Compression = 34712
| 5)  PhotometricInterpretation = 2
| 6)  StripOffsets = 228
| 7)  Orientation = 1
| 8)  SamplesPerPixel = 3
| 9)  RowsPerStrip = 3323
| 10) StripByteCounts = 11742587
| 11) XResolution = 300 (300/1)
| 12) YResolution = 300 (300/1)
| 13) PlanarConfiguration = 1
| 14) ResolutionUnit = 2
| 15) PageNumber = 0 0

1 Ответ

0 голосов
/ 31 января 2019

Try (с использованием Python):

  1. tifffile , с установленным imagecodecs , может считывать изображение в массив numpy, который можетзатем обрабатывается далее:

    from matplotlib import pyplot
    import tifffile
    im = tifffile.imread('black.tif')
    pyplot.imshow(im)
    pyplot.show()
    
  2. Открыть файл в двоичном режиме, выполнить поиск в StripOffsets, прочитать байты StripByteCounts и записать буфер в файл .jp2, который можно открыть с помощьюIrfanView и т. Д .:

    with open('black.tif', 'rb') as fh:
        fh.seek(228)
        im = fh.read(11742587)
    with open('black.jp2', 'wb') as fh:
        fh.write(im)
    
...