diff --git a/README.md b/README.md
index 5ef474deabf1f65af5cbf197c3053fcca6f448cb..3f8bf9a7310d4fae601e116a6f8fdb0442b7d2ab 100644
--- a/README.md
+++ b/README.md
@@ -11,6 +11,7 @@ Options: -[le:o:s:a:hV]
   -o, --out <arg>       Output image name
   -s, --hash <arg>      Hash of image
   -a, --attribute <arg> Get attribute of FIT
+  -z  --size <arg>      Size of embedded image in FIT
   -h, --help            Print this help and exit
   -V, --version         Print version and exit
 ```
diff --git a/fdtextract.c b/fdtextract.c
index fac6c277797827c3a7c2d3289e957f606298bb67..0e5c005d6b427047b39a6195d9b0d8d111757161 100644
--- a/fdtextract.c
+++ b/fdtextract.c
@@ -45,7 +45,7 @@
 
 /* Usage related data. */
 static const char usage_synopsis[] = "fdtextract [options] <file>";
-static const char usage_short_opts[] = "le:o:s:a:i:" USAGE_COMMON_SHORT_OPTS;
+static const char usage_short_opts[] = "le:o:s:a:i:z:" USAGE_COMMON_SHORT_OPTS;
 static struct option const usage_long_opts[] = {
 	{"list",	no_argument, NULL, 'l'},
 	{"extract",	a_argument, NULL, 'e'},
@@ -53,6 +53,7 @@ static struct option const usage_long_opts[] = {
 	{"hash",	a_argument, NULL, 's'},
 	{"attribute",	a_argument, NULL, 'a'},
 	{"image",	a_argument, NULL, 'i'},
+	{"size",	a_argument, NULL, 'z'},
 	USAGE_COMMON_LONG_OPTS
 };
 static const char * const usage_opts_help[] = {
@@ -62,6 +63,7 @@ static const char * const usage_opts_help[] = {
 	"SHA256 hash of image",
 	"Get attribute of FIT",
 	"Use image in FIT to get attribute",
+	"Size of embedded image in FIT",
 	USAGE_COMMON_OPTS_HELP
 };
 
@@ -91,6 +93,38 @@ static int list_images(char *buf)
 	return 0;
 }
 
+/* Print the size of an image embedded in the FIT. */
+static int get_size(char *buf, char *name)
+{
+	char path[MAX_PATH_LEN] = {0};
+	int noffset, data_size;
+	const fdt32_t *val;
+
+	snprintf(path, MAX_PATH_LEN, "/images/%s", name);
+	noffset = fdt_path_offset(buf, path);
+	if (noffset < 0) {
+		fprintf(stderr, "Error: could not find image: %s.\n", name);
+		return -1;
+	}
+
+	val = fdt_getprop(buf, noffset, "data-size", NULL);
+	if (val) {
+		data_size = fdt32_to_cpu(*val);
+	} else {
+		fdt_getprop(buf, noffset, "data", &data_size);
+	}
+
+	if (data_size < 0) {
+		fprintf(stderr, "Error: Could not get image data size: %s.\n", name);
+		return -1;
+	}
+
+	printf("%d\n", data_size);
+
+	return 0;
+}
+
+
 static ssize_t copy_data(int out_fd, int in_fd, ssize_t size)
 {
 	ssize_t left = size;
@@ -311,7 +345,7 @@ int main(int argc, char *argv[])
 	int opt, ret = 0;
 	char *buf, *name = NULL, *out = NULL, *imagename = NULL;
 	bool list = false, extract = false,
-		hash = false, attribute = false;
+		hash = false, attribute = false, size = false;
 	int in_fd, out_fd = STDOUT_FILENO;
 
 	while ((opt = util_getopt_long()) != EOF) {
@@ -325,6 +359,10 @@ int main(int argc, char *argv[])
 		case 'l':
 			list = true;
 			break;
+		case 'z':
+			size = true;
+			name = optarg;
+			break;
 		case 'e':
 			extract = true;
 			name = optarg;
@@ -379,6 +417,9 @@ int main(int argc, char *argv[])
 	if (list)
 		ret = list_images(buf);
 
+	if (size)
+		ret = get_size(buf, name);
+
 	if (hash)
 		ret = get_hash(buf, name);
 
@@ -395,5 +436,5 @@ int main(int argc, char *argv[])
 	free(buf);
 	close(in_fd);
 
-	return ret;
+	return ret ? 1 : 0;
 }