PBI 要修改图片颜色

我们知道自然界有三原色:Red(红)、Green(绿)、Blue(蓝)
我们形形色色的照片就是有这三种颜色按不同比例调和而成,我们把一张照片放大几千倍上万倍时发现,我们的彩色图像变成了一个个的色块或色点,如下面的锯齿状:
file
这是下面这张图片放大32倍后的部分截图:
file
包括我们看到的屏幕都是这种形形色色的色块点构成了我们视觉看到的图像,当我们的色块或点足够小时就构成了更丰富细腻的细节,让我们看到的东西更加清晰,这又扯到像素上去了。。。。。。
言归正传,今天我们要将上面的黑白篆书图片改为红底白字。
不同的颜色通过三原色不同比例调和出更丰富的颜色,比如:白色RGB值为(255,255,255),黑色RGB值为(0,0,0),红色的RGB值为(255,0,0)。那么完成今天的操作思路就可以转化为:获取图片每个点的RGB值,将每个点的RGB值进行判断,将白色底的RGB值换成红色的RGB值,将原来黑色字的RGB值转换为白色RGB值,最后将新的RGB值赋值给源图片点状RGB属性值,保存为新图片对象即将颜色更换过来了。
注意,由于网上下载的图片或是现实拍照光线等问题,在看似白色的区域或是字的线条边缘均能看到部分杂色点(放大看),为了忽略这些杂色(降噪)对比较接近的颜色(稍深或稍浅)进行RGB值强行归类转化。
下面来看实现将我本地桌面的畅心.png图片换色的代码:
首先得有PIL库文件,老套路pip安装先

from PIL import Image
im = Image.open(r'C:\Users\Administrator\Desktop\畅心.png')
im = im.convert('RGB')
for x in range(im.size[0]):
    for y in range(im.size[1]):
        r,g,b = im.getpixel((x,y))
        a,k,c = (255,255 if g<200 else 0,255 if b<200 else 0)
        im.putpixel((x,y),(a,k,c))
im.save(r'C:\Users\Administrator\Desktop\改RGB值.jpg')

file
最后我们看到新生成的照片如下:
file
我们利用这个库可以合成照片、加水印、剪裁操作:

from PIL import Image
底= Image.open(r'C:\Users\Administrator\Desktop\1.png')
覆盖区= (166, 64, 320, 337) #(左x,左y,右x,右y)
覆盖= Image.open(r'C:\Users\Administrator\Desktop\2.png')
覆盖=覆盖.resize((覆盖区[2]-覆盖区[0],覆盖区[3]-覆盖区[1]))
底.paste(覆盖,覆盖区)
底.save(r'C:\Users\Administrator\Desktop\合成.png')
from PIL import Image
im=Image.open(r'C:\Users\Administrator\Desktop\1.png') #待剪裁图片
box = (0,0,200,200)
im.crop(box).save(r'C:\Users\Administrator\Desktop\2.png')

当然这个原理能做更多有意思的事情,比如对整张照片的色阶调整、明暗关系或是锐化模糊等操作,最好你会相关色彩原理知识就更好了......
以下6位16进制数,#FFFFFF,每两个F转为十进制=(15x16^1+15x16^0)=255,对应RGB值为(255,255,255)也就是白色。
file
你也来试一试吧!

道高一尺 魔高一丈
https://pbihub.cn/users/44
M与DAX的恩怨纠葛