目前我使用:
transparent // ClearAll
transparent[i_] :=
Module[{r, g, b, a},
{r, g, b} = ImageData /@ ColorSeparate[i, "RGB"];
a = Unitize[3. - (r + g + b)];
(Image /@ {r, g, b, a})~ColorCombine~"RGB"
]
- 有没有办法使用 ImageData 返回的形状来消除上面的 ColorSeparate / ColorCombine?
- 您是否可以提出与上述方法一样快或更快的改进方法或完全其他方法?
注意:该功能仅使完全白色的 RGB 像素透明,这是预期的。
关于第一个问题的更新:
ColorSeparate、ColorCombine 可以通过使用 Interleaving->False 来消除
transparent0 // ClearAll
transparent0[i_] :=
Module[{r, g, b, a},
{r, g, b} = ImageData[i, Interleaving -> False];
a = Unitize[3. - (r + g + b)];
Image[{r, g, b, a}, Interleaving -> False, ColorSpace -> "RGB"]
]
但性能更差:
transparent0[img]; //Timing
(* ==> {0.6490372, Null} *)