Tạo hiệu ứng instagram card bằng thư viện pillow trên python (P3)


Chào mọi người, tôi lại trở lại sau một đống bài tập về nhà. Để các bài viết không bị ngắt quãng nên hôm nay dù đã rất muộn rồi nhưng tôi vẫn viết cho xong phần 3. Chúng ta sẽ đi tiếp tục với chủ đề khai thác dữ liệu Instagram json, nếu đây là lần đầu tiên bạn đọc bài trên blog của tôi thì đừng bỏ lỡ các bài viết ở phần trước. Tôi sẽ để link bên dưới để các bạn tiện theo dõi.
Ở bài viết trước, chúng ta đã có thể tự điền tên tài khoản, số bài viết và tải các hình ảnh materials về. Nhưng nếu phân tích vào tệp json chúng ta có được ở url hình ảnh, các bạn sẽ thấy thiếu số liệu về lượt theo dõi và người theo dõi tài khoản. Vậy làm sao để lấy những số liệu này?

Ý tưởng xử lí là từ dữ liệu json chúng ta có được ở url hình ảnh, tôi sẽ trích xuất username. Từ username này tôi sẽ truy cập vào dữ liệu json trang cá nhân của tài khoản, nơi chứa một tệp json khác chứa đầy đủ thông tin của người dùng như sau:

# JSON GET follow
profile_instagram = "https://www.instagram.com/" + user_name + "/?__a=1"
req_profile = requests.get(profile_instagram)
convert_2 = req_profile.text
load_profile = json.loads(convert_2)
followers = load_profile['graphql']['user']['edge_followed_by']['count']
following = load_profile['graphql']['user']['edge_follow']['count']

Tôi đã lấy được số liệu followers và following từ dữ liệu json mới. Bây giờ hãy thử với một đường dẫn ảnh nào đó trên Instagram, chúng ta sẽ được ảnh tương ứng với đầy đủ thông tin và hiệu ứng được thực hiện một các tự động.


Chúng ta cơ bản đã hoàn thành công việc, bây giờ là phần tối ưu. Tôi nhận thấy chương trình hoạt động không tốt trên các ảnh nằm ngang, vì vậy tôi phải tạo quá trình tiền xử lí ảnh sao cho khi đưa một ảnh nằm ngang vào ta được một ảnh temp.jpg kích thước nằm dọc. Đây là đoạn chương trình tiền xử lí ảnh sau khi chỉnh sửa.

#Input_module
image = Image.open('main_image.jpg')
h = image.size[0]
w = image.size[1]
if(h==w):
    image = image.resize((1080, 1080), Image.ANTIALIAS)
if(w<=h):
    image = image.crop((int(int(h - w) / 2), 0,int(int(h) - int(h - w) / 2),int(h) ))
if(w>h):
    if(h==1080):
        image = image
    else:
        image = image.crop((0, int(int(w - h) / 2), int(h), int(int(w) - int(w - h) / 2)))
        image = image.resize((1080, 1080), Image.ANTIALIAS)

Tôi đã đặt điều kiện cho ba thành phần ảnh. Nếu là ảnh nằm ngang, tôi sẽ lấy chiều rộng làm chuẩn và cắt chiều dài sao cho tạo ra một ảnh khác có vùng ảnh ở giữa hình cũ và kích thước hình vuông. Điều ngược lại xảy ra với hình dọc và giữ nguyên nếu đầu vào là hình vuông. Sau khi tạo background hình vuông và ghép thẻ, chúng ta sẽ được hiệu ứng chuẩn cho tất cả loại ảnh.


Sau đó, chúng ta cần điều chỉnh chương trình sao cho các vùng có text được tự động căn lề giữa. Ý tưởng cho điều này là tính độ dài chuỗi nhập vào với đơn vị pixels, sau đó tìm vị trí cần chèn text trên hình ảnh và lấy vị trí đó trừ cho một nửa kích thước chuỗi.

#text
text = av
draw_text = ImageDraw.Draw(text)
font_01 = ImageFont.truetype(r'.\fonts/TCCEB.ttf', 30)
font_02 = ImageFont.truetype(r'.\fonts/TCCEB.ttf', 40)
short = str(followers)
if(followers > 999999):
    followers = followers / 1000000    short = str(int(followers)) + "M"if(followers > 999):
    followers = followers / 1000    short = str(int(followers)) + "K"unl = len(str(following))
uw, uh = draw_text.textsize(user_name, font = font_01)
pw, ph = draw_text.textsize(str(posts), font = font_02)
fw, fh = draw_text.textsize(str(following), font = font_02)
draw_text.text((600-(uw/2), 160),user_name,(255,255,255),font=font_01)
draw_text.text((520 - (pw/2), 220),str(posts),(255,255,255),font=font_02)
draw_text.text((645 - (fw/2), 220),str(following),(255,255,255),font=font_02)
draw_text.text((680, 220),short.center(20),(255,255,255),font=font_02)

Đối với số người theo dõi, tôi chuyển đổi thành các kí tự K, M nếu giá trị vượt quá 999 hoặc 999999. Chỉnh lại các kích thước font chữ và vị trí sao cho hợp lí, các bạn cũng có thể đổi font chữ khác bằng cách thay đổi file fontsname.ttf trong thư mục fonts.

Phần này vì chúng ta đi theo luồng phân tích nên các đoạn mã không đúng thứ tự xuất hiện, các bạn có thể tải chương trình đầy đủ phía dưới để tham khảo. Hãy chia sẻ bài viết này về trang cá nhân nếu các bạn thích nó, tôi sẽ viết tiếp P4 về giao diện và export chương trình thành dạng .exe. Vì  blog vừa thay đổi địa chỉ mới, hãy ủng hộ chúng tôi bằng cách giúp tôi chia sẻ bài viết, chúc các bạn ngủ ngon.



Password giải nén: nguyentrieuphong.com

Hình ảnh công khai và chỉ được dùng vào mục đích chia sẻ kiến thức