Я испытываю довольно странную и нюансированную проблему, надеясь, что кто-то с большим опытом может помочь определить проблему. У меня есть набор цветовых матриц, которые я использую для изменения изображений в Canvas, а затем пытаюсь объединить изображение на сервере с Go lang.
Я использую fabri c. js для отображения изменений цветового фильтра на изображение с этим: http://fabricjs.com/docs/fabric.Image.filters.ColorMatrix.html. Вот пример фильтра сепии в Fabri c:
var filter = new fabric.Image.filters.ColorMatrix({
matrix: [0.35, 0.35, 0.35, 0.2, 0,
0.30, 0.30, 0.30, 0.1, 0,
0.25, 0.25, 0.25, 0.1, 0,
0, 0, 0, 1, 0,
0, 0, 0, 0, 1]
});
object.filters.push(filter);
object.applyFilters();
, который выглядит так:
In Go через веб-сервис Я написал что-то в композит на основе той же цветовой матрицы. Для этого я использую библиотеку Disintegration Gift. Вот факторизованный код:
filter := gift.ColorFunc(
func(r0, g0, b0, a0 float32) (r, g, b, a float32) {
m := req.FilterMatrix
r = (m[0] * r0) + (m[1] * g0) + (m[2] * b0) + (m[3] * a0) + m[4]
g = (m[5] * r0) + (m[6] * g0) + (m[7] * b0) + (m[8] * a0) + m[9]
b = (m[10] * r0) + (m[11] * g0) + (m[12] * b0) + (m[13] * a0) + m[14]
a = (m[15] * r0) + (m[16] * g0) + (m[17] * b0) + (m[18] * a0) + m[19]
return
},
)
g := gift.New(filter)
dst := image.NewNRGBA(g.Bounds(orgImg.Bounds()))
g.Draw(dst, orgImg)
orgImg = dst
Он в основном берет FilterMatrix из веб-запроса и соответственно применяет изменения цвета. Для этого фильтра сепия он работает как шарм. У меня есть несколько других матриц, которые не очень хорошо работают. Например, эта матрица: [1.1, 0, 0, 0, -30, 0, 1, 0, 0, 10, 0, 0, 1, 0, -10,0, 0, 0, 1, 0, 0, 0, 0, 0, 1]
, которая в Fabri c производит:
Когда я рендерим ее на сервер, изображение solid зеленого цвета. Моя логика / структура выглядит хорошо, я не уверен, что может быть не так.