测量包含中文、英文、数字和特殊字符的混合文本宽度需要考虑不同字符集的宽度特性。以下是几种可靠的实现方法:
function getTextWidth(text, fontStyle = '14px sans-serif') {
const canvas = document.createElement('canvas');
const context = canvas.getContext('2d');
context.font = fontStyle;
return context.measureText(text).width;
}
// 使用示例
const width = getTextWidth("你好Hello123!@#");
console.log(width);
function getTextWidth(text, fontStyle = '14px sans-serif') {
const span = document.createElement('span');
span.style.cssText = `
position: absolute;
visibility: hidden;
font: ${fontStyle};
white-space: nowrap;
`;
span.textContent = text;
document.body.appendChild(span);
const width = span.offsetWidth;
document.body.removeChild(span);
return width;
}
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
public int getTextWidth(String text, Font font) {
BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
Graphics g = img.getGraphics();
g.setFont(font);
FontMetrics fm = g.getFontMetrics();
return fm.stringWidth(text);
}
from PIL import ImageFont, ImageDraw
def get_text_width(text, font_path, font_size=14):
font = ImageFont.truetype(font_path, font_size)
return font.getlength(text) # 在Pillow 8.0.0+中使用getlength
# 使用示例
width = get_text_width("你好Hello123!@#", "msyh.ttf")
using System.Drawing;
public float GetTextWidth(string text, Font font) {
using (var bmp = new Bitmap(1, 1)) {
using (var g = Graphics.FromImage(bmp)) {
return g.MeasureString(text, font).Width;
}
}
}
选择哪种方法取决于您的具体应用场景和开发环境。浏览器环境推荐使用Canvas API,服务器端则根据语言选择相应方案。