两种方式以及效果:
方式一,使用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