Я не уверен насчет PIL, но, поскольку вы также спросили об альтернативах, вот пример использования линейных градиентов и областей отсечения с использованием wxPython.
wxPython не только для манипулирования изображениями, но он может выполнить работу.
import wx
def render(dc):
dc.Clear()
region = wx.RegionFromPoints([(256, 64), (448, 448), (64, 448)])
dc.SetClippingRegionAsRegion(region)
dc.GradientFillLinear((0, 0, 512, 512), wx.RED, wx.BLACK, wx.NORTH)
def main():
app = wx.PySimpleApp()
bitmap = wx.EmptyBitmap(512, 512)
render(wx.MemoryDC(bitmap))
bitmap.SaveFile('output.png', wx.BITMAP_TYPE_PNG)
if __name__ == '__main__':
main()
Вывод этой программы:
В этом примере используется стандартный контекст рисования, но есть также GraphicsContext
, который обеспечивает дополнительные функциональные возможности и улучшает рендеринг (сглаживание):
http://www.wxpython.org/docs/api/wx.GraphicsContext-class.html