Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.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 - Fatal编程技术网

Python 有没有一种方法,用枕头画渐变色的文字?

Python 有没有一种方法,用枕头画渐变色的文字?,python,python-imaging-library,Python,Python Imaging Library,我将要创建一个带有文本的图像。到目前为止一切正常。现在,对于微调,我认为文本具有渐变颜色会很好 这就是我目前所处的位置 这就是我想要的 我已成功生成以下图像: 使用该脚本: from PIL import Image, ImageFont, ImageDraw OUTPUT_IMAGE = '53952270.png' BG_COLOR = (0, 102, 0) TEXT = 'STIEFELSTANGE' TEXT_COLOR = (255, 255, 255) SHADOW_COLO

我将要创建一个带有文本的图像。到目前为止一切正常。现在,对于微调,我认为文本具有渐变颜色会很好

这就是我目前所处的位置

这就是我想要的


我已成功生成以下图像:

使用该脚本:

from PIL import Image, ImageFont, ImageDraw

OUTPUT_IMAGE = '53952270.png'
BG_COLOR = (0, 102, 0)
TEXT = 'STIEFELSTANGE'
TEXT_COLOR = (255, 255, 255)
SHADOW_COLOR = (231, 255, 227)

image = Image.new('RGB', (212, 45), color=BG_COLOR)
draw = ImageDraw.Draw(image)
font = ImageFont.truetype('impact', 36)
text_size = font.getsize(TEXT)
draw.text((0, 0), TEXT, font=font)
pixels = image.load()
size = image.size

x_list = []
y_list = []
for x in range(size[0]):
    for y in range(size[1]):
        if pixels[x, y] == TEXT_COLOR:
            x_list.append(x)
            y_list.append(y)

shadow_height = text_size[1]/4
for x, y in zip(x_list, y_list):
    if y < min(y_list) + shadow_height or y > max(y_list)-shadow_height:
        pixels[x, y] = SHADOW_COLOR

image.save(OUTPUT_IMAGE)
从PIL导入图像、ImageFont、ImageDraw
输出图像='53952270.png'
BG_颜色=(0,102,0)
TEXT='stiefelstage'
文本颜色=(255、255、255)
阴影颜色=(231255227)
image=image.new('RGB',(212,45),color=BG\u color)
draw=ImageDraw.draw(图像)
font=ImageFont.truetype('impact',36)
text\u size=font.getsize(text)
draw.text((0,0),text,font=font)
像素=image.load()
size=image.size
x_列表=[]
y_列表=[]
对于范围内的x(尺寸[0]):
对于范围内的y(尺寸[1]):
如果像素[x,y]==文本颜色:
x_list.append(x)
y_列表。追加(y)
阴影高度=文本大小[1]/4
对于zip中的x,y(x\u列表,y\u列表):
如果y<最小值(y_列表)+阴影高度或y>最大值(y_列表)-阴影高度:
像素[x,y]=阴影颜色
image.save(输出图像)

我已经把它修好了。不幸的是,对于巨大的文本大小(比如100),它的速度实在太慢了

有人有一个Ide来简化这个函数吗

它正在创建此文本,例如:

async def createTextWithOutline(self、image、x、y、text、font、outlineAmount、textColor、shadowColor、rarity):
#创建大纲文本
drawObject=ImageDraw.Draw(图像)
对于范围内的adjX(大纲视图安装):
对于范围内的调整(outlineAmount):
text((x+adjX,y+adjY),text,font=font,fill=shadowColor)
text((x+adjX,y-adjY),text,font=font,fill=shadowColor)
text((x-adjX,y+adjY),text,font=font,fill=shadowColor)
text((x-adjX,y-adjY),text,font=font,fill=shadowColor)
text((x,y),text,font=font,fill=textColor)
如果稀有无:
如果“传奇性”==稀有性:
颜色=传说中的阴影颜色
elif‘epic’==稀有:
颜色=阴影颜色
elif‘稀有’==稀有性:
颜色=稀有色
elif“不寻常”==稀有性:
颜色=取消蒙阴影颜色
其他:
颜色=公共内部颜色
x_列表=[]
y_列表=[]
像素=image.load()
size=drawObject.textsize(text,font=font)
对于范围内的i(int(x),int(x+大小[0]):
对于范围内的j(int(y),int(y+大小[1]):
如果像素[i,j]==textColor+(255,):
x_列表追加(一)
y_列表。附加(j)
shaderHeight=size[1]//3.5
对于zip中的i,j(x_列表,y_列表):
如果jmax(y_列表)-着色器高度:
像素[i,j]=颜色+(255,)

文本颜色似乎是白色的,但您希望文本颜色是较深的白色阴影,还是渐变色?您想要的图像显示的是较深的白色阴影,而不是渐变色。梯度将是不同的阴影在一起像这样的图像:它只在中间白色。在文本的上下区域有一个浅绿色的阴影。这真是太棒了,就像我喜欢的那样。谢谢
    async def createTextWithOutline(self, image, x, y, text, font, outlineAmount, textColor, shadowColor, rarity):
    # create outline text
    drawObject = ImageDraw.Draw(image)
    for adjX in range(outlineAmount):
        for adjY in range(outlineAmount):
            drawObject.text((x + adjX, y + adjY), text, font=font, fill=shadowColor)
            drawObject.text((x + adjX, y - adjY), text, font=font, fill=shadowColor)
            drawObject.text((x - adjX, y + adjY), text, font=font, fill=shadowColor)
            drawObject.text((x - adjX, y - adjY), text, font=font, fill=shadowColor)
    drawObject.text((x, y), text, font=font, fill=textColor)
    if rarity != None:
        if 'legendary' == rarity:
            color = legendaryShadowColor
        elif 'epic' == rarity:
            color = epicShadowColor
        elif 'rare' == rarity:
            color = rareShadowColor
        elif 'uncommon' == rarity:
            color = uncommonShadowColor
        else:
            color = commonInnerColor
        x_list = []
        y_list = []
        pixels = image.load()
        size = drawObject.textsize(text, font=font)
        for i in range(int(x), int(x+size[0])):
            for j in range(int(y), int(y+size[1])):
                if pixels[i, j] == textColor + (255, ):
                    x_list.append(i)
                    y_list.append(j)
        shaderHeight = size[1]//3.5
        for i, j in zip(x_list, y_list):
            if j < min(y_list) + shaderHeight or j > max(y_list) - shaderHeight:
                pixels[i,j] = color + (255, )