抖音主页截图生成器在线制作,抖音主页截图生成器,快手小红书抖音截图【python】

简介: 这个代码实现了一个完整的抖音主页截图生成器,包含以下功能:顶部导航栏模拟

下载地址:https://www.pan38.com/dow/share.php?code=JCnzE 提取密码:8918

这个代码实现了一个完整的抖音主页截图生成器,包含以下功能:
顶部导航栏模拟
用户信息区域(头像、用户名、ID、关注按钮)
用户数据统计(作品数、粉丝数、关注数、获赞数)
作品网格展示区
底部导航栏
自动生成水印
要运行此代码,需要安装Pillow库:pip install pillow
同时需要准备一个中文字体文件(如simhei.ttf)放在同一目录下。

import os
import random
from datetime import datetime
from PIL import Image, ImageDraw, ImageFont

class DouyinProfileGenerator:
def init(self):
self.width = 1080
self.height = 1920
self.bg_color = (255, 255, 255)
self.primary_color = (0, 0, 0)
self.secondary_color = (100, 100, 100)
self.accent_color = (255, 0, 80)
self.font_path = "simhei.ttf"

def generate_profile(self, username, followers, following, likes, avatar_path=None):
    # 创建画布
    img = Image.new('RGB', (self.width, self.height), self.bg_color)
    draw = ImageDraw.Draw(img)

    # 绘制顶部导航栏
    self._draw_navbar(draw)

    # 绘制用户信息区域
    self._draw_user_info(draw, username, followers, following, likes, avatar_path)

    # 绘制作品展示区域
    self._draw_content_grid(draw)

    # 添加底部导航栏
    self._draw_bottom_nav(draw)

    # 添加水印
    self._add_watermark(draw)

    return img

def _draw_navbar(self, draw):
    # 绘制顶部导航栏
    draw.rectangle([(0, 0), (self.width, 120)], fill=(255, 255, 255))
    draw.line([(0, 120), (self.width, 120)], fill=(200, 200, 200), width=1)

    # 添加返回箭头
    draw.polygon([(30, 60), (60, 30), (60, 90)], fill=self.primary_color)

    # 添加标题
    font = ImageFont.truetype(self.font_path, 40)
    draw.text((self.width/2, 60), "抖音", fill=self.primary_color, font=font, anchor="mm")

    # 添加搜索图标
    draw.ellipse([(self.width-100, 30), (self.width-60, 70)], outline=self.primary_color, width=2)
    draw.line([(self.width-80, 70), (self.width-60, 90)], fill=self.primary_color, width=2)

def _draw_user_info(self, draw, username, followers, following, likes, avatar_path):
    # 绘制头像
    avatar_size = 120
    avatar_x = 60
    avatar_y = 180

    if avatar_path and os.path.exists(avatar_path):
        avatar = Image.open(avatar_path).resize((avatar_size, avatar_size))
        mask = Image.new('L', (avatar_size, avatar_size), 0)
        draw_mask = ImageDraw.Draw(mask)
        draw_mask.ellipse([(0, 0), (avatar_size, avatar_size)], fill=255)
        img.paste(avatar, (avatar_x, avatar_y), mask)
    else:
        draw.ellipse([(avatar_x, avatar_y), (avatar_x+avatar_size, avatar_y+avatar_size)], 
                    fill=(200, 200, 200))
        font = ImageFont.truetype(self.font_path, 60)
        draw.text((avatar_x+avatar_size/2, avatar_y+avatar_size/2), "T", 
                 fill=(100, 100, 100), font=font, anchor="mm")

    # 绘制用户名
    font = ImageFont.truetype(self.font_path, 40)
    draw.text((avatar_x+avatar_size+30, avatar_y+20), username, fill=self.primary_color, font=font)

    # 绘制用户ID
    font = ImageFont.truetype(self.font_path, 30)
    draw.text((avatar_x+avatar_size+30, avatar_y+70), f"抖音号: dy{random.randint(10000000, 99999999)}", 
             fill=self.secondary_color, font=font)

    # 绘制关注按钮
    follow_btn_x = self.width - 180
    follow_btn_y = avatar_y + 30
    draw.rounded_rectangle([(follow_btn_x, follow_btn_y), 
                          (follow_btn_x+120, follow_btn_y+60)], 
                         radius=30, fill=self.accent_color)
    font = ImageFont.truetype(self.font_path, 30)
    draw.text((follow_btn_x+60, follow_btn_y+30), "关注", fill=(255, 255, 255), 
             font=font, anchor="mm")

    # 绘制粉丝、关注、获赞数据
    stats_y = avatar_y + avatar_size + 40
    stats = [
        ("作品", random.randint(10, 500)),
        ("粉丝", followers),
        ("关注", following),
        ("获赞", likes)
    ]

    for i, (label, value) in enumerate(stats):
        x = 60 + i * (self.width - 120) / 4
        font = ImageFont.truetype(self.font_path, 35)
        draw.text((x, stats_y), str(value), fill=self.primary_color, font=font, anchor="mt")
        font = ImageFont.truetype(self.font_path, 25)
        draw.text((x, stats_y+40), label, fill=self.secondary_color, font=font, anchor="mt")

    # 绘制简介
    bio_y = stats_y + 100
    font = ImageFont.truetype(self.font_path, 30)
    bio = "这个人很懒,什么都没留下~" if random.random() < 0.5 else "感谢关注,持续更新中!"
    draw.text((60, bio_y), bio, fill=self.primary_color, font=font)

def _draw_content_grid(self, draw):
    # 绘制作品网格
    grid_start_y = 600
    grid_padding = 2
    item_size = (self.width - grid_padding * 2) // 3

    for row in range(4):
        for col in range(3):
            x = col * (item_size + grid_padding)
            y = grid_start_y + row * (item_size + grid_padding)

            # 随机生成封面颜色
            color = (random.randint(100, 200), random.randint(100, 200), random.randint(100, 200))
            draw.rectangle([(x, y), (x+item_size, y+item_size)], fill=color)

            # 添加播放量
            views = f"{random.randint(1, 999)}.{random.randint(0, 9)}w"
            font = ImageFont.truetype(self.font_path, 25)
            draw.text((x+10, y+10), views, fill=(255, 255, 255), font=font)

            # 添加时长
            duration = f"{random.randint(0, 3)}:{random.randint(0, 59):02d}"
            font = ImageFont.truetype(self.font_path, 25)
            draw.text((x+item_size-60, y+item_size-40), duration, fill=(255, 255, 255), font=font)

def _draw_bottom_nav(self, draw):
    # 绘制底部导航栏
    nav_height = 120
    nav_y = self.height - nav_height
    draw.rectangle([(0, nav_y), (self.width, self.height)], fill=(255, 255, 255))
    draw.line([(0, nav_y), (self.width, nav_y)], fill=(200, 200, 200), width=1)

    # 绘制导航图标
    icons = ["首页", "朋友", "拍摄", "消息", "我"]
    for i, icon in enumerate(icons):
        x = self.width / 5 * i + self.width / 10
        y = nav_y + 30
        font = ImageFont.truetype(self.font_path, 25)
        color = self.accent_color if icon == "我" else self.secondary_color
        draw.text((x, y), icon, fill=color, font=font, anchor="mt")

def _add_watermark(self, draw):
    font = ImageFont.truetype(self.font_path, 20)
    watermark = f"生成于 {datetime.now().strftime('%Y-%m-%d %H:%M')}"
    draw.text((self.width-20, self.height-20), watermark, fill=(200, 200, 200), 
             font=font, anchor="rd")

if name == "main":
generator = DouyinProfileGenerator()

# 生成示例截图
profile = generator.generate_profile(
    username="测试用户",
    followers=12345,
    following=678,
    likes=98765,
    avatar_path=None  # 可以传入头像路径
)

# 保存图片
profile.save("douyin_profile.png")
print("抖音主页截图已生成: douyin_profile.png")
相关文章
|
9月前
|
JSON 数据安全/隐私保护 数据格式
抖音主页截图生成器,抖音主页截图生成器在线制作,python版本分享
这个项目包含三个主要文件:main.py包含核心的图片生成逻辑,utils.py提供数据生成工具函数
|
4月前
|
存储 Java 关系型数据库
工商银行模拟器,java教学演示版分享~~~
前言:为什么要写这个模拟器? “老师上课讲的银行系统太抽象了!” “面试被问到银行系统设计直接懵了” 你是不是也有这样的烦恼?
|
9月前
|
数据安全/隐私保护 Python
购买记录截图生成器, 京东订单p图生成器, 淘宝购买截图生成【python】
这个代码实现了电商购买记录截图生成器,包含以下功能:模拟京东和淘宝的订单界面
|
8月前
|
人工智能 算法 Android开发
如何使用Singify AI人声去除器去除歌曲人声
Singify人声去除器是一款高效易用的AI音频工具,支持在线快速分离歌曲中的人声与伴奏,适用于卡拉OK、翻唱、视频配乐等创作场景。无需专业技能,上传音频或输入YouTube链接,几步操作即可获得高质量伴奏或人声音轨。支持2轨、4轨、6轨甚至10轨分离,满足多样创作需求。跨平台使用,处理速度快,音质清晰接近录音室水准。注册即享免费积分,轻松开启音乐编辑之旅。
|
10月前
快手自动养号插件,抖音小红书哔哩哔哩养号脚本,提高账号活跃度刷视频工具
这是一套针对抖音、快手和小红书等平台的自动养号系统源码,通过模拟真实用户行为(如看视频、点赞、评论等)提升账号权重与活跃度,突破流量限制。
|
9月前
|
前端开发 数据可视化 Java
《Angular+Spring Boot:ERP前端采购销售库存协同架构解析》
本文深入解析了基于Angular与Spring Boot构建的全栈ERP前端系统,重点阐述采购、销售、库存三大核心模块的设计逻辑与协同机制。采购模块通过组件复用与动态适配,平衡规范流程与灵活场景;销售模块以客户为中心,整合权限控制与数据可视化,提升全链路服务能力;库存模块聚焦实时性与精细化,实现从总量统计到个体追踪的深度管理。模块间通过Angular服务层实现事件驱动的协同联动,与Spring Boot后端采用高效数据交互策略,形成业务闭环。文章还探讨了性能优化、体验一致性等实践挑战,为企业级ERP前端开发提供了兼具技术深度与业务适配性的解决方案。
243 0
|
开发工具 git
*** Please tell me who you are.Run git config --global user.email “you@example.com“ git confi
*** Please tell me who you are.Run git config --global user.email “you@example.com“ git confi
|
前端开发 Java Linux
Docker使用OpenJDK镜像导致验证码错误:java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion
Docker使用OpenJDK镜像导致验证码错误:java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion
3984 0
Docker使用OpenJDK镜像导致验证码错误:java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion
|
Unix 开发工具 C++
Vim基本使用操作
Vim基本使用操作
|
弹性计算 网络安全
阿里云服务器更换公网IP地址教程
阿里云服务器更换公网IP地址教程
1056 0