as3把2D图片分析成文本文本实现代码

 

对于一个像素的任意点,可以得到他的灰度。灰度计算公式

 代码如下 复制代码

getR(color) * 0.299 + getG(color) * 0.587 + getB(color) * 0.114;

而每一个文字也有其对应的明暗,比如实心的一个球,就要比空心的显得更暗,因为它更加的紧密,求文字明暗的方法

 代码如下 复制代码
private function getDensity(t:String):Number {
            var ttf:TextField = new TextField;
            ttf.autoSize = TextFieldAutoSize.LEFT;
            ttf.text = t;
 
            var bmd:BitmapData = new BitmapData(ttf.width, ttf.height, false, 0xffffff);
            bmd.draw(ttf);
            var c:int = 0;
            for (var x:int = 0; x < bmd.width;x++ ) {
                for (var y:int = 0; y < bmd.height;y++ ) {
                    if (bmd.getPixel(x,y)!=0xffffff) {
                        c++;
                    }
                }
            }
            return c / ttf.width / ttf.height;
        }

完整代码

 代码如下 复制代码

package
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.geom.Rectangle;
    import flash.net.FileReference;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFormat;
    import sliz.miniui.Button;
    import sliz.utils.UIUtils;
    /**
     * ...
     * @author lizhi
     */
    public class TestText extends Sprite
    {
        private var fonts:Array = [];
        private var tf:TextField;
 
        private var file:FileReference;
        private var loader:Loader;
        public function TestText()
        {
            tf = new TextField;
            var tfm:TextFormat = new TextFormat;
            tfm.size = 10;
            tfm.leading = -2;
            tf.defaultTextFormat = tfm;
            tf.autoSize = TextFieldAutoSize.LEFT;
            var text:String = " ";
            var min:int = 32;
            var max:int = 120;
            while (++min < max) {
                var c:String = String.fromCharCode(min);
                text += c;
            }
            text += "           .'"*#@%+-)(TiI?><~";
            for (var i:int = 0; i < text.length;i++ ) {
                c = text.charAt(i);
                fonts.push({d:getDensity(c),t:c});
            }
            fonts.sortOn("d", Array.NUMERIC|Array.DESCENDING);
 
            //[Embed(source = '123.png')]var ic:Class;
            //var bmd:BitmapData = (new ic as Bitmap).bitmapData;
            //render(bmd);
            addChild(tf);
 
            UIUtils.changeStage(stage);
 
            var explorer:Button = new Button("explorer image", 2, 20, this, browse);
 
            loader = new Loader();
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoad2);
        }
 
        private function render(bmd:BitmapData):void {
            tf.width = 1000;
            tf.height = 1000;
            var x:int = 0;
            var y:int = 0;
            tf.text = "";
            while (y < bmd.height) {
                while (x<bmd.width) {
                    var gray:Number = getGray(bmd.getPixel(x, y)) / 0xff;
                    var index:int = int((fonts.length - 1) * gray);
                    tf.appendText(fonts[index].t);
                    var r:Rectangle = tf.getCharBoundaries(tf.text.length - 1);
                    x += r.width;
                }
                tf.appendText("n");
                y = r.bottom
                x = 0;
            }
        }
 
        private function getDensity(t:String):Number {
            var ttf:TextField = new TextField;
            ttf.autoSize = TextFieldAutoSize.LEFT;
            ttf.text = t;
 
            var bmd:BitmapData = new BitmapData(ttf.width, ttf.height, false, 0xffffff);
            bmd.draw(ttf);
            var c:int = 0;
            for (var x:int = 0; x < bmd.width;x++ ) {
                for (var y:int = 0; y < bmd.height;y++ ) {
                    if (bmd.getPixel(x,y)!=0xffffff) {
                        c++;
                    }
                }
            }
            return c / ttf.width / ttf.height;
        }
 
        private function getR(color:uint):uint {
            return color << 8 >>> 24;
        }
        private function getG(color:uint):uint {
            return color << 16 >>> 24;
        }
        private function getB(color:uint):uint {
            return color << 24 >>> 24;
        }
        private function getGray(color:uint):uint {
            return getR(color) * 0.299 + getG(color) * 0.587 + getB(color) * 0.114;
        }
 
        private function browse(e:Event):void {
            file = new FileReference();
            file.browse();
            file.addEventListener(Event.SELECT, onSelect);
        }
 
        private function onSelect(e:Event):void {
            file.load();
            file.addEventListener(Event.COMPLETE, onLoad);
        }
 
        private function onLoad(e:Event):void {
 
            loader.loadBytes(file.data);
 
        }
 
        private function onLoad2(e:Event):void {
            var content:Bitmap = loader.contentLoaderInfo.content as Bitmap;
            render(content.bitmapData);
        }
    }
 
}

时间: 2024-10-28 08:46:23

as3把2D图片分析成文本文本实现代码的相关文章

jQuery鼠标经过方形图片切换成圆边效果代码分享_jquery

这是一款基于jQuery鼠标经过方形图片切换成圆边特效代码,点击图片会弹出浮层,用户还可以自定义对应图片的标题与文字说明,适合图片页面的展示,是一款非常实用的图片特效源码. 运行效果图: --------------------------------效果演示 源码下载---------------------------------- 鼠标经过方形图片切换成圆边效果 点击图片会弹出浮层 为大家分享的jQuery鼠标经过方形图片切换成圆边效果代码如下 <head> <title>j

Word文档批量转换成TXT文本

使用word编辑文档的时候,不仅可以保存成Word格式,也可以保存为其它格式.但有的时候需要将大批的已经编辑完成的Word文档转换成文本格式或其他格式文档,怎么办?如果通过"另存为"将是一件十分费时费力的事情.可能有人说了利用第三方工具软件吧,那是另一话题.在这里笔者要告诉大家的是:批量转换文档格式不求"人",完全可以借助Word本身自带的功能就可以完成批量转换文档格式的工作.为了叙述方便,专家以将Word文档格式批量转换成TXT文本格式为例来介绍其转换过程,具体操

word移动图片、形状、文本框或艺术字

  当向 2007 Microsoft Office system 文档添加图片 (图片:可以取消组合并作为两个或多个对象操作的文件(如图元文件),或作为单个对象(如位图)的文件.).形状或其他对象 (对象:表.图表.图形.等号或其他形式的信息.例如,在一个应用程序中创建的对象,如果链接或嵌入另一个程序中,就是 OLE 对象.)时,这些对象将自动堆叠在各个层中.当对象重叠(最上面的对象覆盖它下方的对象的一部分)时,您可以看到堆叠顺序. 显示重叠效果的堆叠形状 您可以移动堆中的单个图片.形状或其他

小白求大神解答,怎么在布局文件里让左边的图片和右边的文本框高度一致

问题描述 小白求大神解答,怎么在布局文件里让左边的图片和右边的文本框高度一致 代码如下:<?xml version=""1.0"" encoding=""utf-8""?> android:layout_width=""match_parent"" android:layout_height=""match_parent"" andro

将Model对象转换成json文本或者json二进制文件

将Model对象转换成json文本或者json二进制文件 https://github.com/casatwy/AnyJson 注意:经过测试,不能够直接处理字典或者数组 主要源码的注释 AJTransformer.h 与 AJTransformer.m // // AJTransformer.h // AnyJson // // Created by casa on 14-9-19. // Copyright (c) 2014年 casa. All rights reserved. // #i

jsp中如何判断文本框输入的和图片上的验证码一致,代码如下:

问题描述 jsp中如何判断文本框输入的和图片上的验证码一致,代码如下: var aa=$("#vadCode").val(); alert(aa); 这里获取图片上的验证码为空,请问该如何获取 解决方案 你在生成验证码图片的同时,把图片上的验证码放到input框里不就可以取值了吗? 解决方案二: 验证码 是先用 验证码生成器生成一个随机的6位数字,然后在将这6个数字生成一张图片的,你直接获得肯定是不对的 解决方案三: 你要用ajax发送输入的aa到服务器端和用session存储的验证码

请问,ASP.net如何把带html格式的内容转换成纯文本的文字

问题描述 请问,ASP.net如何把带html格式的内容转换成纯文本的文字 解决方案 解决方案二:使用正则表达式对字符串进行过滤解决方案三:publicstringLostHTML(stringStr){stringRe_Str="";if(Str!=null){if(Str!=string.Empty){stringPattern="<\/*[^<>]*>";Re_Str=Regex.Replace(Str,Pattern,"&q

php把html转换成text文本函数

文章为各位提供一个php html转换成text文本函数哦,如果喜欢就行了. <?php if(!defined('DEDEINC')) {  exit("Request Error!"); } function SpHtml2Text($str) {  $str = preg_replace("/<sty(.*)/style>|<scr(.*)/script>|<!--(.*)-->/isU","",$

图片加水印时文本为unicode编码乱码问题

问题描述 请教一个问题.我在把文字写入图片时,如果字符串为unicode编码的话,生成的图片部分字符乱码,不过这个字符串如果使用log4j编码为utf-8打印到日志文件时是正常的,但在console控制台打印出来跟图片是一样的,也是部分字符乱码那.但在debug时看到的字符串是正常的,写到图片里就乱码了.代码如下:/** * <pre> * 文字水印. * 超过屏幕可视区宽度时自动换行: * </pre> * * @param pressTexts 水印文字,字符串数组 * @pa