抖音主页截图生成器在线制作,抖音主页截图生成器,快手小红书抖音截图【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")
相关文章
|
JSON 数据安全/隐私保护 数据格式
抖音主页截图生成器,抖音主页截图生成器在线制作,python版本分享
这个项目包含三个主要文件:main.py包含核心的图片生成逻辑,utils.py提供数据生成工具函数
|
域名解析 Kubernetes 网络协议
k8s pod的dns域名
pod 的 dns域名相关概念
2239 1
k8s pod的dns域名
|
1月前
|
XML JSON 人工智能
免费 IP 查询接口推荐:含国内精准到县区方案
本文实测2026-08-11仍可用的IP归属地查询接口。推荐4个真实可用方案:万维易源(国内精准至县区+MCP支持)、ip-api(零密钥/海外友好)、ipinfo(1000次/天)、ipwho.is(字段最全)。附调用示例、精度对比与场景选型建议。
869 0
|
9月前
|
存储 Java 关系型数据库
工商银行模拟器,java教学演示版分享~~~
前言:为什么要写这个模拟器? “老师上课讲的银行系统太抽象了!” “面试被问到银行系统设计直接懵了” 你是不是也有这样的烦恼?
|
9月前
|
存储 前端开发 Java
usdt模拟器转账器,java版前端代码,仅供学习参考
哈喽大家好!我是爱写代码的技术UP主!今天给大家带来一个超实用的项目——USDT模拟转账器Java版!完全本地运行,仅供学习区块链原理使用哦!
|
数据采集 人工智能 自然语言处理
FireCrawl:开源 AI 网络爬虫工具,自动爬取网站及子页面内容,预处理为结构化数据
FireCrawl 是一款开源的 AI 网络爬虫工具,专为处理动态网页内容、自动爬取网站及子页面而设计,支持多种数据提取和输出格式。
6774 71
FireCrawl:开源 AI 网络爬虫工具,自动爬取网站及子页面内容,预处理为结构化数据
|
数据安全/隐私保护 Python
抖音抢福袋脚本辅助器, 抢福袋最新脚本免费,抖音抢红包脚本插件【autojs】
该脚本实现以下核心功能:自动识别抖音窗口并置顶‌
|
数据安全/隐私保护 Python
淘宝订单截图生成器, 淘宝购买记录生成器,淘宝订单生成器在线制作【python】
这段代码实现了一个完整的淘宝订单生成器,包含以下功能:1. 生成随机订单号和时间 2
|
机器学习/深度学习 数据采集 人工智能
《大模型训练成本高,如何在不牺牲性能的前提下破局》
在人工智能领域,大模型训练成本高昂,主要源于硬件设备、数据处理和算法优化的需求。降低训练成本的关键在于合理配置硬件资源、改进数据处理方法、优化算法和模型结构,以及采用分布式训练技术。通过这些措施,企业可以在不影响模型性能的前提下,显著减少计算资源、人力和时间的投入,实现更高效的模型训练。实践证明,综合运用这些方法能够有效降低成本,推动人工智能技术的可持续发展。
1151 18
|
安全 数据安全/隐私保护 Android开发
深入探索iOS系统安全机制:从基础到高级
本文旨在全面解析iOS操作系统的安全特性,从基础的权限管理到高级的加密技术,揭示苹果如何构建一个既开放又安全的移动平台。我们将通过实例和分析,探讨iOS系统如何保护用户数据免受恶意软件、网络攻击的威胁,并对比Android系统在安全性方面的差异。