本文目录导读:

Python脚本(PIL库)
from PIL import Image, ImageDraw, ImageFont
import random
import colorsys
def random_color():
"""生成随机鲜艳颜色"""
h = random.random()
s = 0.5 + random.random() * 0.5
v = 0.8 + random.random() * 0.2
r, g, b = colorsys.hsv_to_rgb(h, s, v)
return (int(r*255), int(g*255), int(b*255))
def create_placeholder(width=400, height=300, text=None):
"""生成占位图"""
img = Image.new('RGB', (width, height), random_color())
draw = ImageDraw.Draw(img)
# 添加文字
if text is None:
text = f"{width}x{height}"
# 使用默认字体
font = ImageFont.load_default()
# 文字居中
text_bbox = draw.textbbox((0, 0), text, font=font)
text_width = text_bbox[2] - text_bbox[0]
text_height = text_bbox[3] - text_bbox[1]
x = (width - text_width) / 2
y = (height - text_height) / 2
# 绘制文字
draw.text((x, y), text, fill='white', font=font)
# 添加边框
draw.rectangle([0, 0, width-1, height-1], outline='white', width=2)
return img
# 使用示例
img = create_placeholder(800, 600)
img.save('placeholder.png')
JavaScript(Canvas)
function generatePlaceholder(width, height, text) {
const canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
const ctx = canvas.getContext('2d');
// 随机颜色
const hue = Math.random() * 360;
ctx.fillStyle = `hsl(${hue}, 60%, 50%)`;
ctx.fillRect(0, 0, width, height);
// 文字
ctx.fillStyle = 'white';
ctx.font = `${Math.min(width, height) * 0.08}px Arial`;
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
const displayText = text || `${width}x${height}`;
ctx.fillText(displayText, width/2, height/2);
// 边框
ctx.strokeStyle = 'white';
ctx.lineWidth = 2;
ctx.strokeRect(1, 1, width-2, height-2);
return canvas.toDataURL();
}
// 使用
const placeholderURL = generatePlaceholder(800, 600);
document.getElementById('myImage').src = placeholderURL;
Shell脚本(使用ImageMagick)
#!/bin/bash
generate_placeholder() {
local width=${1:-400}
local height=${2:-300}
local text="${3:-${width}x${height}}"
local output="${4:-placeholder.png}"
# 生成随机颜色
local r=$((RANDOM % 256))
local g=$((RANDOM % 256))
local b=$((RANDOM % 256))
# 创建占位图
convert -size ${width}x${height} \
xc:"rgb($r,$g,$b)" \
-font Arial \
-pointsize $((height/10)) \
-fill white \
-gravity center \
-annotate 0 "$text" \
-stroke white -strokewidth 2 \
-draw "rectangle 1,1 $((width-2)),$((height-2))" \
"$output"
echo "已生成: $output (${width}x${height})"
}
# 使用示例
generate_placeholder 800 600 "测试图片"
Node.js(使用sharp库)
const sharp = require('sharp');
async function createPlaceholder(width, height, text) {
const svg = `
<svg width="${width}" height="${height}" xmlns="http://www.w3.org/2000/svg">
<rect width="100%" height="100%"
fill="hsl(${Math.random() * 360}, 60%, 50%)"
stroke="white" stroke-width="2"/>
<text x="50%" y="50%" text-anchor="middle"
dy=".3em" fill="white" font-size="${Math.min(width, height) * 0.08}px">
${text || `${width}x${height}`}
</text>
</svg>`;
const buffer = Buffer.from(svg);
return sharp(buffer)
.png()
.toBuffer();
}
// 使用
createPlaceholder(800, 600).then(buffer => {
require('fs').writeFileSync('placeholder.png', buffer);
});
命令行工具(基于Python)
创建可复用脚本 placeholder.py:
#!/usr/bin/env python3
import sys
from PIL import Image, ImageDraw, ImageFont
import random
def main():
if len(sys.argv) < 3:
print("用法: python placeholder.py <宽度> <高度> [文字]")
sys.exit(1)
width = int(sys.argv[1])
height = int(sys.argv[2])
text = sys.argv[3] if len(sys.argv) > 3 else f"{width}x{height}"
img = Image.new('RGB', (width, height),
(random.randint(0,255), random.randint(0,255), random.randint(0,255)))
draw = ImageDraw.Draw(img)
# 添加文字
font = ImageFont.load_default()
text_bbox = draw.textbbox((0, 0), text, font=font)
x = (width - (text_bbox[2] - text_bbox[0])) / 2
y = (height - (text_bbox[3] - text_bbox[1])) / 2
draw.text((x, y), text, fill='white', font=font)
draw.rectangle([0, 0, width-1, height-1], outline='white', width=2)
output = f"placeholder_{width}x{height}.png"
img.save(output)
print(f"已生成: {output}")
if __name__ == "__main__":
main()
使用建议
- 在线服务:使用 https://placeholder.com 或 https://via.placeholder.com
- 快速原型:推荐使用浏览器端的JavaScript方法
- 批量生成:使用Python或Shell脚本
- 服务器端:使用Node.js + sharp库
选择哪种方法取决于你的技术栈和具体需求,需要更多定制化功能(如渐变、图案等)吗?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播