diff --git a/src/shapes/image.class.js b/src/shapes/image.class.js index 689577ea014..c2a5ecf96ee 100644 --- a/src/shapes/image.class.js +++ b/src/shapes/image.class.js @@ -662,8 +662,11 @@ object.filters = filters || []; fabric.Image.prototype._initFilters.call(object, [object.resizeFilter], function(resizeFilters) { object.resizeFilter = resizeFilters[0]; - var image = new fabric.Image(img, object); - callback(image); + fabric.util.enlivenObjects([object.clipPath], function(enlivedProps) { + object.clipPath = enlivedProps[0]; + var image = new fabric.Image(img, object); + callback(image); + }); }); }); }, null, object.crossOrigin); diff --git a/test/unit/image.js b/test/unit/image.js index 72e1695840f..7b12f1864a8 100644 --- a/test/unit/image.js +++ b/test/unit/image.js @@ -382,6 +382,20 @@ }); }); + QUnit.test('fromObject with clipPath', function(assert) { + var done = assert.async(); + // should not throw error when no callback is given + var obj = fabric.util.object.extend(fabric.util.object.clone(REFERENCE_IMG_OBJECT), { + src: IMG_SRC, + clipPath: (new fabric.Rect({ width: 100, height: 100 })).toObject(), + }); + fabric.Image.fromObject(obj, function(instance){ + assert.ok(instance instanceof fabric.Image); + assert.ok(instance.clipPath instanceof fabric.Rect); + done(); + }); + }); + QUnit.test('fromObject does not mutate data', function(assert) { var done = assert.async(); assert.ok(typeof fabric.Image.fromObject === 'function');