抖音主页截图生成器在线制作,抖音主页截图生成器,快手小红书抖音截图【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提供数据生成工具函数
|
域名解析 CDN
[踩坑记录]免备案使用国内CDN初次尝试
踩坑记录,初次尝试免备案使用国内CDN,当然结局是以失败告终,还受到了“惨痛”的教训,希望大家引以为戒,千万不要学我!!
6405 154
[踩坑记录]免备案使用国内CDN初次尝试
|
并行计算 开发工具 C++
无所不谈,百无禁忌,Win11本地部署无内容审查中文大语言模型CausalLM-14B
目前流行的开源大语言模型大抵都会有内容审查机制,这并非是新鲜事,因为之前chat-gpt就曾经被“玩”坏过,如果没有内容审查,恶意用户可能通过精心设计的输入(prompt)来操纵LLM执行不当行为。内容审查可以帮助识别和过滤这些潜在的攻击,确保LLM按照既定的安全策略和道德标准运行。 但我们今天讨论的是无内容审查机制的大模型,在中文领域公开的模型中,能力相对比较强的有阿里的 Qwen-14B 和清华的 ChatGLM3-6B。 而今天的主角,CausalLM-14B则是在Qwen-14B基础上使用了 Qwen-14B 的部分权重,并且加入一些其他的中文数据集,最终炼制了一个无内容审核的
无所不谈,百无禁忌,Win11本地部署无内容审查中文大语言模型CausalLM-14B
|
8月前
|
存储 Java 关系型数据库
工商银行模拟器,java教学演示版分享~~~
前言:为什么要写这个模拟器? “老师上课讲的银行系统太抽象了!” “面试被问到银行系统设计直接懵了” 你是不是也有这样的烦恼?
|
4月前
|
资源调度 JavaScript 前端开发
前端组件库——Arco Design Vue知识点大全(一)
教程来源 https://bncne.cn/sheyingjiqiao.html Arco Design Vue是字节跳动开源的企业级Vue 3设计系统,源于抖音等亿级应用实践。聚焦设计一致性、开发提效与多端适配,具备60+高质量组件、全TypeScript支持、极致性能及可视化主题定制能力,已成为Vue 3生态中增长迅速的现代化UI解决方案。
|
10月前
|
文字识别 自然语言处理 API
同时斩获两个开源第一,超火的通义Qwen3-VL CookBook来了
Qwen3-VL开源发布后广受认可,登顶Chatbot Arena视觉榜与OpenRouter图像处理市场份额第一。支持文档解析、OCR、视频理解、3D定位等多模态任务,现推出详细Cookbook助力开发者高效应用。
2369 3
|
人工智能 运维 开发工具
10分钟无痛部署!字节Coze开源版喂饭教程
字节跳动开源AI智能体平台Coze(含Studio开发工具+Loop运维系统),仅需2核CPU/4GB内存即可本地运行,48小时GitHub星标破9000。本文提供10分钟极速部署指南,涵盖Docker配置、模型服务调优及Qwen模型切换实战,零成本实现商用级AI开发,彻底降低智能体创作门槛。
|
12月前
|
存储 监控 调度
如何在阿里云OSS之间进行数据迁移呢?
讲解如何在阿里云对象存储OSS之间进行跨账号、跨地域、以及同地域内的数据迁移,包括数据迁移之前的准备工作和实施数据迁移以及一些后续操作,使用在线迁移服务,您可以将第三方数据轻松迁移至阿里云对象存储OSS,也可以在对象存储OSS之间进行灵活的数据迁移。
|
数据安全/隐私保护 Python
购买记录截图生成器, 京东订单p图生成器, 淘宝购买截图生成【python】
这个代码实现了电商购买记录截图生成器,包含以下功能:模拟京东和淘宝的订单界面
快手自动养号插件,抖音小红书哔哩哔哩养号脚本,提高账号活跃度刷视频工具
这是一套针对抖音、快手和小红书等平台的自动养号系统源码,通过模拟真实用户行为(如看视频、点赞、评论等)提升账号权重与活跃度,突破流量限制。