2

c で tiff ファイルのヘッダーを読み取るにはどうすればよいですか?

実はTIFFタグのImageWidthとTIFFタグのImageLengthを知りたいです。

この属性にアクセスするにはどうすればよいですか?

http://www.awaresystems.be/imaging/tiff/tifftags/imagewidth.html http://www.awaresystems.be/imaging/tiff/tifftags/imagelength.html

このコードのC翻訳は私を助けることができます:

https://stackoverflow.com/a/9071933/2079158

私はよくわかりませんが、
次のようなことを試しました:

#include "stdio.h"
#include "stdlib.h"

main()
{
FILE* f = fopen("tifo.tif", "rb");
unsigned char info[500];
fread(info, sizeof(unsigned char), 500, f); 

long int width = *(long int*)&info[256];
short int height = *(short int*)&info[257];

printf("width : %d \n", width);
printf("height : %d \n", height);

fclose(f);
}

TIFFファイルに対して何ができますか??

4

3 に答える 3

1

私はこのコードで問題を解決します:

#include <stdio.h>
#include "tiffio.h"
#include <string.h>
#include <dirent.h>     
int main(void)
{
DIR *dp;
struct dirent *ep;
uint32 w, h;
float xdpi,ydpi;

dp = opendir ("./");
char file_name[30];
char last[30];
if (dp != NULL)
{
    while (ep = readdir (dp))
    {
        if( ( strstr(ep->d_name, ".tif") != NULL ) || ( strstr(ep->d_name, ".TIF") != NULL ) )
        {
            TIFF* tif = TIFFOpen(ep->d_name, "r");
            TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w);
            TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h);
            TIFFGetField(tif, TIFFTAG_XRESOLUTION, &xdpi);
            TIFFGetField(tif, TIFFTAG_YRESOLUTION, &ydpi);

            printf("%s --> %d x %d | %.f - %.f \n",ep->d_name, w, h, xdpi,ydpi);

            strncpy ( file_name, ep->d_name, ep->d_namlen-4 );
            file_name[ep->d_namlen-4]='\0';

            sprintf(last,"%s (%.f x %.f).tif", file_name, (float) ((w/xdpi)*2.54) , (float) ((h/ydpi)*2.54) );
            printf("      |__ %s\n\n",last);
            TIFFClose(tif);

            rename(ep->d_name, last);
        }
    }
    (void) closedir (dp);
}
else
    perror ("Directory can not open!");

printf("Succesfully finished!");
getchar();

return 0;
}
于 2013-06-11T08:30:52.150 に答える
1

あなたのコードは、オフセットのあるヘッダーを読み取ろうとしています。それはTIFFの仕組みではありません。これには、「イメージ ファイル ディレクトリ」(IFD) の開始位置を識別する短いヘッダーがあります。IFD には 1 つまたは複数のエントリが含まれており、各エントリにはその内容、フィールド タイプ、カウント、および値自体へのオフセットを説明する TAG があります。

画像のサイズを確認するには、値がそれぞれ 256 と 257 のタグの関連する IFD をスキャンする必要があります。

これについては、こちらで詳しく説明しています: http://partners.adobe.com/public/developer/tiff/index.html#spec

TIFF 互換の画像ライブラリを調べることをお勧めします. TIFF の完全なリーダー。

于 2013-06-07T09:14:15.243 に答える
0

「タグ ID」(256 と 257) をインデックスと誤解しているため、機能しません。

ファイル内で必要な ID を検索し、各 ID に関連付けられている値を抽出する必要があります。

TIFF には、すべての情報を含む「ヘッダー」がないことに注意してください。必要なものを見つけるには、ファイルをシークする必要があります。

于 2013-06-07T09:11:24.953 に答える