文字图片化

RT,实现类似现在网上流行的长微博生成器,就是把长文字转成图片。当然功能比不上网上流传的,不知道网上那些用的什么方法。我这是用的HTML5的Canvas特性,也算一种实现吧。

    示例地址: TextToImage,仅作大家交流使用。

附加_2012年4月18日11:13:00:之前刚分享此代码的时候的版本是不能处理分行的,现在可以了。在做断行的过程,我发现:一个好算法,是胜过无数行苦逼的杂乱代码的...

标签: <无>

代码片段(2)[全屏查看所有代码]

1. [图片] QQ截图20120417233248.jpg

2. [代码][HTML]代码

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

<html>

<head>

<script type="text/javascript">

    function $(id) {

        return document.getElementById(id);

    }

    function textToImg() {

        var len = $(‘len‘).value || 30;

        var i = 0;

        var fontSize = $(‘fontSize‘).value || 15;

        var fontWeight = $(‘fontWeight‘).value || ‘normal‘;

        var txt = $("txt").value;

        var canvas = $(‘canvas‘);

        if (txt == ‘‘) {

            alert(‘请输入文字!‘);

            $("txt").focus();

        }

        if (len > txt.length) {

            len = txt.length;

        }

        canvas.width = fontSize * len;

        canvas.height = fontSize * (3 / 2)

                * (Math.ceil(txt.length / len) + txt.split(‘\n‘).length - 1);

        var context = canvas.getContext(‘2d‘);

        context.clearRect(0, 0, canvas.width, canvas.height);

        context.fillStyle = $("showcolor").innerHTML;

        context.font = fontWeight + ‘ ‘ + fontSize + ‘px sans-serif‘;

        context.textBaseline = ‘top‘;

        canvas.style.display = ‘none‘;

        console.log(txt.length);

        function fillTxt(text) {

            while (text.length > len) {

                var txtLine = text.substring(0, len);

                text = text.substring(len);

                context.fillText(txtLine, 0, fontSize * (3 / 2) * i++,

                        canvas.width);

            }

            context.fillText(text, 0, fontSize * (3 / 2) * i, canvas.width);

        }

        var txtArray = txt.split(‘\n‘);

        for ( var j = 0; j < txtArray.length; j++) {

            fillTxt(txtArray[j]);

            context.fillText(‘\n‘, 0, fontSize * (3 / 2) * i++, canvas.width);

        }

        var imageData = context.getImageData(0, 0, canvas.width, canvas.height);

        var img = $("img");

        img.src = canvas.toDataURL("image/png");

    }

    function changeColor() {

        var c = $("text");

        var ctx = c.getContext("2d");

        var red = $("red");

        var green = $("green");

        var blue = $("blue");

        ctx.fillStyle = "rgb(" + red.value + "," + green.value + ","

                + blue.value + ")";

        $("showcolor").innerHTML = ctx.fillStyle;

        ctx.fillRect(0, 0, 100, 100);

        //$(‘canvas‘).getContext(‘2d‘).fillStyle=$("showcolor").innerHTML;

    }

</script>

</head>

<body>

<div style="float: left"><textarea id="txt"

    style="width: 450px; height: 400px;">如果您的长微博字数超过了140个字的限制,在这里输入微博内容,点击右方的“生成图片”,鼠标右击右边“文字”,“图片另存为...”,保存图片后,就可以直接发到微博里了,赶紧试试吧!</textarea></div>

<div style="width: 200px; height: 100px; float: left; clear: right">

<table>

    <tr>

        <td><label>字体大小:</label><input size="4" id=‘fontSize‘ value=‘15‘ />px</td>

    </tr>

    <tr>

        <td><label>字体精细:</label><select id="fontWeight">

            <option value="normal">正常</option>

            <option value="bold">粗</option>

        </select></td>

    </tr>

    <tr>

        <td><label>每行显示:</label><input size="4" id=‘len‘ value="40" />个字</td>

    </tr>

    <tr>

        <td><canvas id="text" width="100" height="100"></canvas>

        <p>Red: <input type="range" id="red" min="0" max="255" value="0"

            onchange="changeColor();" /></p>

        <p>Green:<input type="range" id="green" min="0" max="255"

            value="0" onchange="changeColor();" /></p>

        <p>Blue: <input type="range" id="blue" min="0" max="255" value="0"

            onchange="changeColor();" /></p>

        目前的颜色:<span id="showcolor"></span></td>

    </tr>

    <tr>

        <td>

        <button onclick=

    textToImg();;

>生成图片</button>

        </td>

    </tr>

</table>

</div>

<canvas id="canvas" style="display:block"></canvas>

<div style="margin-left: 650px"><img id="img"

    style="border: 1px solid" /></div>

<script>

    changeColor();

</script>

</body>

时间: 2024-08-25 09:59:42

文字图片化的相关文章

谈谈文字图片粒子化

之前写了谈谈文字图片像素化,主要是为了将文字和图片像素化后的坐标提取出来,而本篇所讲即为像素化后的粒子化过程. 先上一个简单的demo -> 粒子化demo,本篇的目的就是为了讲解怎样做这样的简单demo(大牛请无视):同时会介绍一些优秀的demo供大家参考. 主要思路 首先我们谈谈粒子化的主要思路. 像素化后(不知道怎样像素化,参考谈谈文字图片像素化),我们得到了所需图像或者文字的具体坐标,我们将它们形象地用一个个的粒子表示(这里用了圆形),得到的坐标即是粒子的最终位置.粒子的初始位置在哪里?

文字粒子化(Canvas)

文字粒子化,额或者叫小圆圈化... 1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title></title> 6 </h

文字粒子化

事情没有想象中那么难--JX官网首页3D粒子效果 随便谈谈用canvas来实现文字图片粒子化

&lt;转载&gt;使CSS文字图片div元素居中方法之水平居中的几个方法

文字居中,文字垂直居中水平居中,图片居中,图片水平居中垂直居中,块元素垂直居中?当我们在做前端开发是时候关于css居中的问题是很常见的.情 况有很多种,不同的情况又有不同的解决方式.水平居中的方式解决的时候相对来说通过css比较容易设置,垂直居中相对比较棘手. 先来说一下水平居中的不同情况与不同解决方法吧. 1文本,图片等行内元素的水平居中方法呢比较简单.直接给父元素设置一个text-align:centent属性就可以实现元素的水平居中了. 2 确定宽度的块级元素水平居中怎么设置呢?设置方法也

iOS.TextKit.02.文字图片混合排版

1.案例如图 2.代码 TextKit02ViewController.h #import <UIKit/UIKit.h> @interface TextKit02ViewController : UIViewController @property (nonatomic,strong) IBOutlet UITextView *textView; @property (nonatomic,weak) IBOutlet UIImageView *imageView; // 文本可以排版的区域

c# post文字图片至服务器

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/41764521 最近由于项目需要实现c#提交文字及数据至服务器,因此研究了一下c# php数据传送: 下面用一个示例来演示,c# post文字+图片 ,php端接收: post提交数据核心代码(post数据提交) using System; using System.Collections.Generic; using System.Linq; using System.Tex

button 文字图片上下/左右经常会用到,记录一下

上下:    self.button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;//使图片和文字水平居中显示    [self.button setTitleEdgeInsets:UIEdgeInsetsMake(self.button.imageView.frame.size.height+10 ,-self.button.imageView.frame.size.width, 0.0,0.0)

Python PIL创建文字图片

PIL库中包含了很多模块,恰当地利用这些模块可以做许多图像处理方面的工作. 下面是我用来生成字母或字符串测试图片而写的类及测试代码. 主要用到的模块: PIL.Image,PIL.ImageDraw,PIL.ImageFont PIL.Image用来生成一个空的图片,ImageDraw用来在空图片上画图及写字符,ImageFont则是创建需要使用到的字体 #-*- coding:gb2312 -*- from PIL import Image,ImageDraw,ImageFont,ImageO

php生成文字图片效果

php生成文字图片效果最近看到php的GD功能,试着做了一个基本生成文字图片效果的代码: 显示文字图片页面:demo.php<?php$str = $_REQUEST['str'] ? $_REQUEST['str']:"暂无输入";//$str = "中华人民共和国";$im = imagecreate(200,200);$white = imagecolorallocate($im,0xFF,0xFF,0xFF);imagecolortransparent