js image 获取rgb_如何利用python收集图片的RGB信息并生成一张新的图片

前几天在验证python自动化办公的时候 ,遇到了一个好玩的事情 :登录某网站的时候需要拖动图片做一下验证,然后西瓜了一下搜索,居然找到了答案!

他的验证原理是 取得拖动的图标 和 背景图片,利用python的PIL库对背景图片进行像素的RGB信息分析,找到差异点从而计算出需要移动的距离 。

然后就想到,既然通过PIL库能取得到图片的所有RGB信息,图片又是由每个RGB不一样的像素组成,那岂不是可以通过RGB信息就可以还原了这张图片呢。

半天时间测试了一下,是可以的,而且还可以在原RGB信息的基础上通过修改RGB参数生成比较有个性的一张新图片。

代码展示:

ef0d44b11e29ca7c3754231c0450eeff.png

获取图片宽高

c284740867de19d9a25ca3ed36ed46b6.png

取得图片RGB信息并保存到txt

1af0593b3fbf38497dd4136dcb5368e8.png

根据RGB信息创建新图片

完整代码:

from PIL import Image

import os

import random

import time

class Photo():

def __init__(self,img,txt,imgNew,isRandomColor):

self.img = img

self.txt = txt

self.imgNew = imgNew

self.isRandomColor = isRandomColor

# 获取图片宽高

def getImgInfo(self):

self.im = Image.open(self.img)

self.width = self.im.size[0] self.height = self.im.size[1]

# 取得图片RGB信息并保存到txt文件

def setRgbToTxt(self):

txt = open(self.txt,"w")

for i in range(0,self.width): for r in range(0,self.height):

v = self.im.getpixel((i,r)) txt.write(v.__str__().replace('(','').replace(")","") + "") # print(i,r,v)

txt.close()

#创建新图片

def createNewPicByRgb(self):

im = Image.new("RGB", (self.width, self.height))

txt = open(self.txt)

num = random.randint(50,100)

for i in range(0,self.width):

for r in range(0,self.height):

line = txt.readline() rgb = line.split(", ")

red = int(rgb[0]) + num if self.isRandomColor else rgb[0]

green = int(rgb[1]) + 0 if self.isRandomColor else rgb[1]

blue = int(rgb[2]) + 0 if self.isRandomColor else rgb[2]

im.putpixel((i, r), (int(red), int(green), int(blue)))

im.save(self.imgNew)

im.show()

m.close()

# 删除多余文件

def deleteTxt(self):

if os.path.exists(self.txt):

os.remove(self.txt)

def __del__(self):

print("操作完成")

if __name__ == "__main__":

PATH = os.getcwd() PATH_DATA = os.getcwd() + r"data"

img = PATH_DATA + r"imagesest.jpg"

txt = PATH_DATA + r"imagesest.txt"

imgNew = PATH + r"dataimages%s.jpg" %(time.time())

isRandomColor = True

photo = Photo(img,txt,imgNew,isRandomColor)

photo.getImgInfo()

photo.setRgbToTxt()

photo.createNewPicByRgb()

photo.deleteTxt()

看一下效果:

e7a344c65807c580dd1e01cf595fae34.png

原图

b5cc736839edf9c9aae6460118a19b6a.png

根据RGB信息从新生成的图片

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值