文字定位源码

简介: 文字定位源码

源码:

<!DOCTYPE html>
<!--
    Author:苏一恒
    Date:2019/10/9 14:10
    Motto:
        The best time to plant trees is ten years ago, followed by now. 
        种树最好的时间是十年前,其次是现在。
 -->
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>文字定位</title>
    <style>
        body {
            background: #eeeeee;
        }
 
        #canvas {
            background: #ffffff;
            margin-top: 5px;
            margin-left: 10px;
            -webkit-box-shadow: 4px 4px 8px rgba(0, 0, 0, 0.5);
            -moz-box-shadow: 4px 4px 8px rgba(0, 0, 0, 0.5);
            box-shadow: 4px 4px 8px rgba(0, 0, 0, 0.5);
            border: 1px solid rgba(0, 0, 0, 0.2);
        }
    </style>
</head>
<body>
<canvas id='canvas' width='780' height='440'>canvas not supports</canvas>
 
<script>
    'use strict';
 
    let canvas = document.getElementById('canvas'),
        context = canvas.getContext('2d'),
        fontHeight = 24,
        alignValues = ['start','center','end'],
        baseLineValue = ['top','middle','bottom','alphabetic', 'ideographic', 'hanging'],
        x,y;
 
    //Function……
 
    let drawGrid=(color, stepx, stepy)=> {
        context.save();
 
        context.strokeStyle = color;
        context.fillStyle = '#ffffff';
        context.lineWidth = 0.5;
        context.fillRect(0, 0, context.canvas.width, context.canvas.height);
 
        for (let i = stepx + 0.5; i < context.canvas.width; i += stepx) {
            context.beginPath();
            context.moveTo(i, 0);
            context.lineTo(i, context.canvas.height);
            context.stroke();
        }
 
        for (let i = stepy + 0.5; i < context.canvas.height; i += stepy) {
            context.beginPath();
            context.moveTo(0, i);
            context.lineTo(context.canvas.width, i);
            context.stroke();
        }
 
        context.restore();
    };
 
    /**
     * 绘制(x,y)的标记点
     */
    let drawTextMarker=()=>{
      context.fillStyle='yellow';
      context.fillRect(x,y,7,7);
      context.strokeRect(x,y,7,7);
    };
 
    /**
     * 绘制文本
     * @param text
     * @param textAlign
     * @param textBaseLine
     */
    let drawText=(text,textAlign,textBaseLine)=>{
        if (textAlign)context.textAlign = textAlign;
        if (textBaseLine)context.textBaseline=textBaseLine;
 
        context.fillStyle='cornflowerblue';
        context.fillText(text,x,y);
    };
 
    /**
     * 绘制文本的线
     */
    let drawTextLine=()=>{
        context.strokeStyle='gray';
 
        context.beginPath();
        context.moveTo(x,y);
        context.lineTo(x+738,y);
        context.stroke();
    };
 
 
    //Init……
    context.font='oblique normal bold 24px palatino';
 
    drawGrid('lightgray',10,10);
 
    for (let align = 0;align<alignValues.length;++align){
        for (let baseline = 0;baseline<baseLineValue.length;baseline++){
            x= 20+align*fontHeight*15;
            y=20+baseline*fontHeight*3;
 
            drawText(alignValues[align]+'/'+baseLineValue[baseline],alignValues[align],baseLineValue[baseline]);
            drawTextMarker();
            drawTextLine();
        }
    }
 
</script>
</body>
</html>
相关文章
|
5月前
|
Java 数据安全/隐私保护 计算机视觉
银行转账虚拟生成器app,银行卡转账截图制作软件,java实现截图生成工具【仅供装逼娱乐用途】
本内容提供Java生成自定义图片的示例代码,涵盖基础图像创建、文本添加及保存功能,适合学习2D图形编程。包括教学示例图片生成、文本图层处理和数字水印技术实现方案。
|
10月前
|
数据可视化
优化流程:让直播团队运营事半功倍
在直播电商领域,企业增长依赖于团队运营效率的提升。常见问题包括任务堆积、流程复杂化和数据利用率低。为解决这些问题,需构建标准化流程、提升工具使用能力和建立实时反馈机制。板栗看板通过流程标准化、跨部门协同和数据可视化,优化直播团队效率。持续提升效率还需定期优化流程、引入智能化工具和培养积极的团队文化。
|
缓存 Ubuntu Linux
在Linux中,Yum、Dnf、Apt-get和Pacman有何区别?
在Linux中,Yum、Dnf、Apt-get和Pacman有何区别?
|
缓存 算法 前端开发
如何降低 SPA 单页面应用的内存占用
单页面应用(SPA)由于其良好的用户体验而被广泛使用,但随着应用复杂度的增加,内存占用问题日益突出。本文将介绍几种有效降低SPA内存占用的方法,包括代码分割、懒加载、状态管理优化等技术,帮助开发者提升应用性能。
|
数据库
树的分类有哪些?
本文介绍了树的多种类型,包括二叉树、二叉搜索树、完全二叉树、AVL树、红黑树、B树和B+树,并解释了每种树的特点和用途。
541 0
树的分类有哪些?
|
人工智能 云计算
剧透:巴黎奥运会用上了AI转播
阿里云AI增强技术登场。
345 8
剧透:巴黎奥运会用上了AI转播
|
机器学习/深度学习 计算机视觉
【YOLOv8改进】骨干网络: SwinTransformer (基于位移窗口的层次化视觉变换器)
YOLO目标检测创新改进与实战案例专栏介绍了YOLO的有效改进,包括使用新型视觉Transformer——Swin Transformer。Swin Transformer解决了Transformer在视觉领域的尺度变化和高分辨率问题,采用分层结构和移位窗口自注意力计算,适用于多种视觉任务,如图像分类、目标检测和语义分割,性能超越先前最佳模型。此外,文章还展示了如何在YOLOv8中引入Swin Transformer,并提供了相关代码实现。
|
安全 算法 网络安全
导航【网络安全】
导航【网络安全】
224 0
|
人工智能 API 算法框架/工具
课时1:ModelScope社区Library技术架构介绍
课时1:ModelScope社区Library技术架构介绍
|
Java
一行注解,省却百行代码:深度解析@RequiredArgsConstructor的妙用
一行注解,省却百行代码:深度解析@RequiredArgsConstructor的妙用
848 0