本文背景:
公司项目的广告系统有个功能,给图片模板打指定的颜色值点,根据需要拼合的图片数量,打点数量也不同。设计说他弄好了,运营上传打点后的模板图片时,获取不到打点的位置坐标。于是找研发看是怎么回事,就有了下面的代码。
涛哥解决这个问题
1、判断设计给模板图片打点的位置和数量是否正确
2、判断打点的颜色值是否正确
解决办法一:
使用ubuntu的gnu图片处理软件打开模板图片,放大就可以看到打点像素位置颜色,再用吸管就能知道打点位置颜色是否正确,打点的位置和数量也一目了然。
解决办法二:
码农自然可以写代码解决,好吧,写段python来解决这个问题吧
checkPic.py
Python
#!/usr/bin/python
# -*- coding:utf-8 -*-
from PIL import Image
# 涛哥用代码看是那的错 https://blog.kydbk.com
img = Image.open("test.png")
# 获取图片尺寸的大小(600,600)
print img.size
# 获取图片的格式 png
print img.format
# 获取图片的图像类型 RGBA
print img.mode
# 显示图片
img.show()
# 获取某个像素位置的值
print img.getpixel((126, 52))
# 生成缩略图
# img.thumbnail((128, 128))
# 保存图片
# img.save('image_thumb.jpg', 'JPEG')
"""
# 获取图片指定像素点的像素
def getPngPix(pngPath = "test.png",x = 1,y = 1):
img_src = Image.open(pngPath)
img_src = img_src.convert('RGBA')
img_array = img_src.load()
data = img_array[x,y]
img_src.close()
return data
# 输入当前位置像素 (207,75,90,255)
print(getPngPix("test.png",126,52))
"""
# 判断某像素值是否在图像中
# 查找目标色值 (1,1,1,255)
# 查找目标色值 (2,2,2,255)
# 查找目标色值 (255,250,250,255)
i = 1
j = 1
result = 0
break_flag = False
width = img.size[0]#长度
height = img.size[1]#宽度
for i in range(0,width):#遍历所有长度的点
for j in range(0,height):#遍历所有宽度的点
#每个像素点的颜色RGBA的值(r,g,b,alpha)
data = (img.getpixel((i,j)))#打印该图片的所有点
# 判断RGBA的值
if (data[0]==255 and data[1]==250 and data[2]==250):
# if (data[0]==207 and data[1]==75 and data[2]==90):
result = 1
print"图片中存在该像素!"
break_flag = True
break
if break_flag==True:
break
if break_flag==True:
break
if(result == 0):
print"图片中不存在该像素!"
"""
data = (img.getpixel((i,j)))#打印该图片的所有点
print (data)#打印每个像素点的颜色RGBA的值(r,g,b,alpha)
print (data[0])#打印RGBA的r值
if (data[0]>=170 and data[1]>=170 and data[2]>=170):#RGBA的r值大于170,并且g值大于170,并且b值大于170
img.putpixel((i,j),(234,53,57,255))#则这些像素点的颜色改成大红色
img = img.convert("RGB")#把图片强制转成RGB
img.save("e:/pic/testee1.jpg")#保存修改像素点后的图片
"""
#!/usr/bin/python
# -*- coding:utf-8 -*-
fromPILimportImage
# 涛哥用代码看是那的错 https://blog.kydbk.com
img=Image.open("test.png")
# 获取图片尺寸的大小(600,600)
printimg.size
# 获取图片的格式 png
printimg.format
# 获取图片的图像类型 RGBA
printimg.mode
# 显示图片
img.show()
# 获取某个像素位置的值
printimg.getpixel((126,52))
# 生成缩略图
# img.thumbnail((128, 128))
# 保存图片
# img.save('image_thumb.jpg', 'JPEG')
"""
# 获取图片指定像素点的像素
def getPngPix(pngPath = "test.png",x = 1,y = 1):
img_src = Image.open(pngPath)
img_src = img_src.convert('RGBA')
img_array = img_src.load()
data = img_array[x,y]
img_src.close()
return data
# 输入当前位置像素 (207,75,90,255)
print(getPngPix("test.png",126,52))
"""
# 判断某像素值是否在图像中
# 查找目标色值 (1,1,1,255)
# 查找目标色值 (2,2,2,255)
# 查找目标色值 (255,250,250,255)
i=1
j=1
result=0
break_flag=False
width=img.size[0]#长度
height=img.size[1]#宽度
foriinrange(0,width):#遍历所有长度的点
forjinrange(0,height):#遍历所有宽度的点
#每个像素点的颜色RGBA的值(r,g,b,alpha)
data=(img.getpixel((i,j)))#打印该图片的所有点
# 判断RGBA的值
if(data[0]==255anddata[1]==250anddata[2]==250):
# if (data[0]==207 and data[1]==75 and data[2]==90):
result=1
print"图片中存在该像素!"
break_flag=True
break
ifbreak_flag==True:
break
ifbreak_flag==True:
break
if(result==0):
print"图片中不存在该像素!"
"""
data = (img.getpixel((i,j)))#打印该图片的所有点
print (data)#打印每个像素点的颜色RGBA的值(r,g,b,alpha)
print (data[0])#打印RGBA的r值
if (data[0]>=170 and data[1]>=170 and data[2]>=170):#RGBA的r值大于170,并且g值大于170,并且b值大于170
img.putpixel((i,j),(234,53,57,255))#则这些像素点的颜色改成大红色
img = img.convert("RGB")#把图片强制转成RGB
img.save("e:/pic/testee1.jpg")#保存修改像素点后的图片
"""
图片扔目录里直接判断是否颜色打正确了,问题解决…
————————————————
转载:https://blog.csdn.net/weixin_39850167/article/details/111446347