Следующий код позволяет экспортировать в GIF с прозрачным фоном (на основе кода Mr.Wizard):
g = Plot3D[{x^2 + y^2, -x^2 - y^2}, {x, -2, 2}, {y, -2, 2},
RegionFunction -> Function[{x, y, z}, x^2 + y^2 <= 4],
BoxRatios -> Automatic, PlotStyle -> None, Axes -> None,
Boxed -> False]
Export["wireframetest.gif", g, Background -> White,
"TransparentColor" -> White]
Вот как это отображается в стандартном « Windows Picture and Fax Viewer» "Windows XP:
Обратите внимание, что в этом случае вы должны указать как фон для Graphics3D
(по умолчанию White
), так и цветкоторый будет преобразован в прозрачный цвет при экспорте в GIF.Поэтому следует соблюдать осторожность в случае, когда целевое изображение должно содержать непрозрачные белые пиксели: Export
не только полностью игнорирует альфа-канал исходного изображения, но также учитывает равные значения RGB, которые отличаются менее чем на 1 / 256.4971 (проверено в 32-битной Windows XP с Mathematica 8.0.1):
Rasterize[Graphics[{RGBColor[0, 0, 0], Disk[]}]] ===
Rasterize[Graphics[{RGBColor[0, 0, 1/256.4971], Disk[]}]]
(*=> True*)
Один из способов справиться с этой ситуацией - указать нестандартный цвет для фона, который не отображаетсяв визуализированной версии графики:
Export["wireframetest.gif", g,
Background -> RGBColor[1, 1, 0.996],
"TransparentColor" -> RGBColor[1, 1, 0.996]]
Этот подход может быть автоматизирован.Прежде всего, мы можем получить все цвета, которые появляются в отрендеренной версии изображения:
neededColors = Union[Flatten[Rasterize[g, "Data"], 1]]
На втором шаге мы должны выбрать цвет, который не появляется в этом списке (ниже приведенбыстрое и грязное решение):
colorForBackground =
RGBColor @@ (First@
Complement[Permutations[Range[0, 255], {3}], neededColors]/255)
Теперь мы можем использовать его следующим образом:
Export["wireframetest.gif", g, Background -> colorForBackground,
"TransparentColor" -> colorForBackground]