当GitHub用户注册某个帐户时,GitHub会提供如下所示的默认个人资料图片:
用户可以根据说明here设置自定义个人资料照片。
我能想到的方法是从GitHub用户下载当前的个人资料图片,然后从https://github.com/identicons/USERNAME.png下载他的默认个人资料图片。然后比较这两张照片。但这个解决方案并不美观。
有没有一种很好的方法可以确定GitHub用户是使用默认个人资料图片还是设置了自定义个人资料图片?像一个布尔值,我可以检查或类似的东西。感谢。
答案 0 :(得分:2)
GitHub会使用Gravatar service来获取与GitHub用户电子邮件帐户相关联的图片。
您可以query such an image通过Gravatar API。如果没有,则表示将使用默认的自动生成图像。
如果没有与电子邮件关联的图片,GitHub会使用?d=identicon
parameter根据电子邮件哈希生成几何图案:
https://www.gravatar.com/avatar/05b6d7cc7c662bf81e01b39254f88a49?d=identicon
答案 1 :(得分:0)
我需要这样做,并且我认为作为生成的图像,像素将被干净地着色而没有抖动。
import requests
from PIL import Image
# image_url = "https://avatars.githubusercontent.com/u/85327959" # a photograph
image_url = "https://avatars.githubusercontent.com/u/85325807?v=4" # a gravatar
img_data = requests.get(image_url).content
with open("avatar.jpg", "wb") as handler:
handler.write(img_data)
image = Image.open("avatar.jpg")
colour_count = len(set(image.getdata()))
print(image.size, "colours:", colour_count)
if colour_count < 10:
print("this is a gravatar")
我们下载图像,然后将其加载为 PIL 图像。然后我们以像素为单位制作一组颜色,所以我们只得到独特的颜色。如果只有 2 种独特的颜色,那么它是一个重力人,更多的是一张照片。 (我将它设置为 10 是为了给我一些喘息的空间,因为我不想要假阴性。)
https://github.com/twbs.png
或
https://github.com/npm.png?size=200
在第一年的课程中,我想检查用户是否更新了他们的照片,以便教程团队可以轻松地将 repos 与人匹配。
def has_real_photo(repo_path):
repo = git.cmd.Git(repo_path)
origin_url = get_origin_url(repo)
owner = origin_url.split("/")[3]
image_url = f"https://github.com/{owner}.png?size=40"
img_data = requests.get(image_url).content
with open("avatar.jpg", "wb") as handler:
handler.write(img_data)
image = Image.open("avatar.jpg")
colour_count = len(set(image.getdata()))
if colour_count > 10:
block_image = blocky_photo(image)
print(block_image)
return True
else:
block_image = blocky_photo(image)
print(
f"Your GitHub profile picture only has {colour_count} colours.\n"
"This makes me think it's the default avatar.\n"
"Not like this:\n",
block_image,
"""Like this:
╭───────────╮
│ !!!!!!! │
│ / \ │
│ │ O O │ │
│<│ v │>│
│ \ ─── / │
│ \____/ │
╰───────────╯\n"""
"Go to https://github.com/settings/profile and upload a photo of your face.\n"
"This really helps us understand who's who and be more useful in tutorials.",
)
return False
def blocky_photo(image):
colour_map_list = list(
zip(
list(set(image.getdata())),
["█", "░", "▒", "▓", "X", "#", "%", "/", ":", "*"],
)
)
colour_map = {x[0]: x[1] for x in colour_map_list}
image = image.resize((20, 10), Image.NEAREST)
pixels = list(image.getdata())
width, height = image.size
block_image = ""
for i in range(len(pixels)):
block_image += colour_map[pixels[i]]
if (i + 1) % (width) == 0:
block_image += "\n "
return block_image
他们有一组自己运行的测试,并且会打印:
Your GitHub profile picture only has 2 colours.
This makes me think it's the default avatar.
Not like this:
████████████████████
█████░░░░░░░░░░█████
█████░░░░░░░░░░█████
█████░░░████░░░█████
█████░░░████░░░█████
█████░░░████░░░█████
██░░░░░░░░░░░░░░░░██
██░░░░░░░░░░░░░░░░██
██░░░░░░████░░░░░░██
████████████████████
Like this:
╭───────────╮
│ !!!!!!! │
│ / \ │
│ │ O O │ │
│<│ v │>│
│ \ ─── / │
│ \____/ │
╰───────────╯
Go to https://github.com/settings/profile and upload a photo of your face.
This really helps us understand who's who and be more useful in tutorials.
✘ You've got a photo for your GitHub account