本文背景:
公司項目的廣告系統有個功能,給圖片模板打指定的顏色值點,根據需要拼合的圖片數量,打點數量也不同。設計說他弄好了,運營上傳打點后的模板圖片時,獲取不到打點的位置坐標。於是找研發看是怎么回事,就有了下面的代碼。
濤哥解決這個問題
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