Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何用渐变填充绘制的形状?_Python_Python Imaging Library_Gradient - Fatal编程技术网

Python 如何用渐变填充绘制的形状?

Python 如何用渐变填充绘制的形状?,python,python-imaging-library,gradient,Python,Python Imaging Library,Gradient,我已经做了很多研究,我所发现的只是如何将渐变应用到枕头生成的文本中。但是,我想知道如何对绘制的形状(特别是多边形)应用渐变而不是常规的单色填充 image=image.new('RGBA',(50,50)) draw=ImageDraw.draw(图像) 绘制多边形([10,10,20,40,40,20],填充=(255,50,210),轮廓=无) 我仍然不能完全理解你的问题。但听起来你想要一堆有自己梯度的形状?一种方法是分别生成每个形状的渐变,然后在事实发生后组合这些形状 Piggy放弃@Ha

我已经做了很多研究,我所发现的只是如何将渐变应用到枕头生成的文本中。但是,我想知道如何对绘制的形状(特别是多边形)应用渐变而不是常规的单色填充

image=image.new('RGBA',(50,50))
draw=ImageDraw.draw(图像)
绘制多边形([10,10,20,40,40,20],填充=(255,50,210),轮廓=无)

我仍然不能完全理解你的问题。但听起来你想要一堆有自己梯度的形状?一种方法是分别生成每个形状的渐变,然后在事实发生后组合这些形状

Piggy放弃@HansHirse已经提到的答案,你可以做如下事情:

从PIL导入图像,ImageDraw
def通道(i、c、尺寸、开始加注、停止加注):
“”“为单个像素计算单个颜色通道的值”“”
返回起始填充[c]+int((i*1.0/尺寸)*(停止填充[c]-起始填充[c]))
def颜色(i、尺寸、开始填充、停止填充):
“”“计算单个像素的RGB值”“”
返回元组([范围(3)中c的通道(i、c、大小、开始填充、停止填充)])
def圆角(半径):
“画一个拐角”
角点=图像。新建(“RGBA”,(半径,半径),(0,0,0,0))
draw=ImageDraw.draw(角点)
画一个切片((0,0,半径*2,半径*2),180,270,fill=“蓝色”)
返回角
def将_grad_应用于_拐角(拐角、渐变、向后=假、上下=假):
宽度、高度=角点尺寸
宽度=范围(宽度)
如果向后:
宽度计=反向(宽度计)
对于范围内的i(高度):
gradPos=0
对于宽度计中的j:
如果从上到下:
pos=(i,j)
其他:
pos=(j,i)
pix=角点。获取像素(位置)
gradPos+=1
如果pix[3]!=0:
角点像素(位置,梯度[gradPos])
返回角
def圆形_矩形(尺寸、半径、起始填充、止动填充、流道顶部底部=假):
“”“绘制一个圆角矩形”“”
宽度、高度=尺寸
矩形=图像。新建(“RGBA”,大小)
如果运行自上而下:
si=高度
其他:
si=宽度
渐变=[范围(si)内i的颜色(i、宽度、起始填充、停止填充)]
如果运行自上而下:
modGrad=[]
对于范围内的i(高度):
modGrad+=[梯度[i]]*宽度
矩形.putdata(modGrad)
其他:
矩形.putdata(渐变*高度)
origCorner=圆角(半径)
#左上角
角=原角
将_grad_应用于_角点(角点、渐变、False、runTopBottom)
矩形。粘贴(角,(0,0))
#左下角
如果运行自上而下:
梯度。反向()
向后=真
其他:
向后=错误
角点=初始角点旋转(90)
将_grad_应用于_角(角、渐变、向后、梯段上下)
矩形。粘贴(角,(0,高度-半径))
#右下角
如果不是自上而下:
梯度。反向()
角点=初始角点旋转(180)
将_grad_应用于_角点(角点、渐变、True、runTopBottom)
矩形。粘贴(角,(宽度-半径,高度-半径))
#右上角
如果运行自上而下:
梯度。反向()
向后=错误
其他:
向后=真
转角=初始转角。旋转(270)
将_grad_应用于_角(角、渐变、向后、梯段上下)
矩形。粘贴(角,(宽度-半径,0))
返回矩形
def获取浓度(im1、im2):
dst=Image.new(“RGB”,(im1.width+im2.width,im1.height))
dst.粘贴(im1,(0,0))
dst.粘贴(im2,(im1.width,0))
返回dst
def get_concat_v(im1、im2):
dst=Image.new(“RGB”,(im1.width,im1.height+im2.height))
dst.粘贴(im1,(0,0))
dst.粘贴(im2,(0,im1.高度))
返回dst
img1=圆形矩形((200200),70,(255,0,0),(0255,0),真)
img2=圆形矩形((200,200),70,(0,255,0),(0,0,255),真)
获取concat(img1,img2)。保存(“testcombo.png”)
结果如下所示:


唯一的“新”东西出现在最后:图像只是合并。如果你想获得自由,你可以旋转单个形状或允许它们重叠(通过调整图像在
get_concat_h
+中的位置,并调整最终图像大小)。

我仍然不确定我是否完全理解你的问题。但听起来你想要一堆有自己梯度的形状?一种方法是分别生成每个形状的渐变,然后在事实发生后组合这些形状

Piggy放弃@HansHirse已经提到的答案,你可以做如下事情:

从PIL导入图像,ImageDraw
def通道(i、c、尺寸、开始加注、停止加注):
“”“为单个像素计算单个颜色通道的值”“”
返回起始填充[c]+int((i*1.0/尺寸)*(停止填充[c]-起始填充[c]))
def颜色(i、尺寸、开始填充、停止填充):
“”“计算单个像素的RGB值”“”
返回元组([范围(3)中c的通道(i、c、大小、开始填充、停止填充)])
def圆角(半径):
“画一个拐角”
角点=图像。新建(“RGBA”,(半径,半径),(0,0,0,0))
draw=ImageDraw.draw(角点)
画一个切片((0,0,半径*2,半径*2),180,270,fill=“蓝色”)
返回角
def将_grad_应用于_拐角(拐角、渐变、向后=假、上下=假):
宽度、高度=角点尺寸
宽度=范围(宽度)
如果向后:
宽度计=反向(宽度计)
对于范围内的i(高度):
gradPos=0
对于宽度计中的j:
如果从上到下:
pos=(i,j)
其他:
pos=(j,i)
pix=角点。获取像素(位置)
gradPos+=1
如果pix[3]!=0:
角点像素(位置,梯度[gradPos])
返回角
def圆形_矩形(尺寸、半径、起始填充、止动填充、流道顶部底部=假):