返回列表 发新帖

[求助问答] 哪位大神知道这图片是怎么生成的

[复制链接]

39

主题

1467

回帖

5850

积分

硕士生

首脑

Rank: 6Rank: 6

金币
798
好评
2
信誉
98

考神

发表在  2025-11-29 10:05:48 来自手机  | 显示全部楼层 | 阅读模式  来自 河南
哪位大神知道这种图片怎么生成的,有没有类似的HTML源码
回复

使用道具 举报

24

主题

6958

回帖

2万

积分

博士后

⊕1921863353

Rank: 8Rank: 8

金币
2159
好评
66
信誉
135

MT论坛最佳新人考神MT论坛活跃会员

发表于 2025-11-29 10:23:12 来自手机  | 显示全部楼层  来自 广东
好眼熟,十几年前的贴吧个性签名
已有1人评分金币 理由
青春向上 + 1 当你努力成辉煌,万人拥护为帝王;当你落魄.

查看全部评分 总评分:金币 +1 

回复

使用道具 举报

54

主题

3589

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
794
好评
190
信誉
180

MT论坛新人MT论坛最佳新人MT论坛帅哥考神MT论坛活跃会员挂机大佬

发表于 2025-11-29 10:51:49 来自手机  | 显示全部楼层  来自 陕西
大佬别闹,把图片长宽分别扩大,就能看见原文字,只是像素挤一起了。
原图片:

只变宽:

只变长:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
已有2人评分好评 金币 理由
改一个名字吧 + 1
喵喵猫 + 1 + 1 你怎么什么都会

查看全部评分 总评分:好评 +1  金币 +2 

回复

使用道具 举报

134

主题

3460

回帖

1万

积分

博士生

无敌最俊朗

Rank: 7Rank: 7Rank: 7

金币
3010
好评
49
信誉
105
发表于 2025-11-29 11:12:48 来自手机  | 显示全部楼层  来自 浙江
青春向上 发表于 2025-11-29 10:51
大佬别闹,把图片长宽分别扩大,就能看见原文字,只是像素挤一起了。
原图片:

你怎么什么都会
回复

使用道具 举报

51

主题

2971

回帖

8672

积分

硕士生

看看

Rank: 6Rank: 6

金币
130
好评
8
信誉
140

考神MT论坛帅哥MT论坛最佳新人MT论坛新人MT论坛活跃会员

发表于 2025-11-29 12:28:45 来自手机  | 显示全部楼层  来自 河南
青春向上 发表于 2025-11-29 10:51
大佬别闹,把图片长宽分别扩大,就能看见原文字,只是像素挤一起了。
原图片:


你怎么什么都会
回复

使用道具 举报

3

主题

285

回帖

1460

积分

高中生

Rank: 4

金币
658
好评
0
信誉
101
QQ
发表于 2025-11-29 12:50:22 来自手机  | 显示全部楼层  来自 甘肃
青春向上 发表于 2025-11-29 10:51
大佬别闹,把图片长宽分别扩大,就能看见原文字,只是像素挤一起了。
原图片:


你怎么什么都会
回复

使用道具 举报

5

主题

846

回帖

2429

积分

大学生

Rank: 5Rank: 5

金币
1344
好评
0
信誉
100
发表于 2025-11-29 13:21:42 来自手机  | 显示全部楼层  来自 广东
我有软件没有html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

54

主题

3589

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
794
好评
190
信誉
180

MT论坛新人MT论坛最佳新人MT论坛帅哥考神MT论坛活跃会员挂机大佬

发表于 2025-11-29 13:34:10 来自手机  | 显示全部楼层  来自 陕西
本帖最后由 青春向上 于 2025-11-29 13:37 编辑

html:
https://www.doubao.com/share/code/a343839313332?a=

调整好字体、文字数量、像素,更难辨认。
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>不对称压缩旋转叠加生成器(字体选择版)</title>
  7.     <style>
  8.         * {
  9.             margin: 0;
  10.             padding: 0;
  11.             box-sizing: border-box;
  12.             font-family: 'Microsoft YaHei', sans-serif;
  13.         }
  14.         body {
  15.             padding: 2rem;
  16.             background-color: #f5f5f5;
  17.             display: flex;
  18.             flex-direction: column;
  19.             align-items: center;
  20.             gap: 2rem;
  21.         }
  22.         .control-box {
  23.             background: white;
  24.             padding: 1.5rem 2rem;
  25.             border-radius: 8px;
  26.             box-shadow: 0 2px 6px rgba(0,0,0,0.1);
  27.             width: 100%;
  28.             max-width: 900px;
  29.             display: flex;
  30.             flex-wrap: wrap;
  31.             gap: 1.5rem;
  32.             align-items: center;
  33.         }
  34.         .input-item {
  35.             flex: 1;
  36.             min-width: 220px;
  37.             display: flex;
  38.             flex-direction: column;
  39.             gap: 0.6rem;
  40.         }
  41.         label {
  42.             font-size: 0.95rem;
  43.             color: #555;
  44.             font-weight: 500;
  45.         }
  46.         input[type="text"], input[type="number"], select {
  47.             padding: 0.8rem 1rem;
  48.             border: 1px solid #ddd;
  49.             border-radius: 4px;
  50.             font-size: 1rem;
  51.             transition: border 0.3s;
  52.         }
  53.         input:focus, select:focus {
  54.             outline: none;
  55.             border-color: #2196F3;
  56.         }
  57.         select {
  58.             appearance: none;
  59.             background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%23333' viewBox='0 0 16 16'%3E%3Cpath d='M8 11l4-4H4l4 4z'/%3E%3C/svg%3E");
  60.             background-repeat: no-repeat;
  61.             background-position: right 1rem center;
  62.             background-size: 16px;
  63.         }
  64.         button {
  65.             padding: 0.8rem 1.8rem;
  66.             background: #2196F3;
  67.             color: white;
  68.             border: none;
  69.             border-radius: 4px;
  70.             font-size: 1rem;
  71.             cursor: pointer;
  72.             transition: background 0.3s;
  73.             white-space: nowrap;
  74.             margin-top: 1.8rem;
  75.         }
  76.         button:hover {
  77.             background: #1976D2;
  78.         }
  79.         .result-box {
  80.             background: white;
  81.             padding: 2rem;
  82.             border-radius: 8px;
  83.             box-shadow: 0 2px 6px rgba(0,0,0,0.1);
  84.             text-align: center;
  85.         }
  86.         h2 {
  87.             font-size: 1.2rem;
  88.             color: #333;
  89.             margin-bottom: 1.5rem;
  90.         }
  91.         #finalImg {
  92.             border: 1px solid #eee;
  93.             border-radius: 4px;
  94.             background: white;
  95.             max-width: 100%;
  96.             height: auto;
  97.         }
  98.         #downloadBtn {
  99.             margin-top: 1.5rem;
  100.             background: #4CAF50;
  101.         }
  102.         #downloadBtn:hover {
  103.             background: #388E3C;
  104.         }
  105.     </style>
  106. </head>
  107. <body>
  108.     <!-- 控制区:新增字体选择下拉框 -->
  109.     <div class="control-box">
  110.         <div class="input-item">
  111.             <label for="text1">第一张图文字(例:当你努力成辉煌)</label>
  112.             <input type="text" id="text1" value="当你努力成辉煌" placeholder="输入第一张图的文字">
  113.         </div>
  114.         <div class="input-item">
  115.             <label for="text2">第二张图文字(例:莫忘曾经少年时)</label>
  116.             <input type="text" id="text2" value="莫忘曾经少年时" placeholder="输入第二张图的文字">
  117.         </div>
  118.         <div class="input-item">
  119.             <label for="fontSelect">选择字体</label>
  120.             <select id="fontSelect">
  121.                 <option value="'Microsoft YaHei', sans-serif" selected>微软雅黑</option>
  122.                 <option value="'SimSun', serif">宋体</option>
  123.                 <option value="'SimHei', sans-serif">黑体</option>
  124.                 <option value="'KaiTi', serif">楷体</option>
  125.                 <option value="'FangSong', serif">仿宋</option>
  126.                 <option value="'YouYuan', sans-serif">幼圆</option>
  127.                 <option value="'STXihei', sans-serif">华文细黑</option>
  128.                 <option value="'STKaiti', serif">华文楷体</option>
  129.             </select>
  130.         </div>
  131.         <div class="input-item">
  132.             <label for="baseLen">最短边长度(像素,对应文字长度)</label>
  133.             <input type="number" id="baseLen" value="100" min="50" max="500" placeholder="设置最短边尺寸">
  134.         </div>
  135.         <button id="generateBtn">生成叠加图片</button>
  136.     </div>

  137.     <!-- 结果区:仅显示最终叠加图 -->
  138.     <div class="result-box">
  139.         <h2>最终叠加图片(不对称压缩+旋转)</h2>
  140.         <img id="finalImg" alt="生成的叠加图片" />
  141.         <button id="downloadBtn" style="display: none;">下载图片</button>
  142.     </div>

  143.     <script>
  144.         // DOM元素获取(新增字体选择器)
  145.         const text1 = document.getElementById('text1');
  146.         const text2 = document.getElementById('text2');
  147.         const fontSelect = document.getElementById('fontSelect');
  148.         const baseLen = document.getElementById('baseLen');
  149.         const generateBtn = document.getElementById('generateBtn');
  150.         const finalImg = document.getElementById('finalImg');
  151.         const downloadBtn = document.getElementById('downloadBtn');

  152.         // 1. 生成不对称原始图(新增字体参数)
  153.         function createAsymmetryCanvas(text, baseLength, font) {
  154.             const canvas = document.createElement('canvas');
  155.             const ctx = canvas.getContext('2d');
  156.             const textLen = text.trim().length || 1;
  157.             
  158.             // 原始尺寸:长=文字长度×最短边,宽=最短边(不对称)
  159.             canvas.width = textLen * baseLength; // 长(最长边)
  160.             canvas.height = baseLength; // 宽(最短边)

  161.             // 绘制文字(使用选择的字体,大小适配最短边)
  162.             const fontSize = baseLength * 0.6;
  163.             ctx.clearRect(0, 0, canvas.width, canvas.height);
  164.             ctx.font = `${fontSize}px ${font}`; // 应用选择的字体
  165.             ctx.fillStyle = '#333';
  166.             ctx.textAlign = 'center';
  167.             ctx.textBaseline = 'middle';
  168.             ctx.fillText(text, canvas.width / 2, canvas.height / 2);

  169.             return canvas;
  170.         }

  171.         // 2. 压缩画布:将最长边变换为与最短边等长(转为正方形)
  172.         function compressToSquare(canvas) {
  173.             const squareCanvas = document.createElement('canvas');
  174.             const ctx = squareCanvas.getContext('2d');
  175.             const squareSize = Math.min(canvas.width, canvas.height); // 最短边长度=正方形边长

  176.             squareCanvas.width = squareSize;
  177.             squareCanvas.height = squareSize;
  178.             ctx.drawImage(canvas, 0, 0, squareCanvas.width, squareCanvas.height);
  179.             return squareCanvas;
  180.         }

  181.         // 3. 旋转画布(90度顺时针)
  182.         function rotateCanvas(canvas) {
  183.             const rotatedCanvas = document.createElement('canvas');
  184.             const ctx = rotatedCanvas.getContext('2d');

  185.             rotatedCanvas.width = canvas.height;
  186.             rotatedCanvas.height = canvas.width;

  187.             ctx.save();
  188.             ctx.translate(rotatedCanvas.width / 2, rotatedCanvas.height / 2);
  189.             ctx.rotate(Math.PI / 2); // 顺时针旋转90度
  190.             ctx.drawImage(canvas, -canvas.width / 2, -canvas.height / 2);
  191.             ctx.restore();

  192.             return rotatedCanvas;
  193.         }

  194.         // 4. 核心:叠加两张图为一张(传入选择的字体)
  195.         function generateFinalImage() {
  196.             const text1Val = text1.value.trim() || '文字1';
  197.             const text2Val = text2.value.trim() || '文字2';
  198.             const selectedFont = fontSelect.value; // 获取选择的字体
  199.             const baseLength = parseInt(baseLen.value);

  200.             // 步骤1:用选择的字体生成两张不对称原始图
  201.             const canvas1 = createAsymmetryCanvas(text1Val, baseLength, selectedFont);
  202.             const canvas2 = createAsymmetryCanvas(text2Val, baseLength, selectedFont);

  203.             // 步骤2:压缩为正方形
  204.             const squareCanvas1 = compressToSquare(canvas1);
  205.             const squareCanvas2 = compressToSquare(canvas2);

  206.             // 步骤3:旋转第二张图
  207.             const rotatedCanvas2 = rotateCanvas(squareCanvas2);

  208.             // 步骤4:叠加生成最终图
  209.             const finalCanvas = document.createElement('canvas');
  210.             const ctx = finalCanvas.getContext('2d');
  211.             finalCanvas.width = squareCanvas1.width;
  212.             finalCanvas.height = squareCanvas1.height;

  213.             ctx.drawImage(squareCanvas1, 0, 0);
  214.             ctx.drawImage(rotatedCanvas2, 0, 0);

  215.             // 显示与下载
  216.             const imgUrl = finalCanvas.toDataURL('image/png');
  217.             finalImg.src = imgUrl;
  218.             downloadBtn.style.display = 'inline-block';
  219.             downloadBtn.onclick = () => {
  220.                 const link = document.createElement('a');
  221.                 link.href = imgUrl;
  222.                 link.download = `不对称叠加图_${Date.now()}.png`;
  223.                 link.click();
  224.             };
  225.         }

  226.         // 生成按钮事件
  227.         generateBtn.addEventListener('click', generateFinalImage);

  228.         // 回车触发生成
  229.         [text1, text2, fontSelect, baseLen].forEach(el => {
  230.             el.addEventListener('keydown', (e) => e.key === 'Enter' && generateFinalImage());
  231.         });

  232.         // 初始生成一次
  233.         generateFinalImage();
  234.     </script>
  235. </body>
  236. </html>
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

1

主题

129

回帖

421

积分

初中生

Rank: 3Rank: 3

金币
441
好评
0
信誉
100
发表于 2025-11-29 13:41:54 来自手机  | 显示全部楼层  来自 江苏
青春向上 发表于 2025-11-29 10:51
大佬别闹,把图片长宽分别扩大,就能看见原文字,只是像素挤一起了。
原图片:


你怎么什么都会
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表