Python 위 챗 친구 프로필 사진 맞 춤 법

itchat 라 이브 러 리 를 기반 으로 위 챗 친구 의 얼굴 을 가 져 오고 맞 춤 형 작업 을 수행 하여 위 챗 에서 문자 화 된 친구 목록 데 이 터 를 시각 적 으로 보 여 줍 니 다.

친구 프로필 사진 가 져 오기

def save_avatar(folder):
 """
         
 :param folder:       
 """
 itchat.auto_login(hotReload=True)
 users = itchat.get_friends() or []
 print('%d friends found.' % len(users))
 if not os.path.exists(folder):
  os.makedirs(folder)
 index = 1
 for i, user in enumerate(users):
  nickname = user.RemarkName
  username = user.UserName
  file_path = os.path.join(folder, '%03d_%s.png' % (i, nickname))
  if not os.path.isfile(file_path): #      
   avatar = itchat.get_head_img(username)
   with open(file_path, 'w') as f:
    f.write(avatar)
    print('Download %d: %s' % (index, file_path))
    index += 1
프로필 사진 을 저장 하 는 폴 더 만 전송 하면 됩 니 다.itchat.auto 를 실행 합 니 다.login(hotReload=True)이후 위 챗 스 캔 인터페이스 가 나타 나 위 챗 로그 인 권한 을 부여 하여 다음 친구 데 이 터 를 가 져 올 수 있 도록 합 니 다.
사진 을 다운로드 할 때,나 는 여러 번 실 행 될 때 매번 프로필 사진 을 다시 다운로드 하지 않도록 중복 다운 로드 를 방지 하 는 판단 을 추가 했다.
맞 춤 형 프로필 사진 을 꺼내다.

def get_image_files(folder, filters=None):
 """
        
 :param folder:      
 :param filters:        
 :return:     
 """
 filters = filters or []
 filenames = [os.path.join(folder, sub) for sub in os.listdir(folder)
     if sub.endswith('.png') and not filters.__contains__(sub)]
 return filenames
여기에 따로 방법 을 쓰 는 것 은 지 정 된 위 챗 친구 의 프로필 사진 을 없 애기 위해 서 입 니 다.
맞 춤 형 배열 을 계산 하 다.

def calculate_align_way(image_num, force_align=False):
 """
           
 :param image_num:     
 :return: (rowls, columns)
 """
 actual_value = image_num ** 0.5
 suggest_value = int(actual_value)
 if actual_value == suggest_value or force_align:
  return suggest_value, suggest_value
 else:
  return suggest_value, suggest_value + 1
최종 맞 춤 형 그림 의 행렬 수 를 알 아야 하기 때문에 모든 계산 방법 을 따로 정의 합 니 다.알고리즘 은 그림 총수 에 루트 번 호 를 직접 열 고 추출 한 결과 가 정수 라면 바로 이 결 과 를 되 돌려 주 는 것 입 니 다.정수 가 아니라면 매개 변수 forcealign 은 모든 디 스 플레이 를 강제 할 지 여 부 를 결정 합 니 다.트 루 로 설정 하면 강제로 채 울 수 있 지만 일부 친구 들 은 완전히 표시 되 지 않 습 니 다.반대로 상대 적 인 상황 이다.뒤에 맞 춤 형 그림 의 마지막 줄 에 검은색 빈자리 가 많은 것 을 발 견 했 을 때 이 매개 변 수 를 True 로 변경 하면 됩 니 다.
조립 하 다

def join_images(image_files, rows, cols, width, height, save_file=None):
 """
     
 :param image_files:       
 :param rows:   
 :param cols:   
 :param width:         
 :param height:         
 :param save_file:           
 """
 canvas = np.ones((height * rows, width * cols, 3), np.uint8)
 for row in range(rows):
  for col in range(cols):
   index = row * cols + col
   if index >= len(image_files):
    break
   file_path = image_files[index]
   im = Image.open(file_path)
   im = im.resize((width, height))
   im_data = np.array(im)
   if len(im_data.shape) == 2:
    im_data = np.expand_dims(im_data, -1)
   x = col * width
   y = row * height
   canvas[y: y + height, x: x + width, :] = im_data
 image = Image.fromarray(canvas)
 image.show()
 if save_file:
  image.save(save_file)
맞 춤 형 그림 은 과학 컴 퓨 팅 패키지 numpy 와 이미지 라 이브 러 리 PIL 을 호출 하 는데 주로 ndarray 를 조작 하 는 것 입 니 다.
마지막 으로 위의 절 차 를 모두 연결 하여 다음 과 같은 주 함 수 를 실행 하면 위의 조합 그림 을 얻 을 수 있 습 니 다.

FOLDER = 'avatars'

if __name__ == '__main__':
 #         
 save_avatar(FOLDER)

 #          
 image_files = get_image_files(FOLDER)

 #        
 rows, columns = calculate_align_way(len(image_files), force_align=True)

 #       
 join_images(image_files, rows, columns, 64, 64, 'result.png')

Github 소스 코드
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기