diff --git a/samples/chart-tests.gnumeric b/samples/chart-tests.gnumeric
index ac28bbc..1043e95 100644
Binary files a/samples/chart-tests.gnumeric and b/samples/chart-tests.gnumeric differ
diff --git a/src/sheet-object-image.c b/src/sheet-object-image.c
index 203e644..4be7890 100644
--- a/src/sheet-object-image.c
+++ b/src/sheet-object-image.c
@@ -294,6 +294,7 @@ gnm_soi_write_image (SheetObject const *so, char const *format,
 	gboolean res = FALSE;
 	GdkPixbuf *pixbuf = go_image_get_pixbuf (soi->image);
 
+printf("type=%s format=%s\n",soi->type,format);
 	if (!soi->type || strcmp (format, soi->type) == 0) {
 		if (soi->bytes->len == 0) {
 			gsize length;
@@ -573,8 +574,12 @@ gnm_soi_assign_to_sheet (SheetObject *so, Sheet *sheet)
 	} else if (soi->name) {
 		GODoc *doc = GO_DOC (sheet->workbook);
 		GType type = go_image_type_for_format (soi->type);
-		if (type != 0)
+		if (type != 0) {
 			soi->image = g_object_ref (go_doc_image_fetch (doc, soi->name, type));
+			if (GO_IS_PIXBUF (soi->image))
+				/* we need to ensure that the pixbuf type is set because it used to be missed, see #745297 */
+				g_object_set (soi->image, "image-type", soi->type, NULL);
+		}
 	} else {
 		/* There is nothing we can do */
 	}
@@ -599,6 +604,12 @@ gnm_soi_get_property (GObject     *object,
 		if (soi->bytes->len == 0 && soi->image) {
 			gsize len;
 			gconstpointer data = go_image_get_data (soi->image, &len);
+			if (len == 0 && GO_IS_PIXBUF (soi->image)) {
+				/* for some times, GOPixbuf was saved without a type, just as
+				 * raw data, so we need to ensure we have the correct type */
+				g_object_set (soi->image, "image-type", soi->type, NULL);
+				data = go_image_get_data (soi->image, &len);
+			}
 			g_byte_array_append (soi->bytes, data, len);
 		}
 		g_value_set_boxed (value, soi->bytes);
