两种方式以及效果:
方式一,使用PIL.Image.blend方式:
1
2
3
4
5
6
7
8
9
10
11
12
|
from PIL import Image, ImageDraw
im = Image. open ( 'd:/tmp/58.249.0.220_01_20200604141800866_TIMING.jpg' , 'r' )
im2 = Image. open ( 'd:/tmp/58.249.0.220_01_20200604141800866_TIMING.jpg' , 'r' )
draw = ImageDraw.Draw(im2)
draw.rectangle([( 1000 , 500 ), ( 1200 , 800 )], fill = ( 255 , 0 , 0 ), width = 2 )
out = Image.blend(im, im2, 0.5 )
out.save( 'd:/tmp/demo1.jpg' )
im.close()
im2.close()
out.show()
out.close()
|
方式二:直接进行像素叠加:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
from PIL import Image, ImageDraw
im = Image. open ( 'd:/tmp/58.249.0.220_01_20200604141800866_TIMING.jpg' , 'r' )
b = ( 255 , 0 , 0 )
opacity = 0.5
for x in range ( 1000 , 1200 ):
for y in range ( 500 , 800 ):
p = im.getpixel((x, y))
p = [ int (p[i] * ( 1 - opacity) + b[i] * opacity) for i in range ( 3 )]
im.putpixel((x, y), tuple (p))
im.save( 'd:/tmp/demo2.jpg' )
im.show()
im.close()
|
两种的效果图都如下:
说明:第一种可以画矩形椭圆等定义好的一些形状,但是第二种,可以自主控制形状的能力更好,只要将相应的数据公式编辑到程序中,就可以绘制一些想要的轮廓出来;
第二种方式,是受第一种方式的定义(
out = image1 * (1.0 - alpha) + image2 * alpha)
然后联想到色盲测试图、另一种图(不知道叫什么名字,就是一张图里面不同的人,可能看出不同的东西出来)而想出来的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://www.cnblogs.com/TheoryDance/p/13131131.html