Python枕头:为透明度制作渐变
我有在图像上添加渐变的代码Python枕头:为透明度制作渐变,python,python-imaging-library,pillow,Python,Python Imaging Library,Pillow,我有在图像上添加渐变的代码 def st(path, gradient_magnitude=2.): im = Image.open(path) if im.mode != 'RGBA': im = im.convert('RGBA') width, height = im.size gradient = Image.new('L', (width, 1), color=0xFF) for x in range(width):
def st(path, gradient_magnitude=2.):
im = Image.open(path)
if im.mode != 'RGBA':
im = im.convert('RGBA')
width, height = im.size
gradient = Image.new('L', (width, 1), color=0xFF)
for x in range(width):
gradient.putpixel((x, 0), int(255 * (1 - gradient_magnitude * float(x) / width)))
alpha = gradient.resize(im.size)
black_im = Image.new('RGBA', (width, height), color=0x000000)
black_im.putalpha(alpha)
gradient_im = Image.alpha_composite(im, black_im)
gradient_im.save('out.jpg', 'JPEG')
跑步后我得到了这张照片
如何使渐变更透明?试试这个。初始不透明度值为0.9或0.95应该可以满足您的需要。我还对代码进行了一点重构,因为它以前很混乱。无论是谁写了这封信,都应该被告发,并远离电脑。;-)
使用
alpha=0.5
而不是alpha=gradient.resize(im.size)
我得到了这个错误类型错误:需要整数参数,如果alpha–新的alpha层,它应该如何工作。这可以是与此图像大小相同的“L”或“1”图像,也可以是整数或其他颜色值。这里又是黑色的,谢谢!这是我第一次尝试图像处理,我将研究更多的文档和文章。谢谢一如既往,这是我的荣幸。你开始了解线a=int((初始不透明度*255。)*(1.-渐变*浮点(x)/宽度))是如何工作的了吗?这就是所有神奇之处(取消对print语句的注释可能会有所帮助)。之后,它实际上只是将alpha应用于黑色图像,然后将黑色图像与输入图像混合。
from PIL import Image
def apply_black_gradient(path_in, path_out='out.png',
gradient=1., initial_opacity=1.):
"""
Applies a black gradient to the image, going from left to right.
Arguments:
---------
path_in: string
path to image to apply gradient to
path_out: string (default 'out.png')
path to save result to
gradient: float (default 1.)
gradient of the gradient; should be non-negative;
if gradient = 0., the image is black;
if gradient = 1., the gradient smoothly varies over the full width;
if gradient > 1., the gradient terminates before the end of the width;
initial_opacity: float (default 1.)
scales the initial opacity of the gradient (i.e. on the far left of the image);
should be between 0. and 1.; values between 0.9-1. give good results
"""
# get image to operate on
input_im = Image.open(path_in)
if input_im.mode != 'RGBA':
input_im = input_im.convert('RGBA')
width, height = input_im.size
# create a gradient that
# starts at full opacity * initial_value
# decrements opacity by gradient * x / width
alpha_gradient = Image.new('L', (width, 1), color=0xFF)
for x in range(width):
a = int((initial_opacity * 255.) * (1. - gradient * float(x)/width))
if a > 0:
alpha_gradient.putpixel((x, 0), a)
else:
alpha_gradient.putpixel((x, 0), 0)
# print '{}, {:.2f}, {}'.format(x, float(x) / width, a)
alpha = alpha_gradient.resize(input_im.size)
# create black image, apply gradient
black_im = Image.new('RGBA', (width, height), color=0) # i.e. black
black_im.putalpha(alpha)
# make composite with original image
output_im = Image.alpha_composite(input_im, black_im)
output_im.save(path_out, 'PNG')
return