python 制作3d立体隐藏图

生成文件的3d图,例子:
文字:
在这里插入图片描述
隐藏图:
在这里插入图片描述

使用建议:
1、建议不用中文,因为中文太复杂,生成立体图效果不好。
2、需要指定FONT_PATH,为一个ttf文件,linux在/usr/share/fonts目录下,windows在C:\Windows\Fonts
3、建议字体TEXT_SIZE调大,不然不好分辨
4、指定的TEXT不要太长
5、多试几次,找到合适的纹理

from PIL import Image, ImageDraw, ImageFont
from random import *
import numpy as np
from io import BytesIOFONT_PATH = '/usr/share/fonts/dejavu/DejaVuSans.ttf'   # 字体位置,linux在/usr/share/fonts/,windows
TEXT = 'love yannis'
TEXT_SIZE = 100 # 字体大小
WIDTH = 100 + int(len(TEXT) * TEXT_SIZE / 1.8)
HEIGHT = 256
SHIFT = 4 # 叠加位移# 生成纹理
def clamp(n, smallest, largest):return max(smallest, min(n, largest))def rand_ratio(base=1, delta=1):return delta * randint(1,100)*1.0/100 + baserand_ratios = [rand_ratio(), rand_ratio(), rand_ratio()]color_starts = [randint(0,200), randint(0,200), randint(0,200)]def rand_color(i):return clamp(randint(color_starts[i],int(rand_ratios[i] * color_starts[i])), 0, 255) def rand_colors():return (rand_color(0),rand_color(1),rand_color(2))perodic_x = 40
perodic_y = 40
texture = np.zeros((perodic_x, perodic_y, 3))
same_to_last_x = [False] * perodic_x
same_to_last_y = [False] * perodic_y
for x in range(0, perodic_x):same_to_last_x[x] =  random() < 0.1
for y in range(0, perodic_y):same_to_last_y[y] =  random() < 0.3texture[0][0] = rand_colors()for x in range(0,perodic_x):if same_to_last_x[x]:texture[x][0] = texture[x-1][0]else:texture[x][0] = rand_colors()# 纹理平铺
for x in range(0, perodic_x):for y in range(0,perodic_y):if same_to_last_y[y]:texture[x][y] = texture[x][y-1]elif same_to_last_x[x]:texture[x][y] = texture[x-1][y]else:texture[x][y] = rand_colors()# 生成纹理平铺图片
img = Image.new('RGB', (WIDTH, HEIGHT), color = 'white')
img_draw = ImageDraw.Draw(img) 
for x in range(0, WIDTH):for y in range(0,HEIGHT):color = texture[x % perodic_x][y % perodic_y].astype(int).tolist()img_draw.point([x,y], fill = tuple(color))# 生成文字
text = Image.new('RGB', (WIDTH, HEIGHT), color = 'black')
text_draw = ImageDraw.Draw(text) 
font = ImageFont.truetype(FONT_PATH, size=TEXT_SIZE)
text_draw.text((50,(HEIGHT-TEXT_SIZE)/2), TEXT, font=font, fill='white')# 文字叠加
img_mat = np.asarray(img)
text_mat = np.asarray(text)for x in range(0, WIDTH - SHIFT):for y in range(0, HEIGHT):if text_mat[y][x][0] != 0:img_draw.point([x,y], fill = tuple(img_mat[y, x - SHIFT].tolist()))
text.save('../tmp2.png', 'png')
img.save('../tmp.png', 'png')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/188139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【微服务 SpringCloudAlibaba】实用篇 · Nacos配置中心

微服务&#xff08;6&#xff09; 文章目录 微服务&#xff08;6&#xff09;1. 统一配置管理1.1 在nacos中添加配置文件1.2 从微服务拉取配置 2. 配置热更新2.1 方式一2.2 方式二 3. 配置共享1&#xff09;添加一个环境共享配置2&#xff09;在user-service中读取共享配置3&am…

【ICCV2023论文阅读】XNet(能跑通代码)

这里写目录标题 论文阅读摘要介绍方法overviewwhy use wavelet transform?融合方法用于全监督分割和半监督分割可行性分析 效果局限性总结 代码跑通去掉分布式训练生成低频和高频图片产生数据集改读取数据的位置损失函数添加自己数据集的信息结果 ps:我现在不知道自己研究方向…

用分布函数定义的随机变量的独立性的合理性

随机变量的独立性是这样定义的&#xff1a; 如果对任意 x , y x, y x,y 都有 P { X ≤ x , Y ≤ y } P { X ≤ x } P { Y ≤ y } P\{X\leq x,Y\leq y\} P\{X\leq x \}P\{Y\leq y\} P{X≤x,Y≤y}P{X≤x}P{Y≤y} 即 F ( x , y ) F X ( x ) F Y ( y ) F(x,y)F_X(x)F_Y(y) F…

Codeforces Round 911 (Div. 2)(C~E)(DFS、数论(容斥)、SCC缩点 + DAG图上DP)

​​​​​​1900C - Anjis Binary Tree 题意&#xff1a; 凯克西奇一直被安吉冷落。通过一个共同的朋友&#xff0c;他发现安吉非常喜欢二叉树&#xff0c;于是决定解决她的问题&#xff0c;以引起她的注意。Anji 给了 Keksic 一棵有 n个顶点的二叉树。顶点 1 是根&#xff…

【错误记录】Python 错误集合

Python 错误集合 文章目录 Python 错误集合TypeError: list object cannot be interpreted as an integer python 常见错误集合&#xff1a;持续更新 TypeError: ‘list’ object cannot be interpreted as an integer map [ [1, 1, 1, 1, 1, 1, 1, 0, 1, 1],[1, 0,…

利用异或、取反、自增bypass_webshell_waf

目录 引言 利用异或 介绍 eval与assert 蚁剑连接 进阶题目 利用取反 利用自增 引言 有这样一个waf用于防御我们上传的文件&#xff1a; function fun($var): bool{$blacklist ["\$_", "eval","copy" ,"assert","usort…

linux配置ssh无密码登录失败的一种原因

先说一下步骤&#xff0c;如下 参考&#xff1a;https://www.cnblogs.com/rickiyang/p/11074203.html 1、安装ssh 直接 sudo apt-get install openssh-server2、查看ssh运行状态 ps -e | grep ssh 如果发现 sshd 和 ssh-agent 即表明 ssh服务基本运行正常3、生成公钥和私钥…

大模型中的数据

简介&#xff1a; 数据是基础大模型的生命线;这些模型的训练数据在很大程度上决定了这些模型可以获得哪些功能。数据的中心性并不是基础大模型所独有的;最近对以数据为中心的人工智能的呼吁表明了管理、理解和记录用于训练机器学习模型的数据的普遍重要性。具体而言&am…

Vue+SpringBoot解决session跨域问题

做了一个前后端分离&#xff0c;因为前后端的 session id不一致&#xff0c;导致前端请求时&#xff0c;后端的session读取不到对应的值&#xff0c;造成登录问题。 解决方法&#xff1a; SpringBoot项目: 添加一个跨域配置 代码如下: 或者controller使用CrossOrigin Conf…

No matching version found for @babel/compat-data@^7.23.5 处理

npm ERR! notarget No matching version found for babel/compat-data^7.23.5 处理 报错信息 npm WARN ERESOLVE overriding peer dependency npm ERR! code ETARGET npm ERR! notarget No matching version found for babel/compat-data^7.23.5. npm ERR! notarget In most …

【java】编译时bug 项目启动前bug合集

文章目录 1. jdk8中 Optional orElseThrow 编译时报错java: 未报告的异常错误X; 必须对其进行捕获或声明以便抛出2. 启动项目时提示 Error running Application: Command line is too long. Shorten command line for Application or also for Spring Boot default configurati…

算法学习—排序

排序算法 一、选择排序 1.算法简介 选择排序是一个简单直观的排序方法&#xff0c;它的工作原理很简单&#xff0c;首先从未排序序列中找到最大的元素&#xff0c;放到已排序序列的末尾&#xff0c;重复上述步骤&#xff0c;直到所有元素排序完毕。 2.算法描述 1&#xff…

传统算法:使用 Pygame 模块实现冒泡排序

使用 Pygame 模块实现了冒泡排序的动画演示。它首先生成一个包含随机整数的数组,并通过 Pygame 在屏幕上绘制这个数组的条形图。随后,通过冒泡排序算法对数组进行排序,同时使用动画效果可视化每一步的排序过程。在排序的过程中,相邻的元素进行比较,如果顺序不对则交换它们…

万宾科技监测设备,可燃气体监测仪特点一览

万宾科技的监测设备种类繁多&#xff0c;包括可燃气体监测仪、管网水位监测仪、内涝积水监测仪等。其中可燃气体监测仪是万宾科技的核心产品之一&#xff0c;用于监测环境中可燃气体的浓度&#xff0c;适用于对甲烷气体浓度进行实时监测&#xff0c;应用于燃气管网、排水管网、…

从cmd登录mysql

说明 先看看mysql.exe文件在哪个目录下&#xff0c;为了后面的操作方便&#xff0c;可以将该文件所在的路径增加到环境变量path中。 如果不增加到path环境变量中&#xff0c;那么在cmd窗口就要切换到mysql.exe文件所在的目录下执行。 在cmd窗口查看mysql命令的帮助信息 在cm…

Clickhouse集群的搭建方法及搭建过程中报错的解决方法

官方文档 https://clickhouse.com/docs/zh/getting-started/tutorial#cluster-deployment https://clickhouse.com/docs/en/engines/table-engines/special/distributed https://zookeeper.apache.org/ Clickhouse的优点 列式存储数据库&#xff0c;数据压缩&#xff1b; 关系…

报警消除(python)

import warningswarnings.filterwarnings("ignore") # 报警消除

编译原理:设计与实现一个简单词法分析器

设计与实现一个简单词法分析。具体内容是产生一个二元式文本文件&#xff0c;扩展名为dyd&#xff0c;可将Java或C程序(测试程序)分解成为一个一个的单词及类型。 &#xff08;选做&#xff1a;并查“单词符号与种别对照表”得出其种别&#xff0c;用一数字表示。&#xff09;…

CSS 多主题切换思路

前言 本篇仅提供多主题切换思路&#xff0c;示例简单且清晰。 实现 步骤一&#xff1a;多主题(颜色)定义 定义根伪类 :root&#xff0c;代码第 2 和 7 行。分别定义了默认和带参数的伪类&#xff1b;定义 CSS 变量&#xff0c;注意变量名需要以两个减号&#xff08;--&…

adb修改android系统时间 adb shell date必须要root权限

adb Command adb root //需要root权限 adb shell setprop persist.sys.timezone GMT //校准时区 adb shell date MMDDhhmmYY.ss set //修改系统时间这里是GMT格林尼治时间&#xff0c;北京时间得转换一下 8小时 adb shell hwclock -w //同步硬件时间adb shell date 0201030422…