【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

画像サイズを取得

【追記】C#移植版 ⇒ id:n7shi:20110204

C言語で外部ライブラリ(libjpeg等)を使わずにJPEGの画像サイズを取得するプログラムを書いてみました。パブリックドメインに置いておきます。

#include <stdio.h>
typedef struct { int w, h; } Size;

Size GetJpegSize(const char *jpg)
{
	Size ret = { 0, 0 };
	unsigned char buf[8];
	FILE *f = fopen(jpg, "rb");
	while (f && fread(buf, 1, 2, f) == 2 && buf[0] == 0xff)
	{
		if (buf[1] == 0xc0 && fread(buf, 1, 7, f) == 7)
		{
			ret.h = buf[3] * 256 + buf[4];
			ret.w = buf[5] * 256 + buf[6];
		}
		else if (buf[1] == 0xd8 || (fread(buf, 1, 2, f) == 2 &&
			!fseek(f, buf[0] * 256 + buf[1] - 2, SEEK_CUR))) continue;
		break;
	}
	if (f) fclose(f);
	return ret;
}

int main(int argc, char *argv[])
{
	int i;
	for (i = 1; i < argc; i++)
	{
		Size sz = GetJpegSize(argv[i]);
		printf("%s: %d, %d\n", argv[i], sz.w, sz.h);
	}
	return 0;
}