197 lines
6.3 KiB
HTML
197 lines
6.3 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<title>生成TabBar图标</title>
|
||
<style>
|
||
body {
|
||
font-family: Arial, sans-serif;
|
||
padding: 20px;
|
||
background: #f5f5f5;
|
||
}
|
||
.container {
|
||
max-width: 800px;
|
||
margin: 0 auto;
|
||
background: white;
|
||
padding: 20px;
|
||
border-radius: 8px;
|
||
}
|
||
h1 {
|
||
color: #333;
|
||
}
|
||
.icon-grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
||
gap: 20px;
|
||
margin-top: 20px;
|
||
}
|
||
.icon-item {
|
||
border: 1px solid #ddd;
|
||
padding: 15px;
|
||
border-radius: 8px;
|
||
text-align: center;
|
||
}
|
||
.icon-item h3 {
|
||
margin: 0 0 10px 0;
|
||
font-size: 14px;
|
||
}
|
||
canvas {
|
||
border: 1px solid #eee;
|
||
margin: 5px;
|
||
}
|
||
.download-btn {
|
||
display: inline-block;
|
||
margin: 5px;
|
||
padding: 5px 10px;
|
||
background: #07c160;
|
||
color: white;
|
||
text-decoration: none;
|
||
border-radius: 4px;
|
||
font-size: 12px;
|
||
}
|
||
.download-all {
|
||
margin-top: 20px;
|
||
padding: 10px 20px;
|
||
background: #07c160;
|
||
color: white;
|
||
border: none;
|
||
border-radius: 4px;
|
||
cursor: pointer;
|
||
font-size: 16px;
|
||
}
|
||
.instructions {
|
||
background: #f0f8ff;
|
||
padding: 15px;
|
||
border-radius: 8px;
|
||
margin-bottom: 20px;
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div class="container">
|
||
<h1>打牌记账小程序 - TabBar图标生成器</h1>
|
||
|
||
<div class="instructions">
|
||
<h3>使用说明:</h3>
|
||
<ol>
|
||
<li>点击每个图标下方的"下载"按钮保存单个图标</li>
|
||
<li>或点击"下载所有图标"按钮一次性下载全部</li>
|
||
<li>将下载的图片保存到 <code>miniapp/images/</code> 目录</li>
|
||
<li>图标尺寸:81x81像素,适合小程序使用</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<div class="icon-grid" id="iconGrid"></div>
|
||
|
||
<button class="download-all" onclick="downloadAll()">下载所有图标</button>
|
||
</div>
|
||
|
||
<script>
|
||
// 图标配置
|
||
const icons = [
|
||
{ name: 'home', label: '首页图标(灰色)', color: '#999999' },
|
||
{ name: 'home-active', label: '首页图标(绿色)', color: '#07c160' },
|
||
{ name: 'stats', label: '统计图标(灰色)', color: '#999999' },
|
||
{ name: 'stats-active', label: '统计图标(绿色)', color: '#07c160' },
|
||
{ name: 'profile', label: '个人中心(灰色)', color: '#999999' },
|
||
{ name: 'profile-active', label: '个人中心(绿色)', color: '#07c160' }
|
||
];
|
||
|
||
// 绘制图标函数
|
||
function drawIcon(ctx, type, color) {
|
||
ctx.clearRect(0, 0, 81, 81);
|
||
ctx.strokeStyle = color;
|
||
ctx.fillStyle = color;
|
||
ctx.lineWidth = 3;
|
||
|
||
switch(type) {
|
||
case 'home':
|
||
// 绘制房子图标
|
||
ctx.beginPath();
|
||
// 屋顶
|
||
ctx.moveTo(40.5, 15);
|
||
ctx.lineTo(20, 35);
|
||
ctx.lineTo(61, 35);
|
||
ctx.closePath();
|
||
ctx.fill();
|
||
// 房子主体
|
||
ctx.fillRect(25, 35, 31, 30);
|
||
// 门
|
||
ctx.fillStyle = 'white';
|
||
ctx.fillRect(35, 50, 11, 15);
|
||
break;
|
||
|
||
case 'stats':
|
||
// 绘制统计图标(柱状图)
|
||
ctx.fillRect(20, 45, 12, 20);
|
||
ctx.fillRect(35, 35, 12, 30);
|
||
ctx.fillRect(50, 25, 12, 40);
|
||
break;
|
||
|
||
case 'profile':
|
||
// 绘制个人图标
|
||
// 头部
|
||
ctx.beginPath();
|
||
ctx.arc(40.5, 25, 10, 0, 2 * Math.PI);
|
||
ctx.fill();
|
||
// 身体
|
||
ctx.beginPath();
|
||
ctx.arc(40.5, 55, 18, Math.PI, 0, true);
|
||
ctx.fill();
|
||
break;
|
||
}
|
||
}
|
||
|
||
// 创建图标
|
||
function createIcons() {
|
||
const container = document.getElementById('iconGrid');
|
||
|
||
icons.forEach(icon => {
|
||
const div = document.createElement('div');
|
||
div.className = 'icon-item';
|
||
|
||
const canvas = document.createElement('canvas');
|
||
canvas.width = 81;
|
||
canvas.height = 81;
|
||
canvas.id = icon.name;
|
||
|
||
const ctx = canvas.getContext('2d');
|
||
const type = icon.name.replace('-active', '');
|
||
drawIcon(ctx, type, icon.color);
|
||
|
||
const title = document.createElement('h3');
|
||
title.textContent = icon.label;
|
||
|
||
const downloadBtn = document.createElement('a');
|
||
downloadBtn.className = 'download-btn';
|
||
downloadBtn.textContent = '下载';
|
||
downloadBtn.download = icon.name + '.png';
|
||
downloadBtn.href = canvas.toDataURL('image/png');
|
||
|
||
div.appendChild(title);
|
||
div.appendChild(canvas);
|
||
div.appendChild(document.createElement('br'));
|
||
div.appendChild(downloadBtn);
|
||
|
||
container.appendChild(div);
|
||
});
|
||
}
|
||
|
||
// 下载所有图标
|
||
function downloadAll() {
|
||
icons.forEach((icon, index) => {
|
||
setTimeout(() => {
|
||
const canvas = document.getElementById(icon.name);
|
||
const link = document.createElement('a');
|
||
link.download = icon.name + '.png';
|
||
link.href = canvas.toDataURL('image/png');
|
||
link.click();
|
||
}, index * 200); // 延迟下载,避免浏览器阻止
|
||
});
|
||
}
|
||
|
||
// 页面加载完成后创建图标
|
||
window.onload = createIcons;
|
||
</script>
|
||
</body>
|
||
</html> |