Archive for 10月, 2006

10月 31st, 2006

EPSぜ BoundingBox

Posted in Web/AP全舜 by tatenaga

 EPSに代表されるPostScriptファイルでは、ファイル先頭のヘッダ領域ぜ “BoundingBox”と呼ばれる座木 情報を保持している。これを利用しぜ ImageMagick等のライブラリを使用しなぜ ても画? ファイルサイズを圏 得することが可能となる。

 方? としては、文字列「%%BoundingBox:」を検索し、後に? ぜ “左? X座木 左? Y座木 右? X座木 右? Y座木 “の値を圏 得して? き算すれば良い。ただし、単位はポイントとなっているので、必要に? じてミリメートル、ピクセル? の単位に? 朏 する必要がある。また、ヘッダ領域の情報に「%% BoundingBox: (atend)」と? 義されている場合、画? データ最下部にフッタ領域に座標情報が付加されているので注? が必要となる。

st_fp = fopen( chp_file, "rb" );

for ( ;; ){
	chp_fgets = fgets( cha_line, sizeof(cha_line), st_fp);

	// fgetsエラボ /ファイル? 了
	if (chp_fgets == NULL){
		break;
	}
	// 空? を無?
	if ( strlen(cha_line) == 0 ){
	continue;
	}
	// コメント以? は無?
	if ( cha_line[0] != '%' ){
		continue;
	}
	// 「BoundingBox: (atend)」 の場合は無?
	if ( strstr( cha_line, "atend" ) != NULL ){
		continue;
	}
	// BoundingBoxなしは無?
	chp_str = strstr( cha_line, "%%BoundingBox:" );
	if ( chp_str == NULL ){
		continue;
	} else {
		// BoundingBox該?
		in_cnt = sscanf( chp_str, "%s %d %d %d %d", cha_box, &in_x1, &in_y1, &in_x2, &in_y2 );
		if ( in_cnt != 5 ){
			continue;
		}
		break;
	}
}

in_ret = fclose( st_fp );

1pt=1/72inch
1inch=25.4mm
1pt=0.352777778mm