2013-11-16 2 views
3

Я использую ниже код, чтобы изменить цвет PNG изображения на холсте динамически,PNG цветное изображение не изменяется в Fabric.js

var selectedObject = canvas.getActiveObject(); 

if ("text" == selectedObject.type) { 
    selectedObject.setFill("#FF0000"); 
    canvas.renderAll(); 
} 
else {  
    selectedObject.filters.push(
    new fabric.Image.filters.Tint({color:"#FF0000", opacity:0.6})); 

    selectedObject.applyFilters(canvas.renderAll.bind(canvas)); 
} 

Где canvas = new fabric.Canvas('c');

* Статические цвета добавляются для тестирования который будет заменен на colorpicker.

Для текста он работает нормально, но для изображения он не работает.

+0

Можно ли изготовить скрипку? –

+0

@Tushar Gupta, пожалуйста, проверьте здесь jsfiddle http://jsfiddle.net/93xje/3/, когда мы выбираем цвет текста, но когда мы выбираем изображение без эффекта, я хочу изменить цвет изображения png, а также –

ответ

4

Вы не можете использовать фильтры изображения для изображений crossOrigin. Если вы посмотрите на консоль разработчика, вы увидите следующую ошибку безопасности: «Uncaught SecurityError: не удалось выполнить« getImageData »в« CanvasRenderingContext2D »: холст был испорчен данными перекрестного происхождения».

Пожалуйста, используйте только изображения с той же точки зрения или используйте последнюю версию Fabric.js (версия dev) и установите crossOrigin = "Anonymous". В этом случае изображение должно быть подано с заголовком «Access-Control-Allow-Origin: *».

Вы используете новый API fabric.Image.filters.Tint - этот API доступен только в версиях Fabric.js> = 1.3.2.

Я обновил jsfiddle использовать данные URL изображение (не проблемы с CORS) и обновлять Fabric.js в 1.3.2: http://jsfiddle.net/Kienz/wDfhf/

Вы можете найти последнюю версию Dev (по своему страху и риску:)) по адресу https://github.com/kangax/fabric.js/tree/master/dist

+0

Kienz, я не могу (на данный момент) перейти на более новую версию fabric.js (мы используем 1.2.0). Есть ли способ заставить CrossOrigin работать в этой версии? Я попытался добавить 'img.crossOrigin = 'anonymous';' в функцию loadImage и не был успешным. – Jacques

+0

Основываясь на коде 1.4.7, похоже, вам нужно использовать setCrossOrigin [https://github.com/kangax/fabric.js/blob/492253e5cac12fce41ad667f393b7f7443b124e0/src/shapes/image.class.js#L96], но Я не могу заставить его работать в Chrome. –

+0

@Jack Вы должны передать свойство crossOrigin в функцию loadImage. Свойство crossOrigin должно быть установлено до начала загрузки изображения. fabric.util.loadImage ('xyz.png', function (img) { ... }, null, 'anonymous'}); – Kienz

Смежные вопросы