临风小筑 http://www.shirne.com/ 临风小筑博主Shirne,Web开发工程师。 专注ASP,PHP后台开发,结合前台Javascript,Css等技术开发各种订制功能。 手机网站开发。 作品,感想,生活相册。 zh-cn 临风网站管理系统1.0.0 shirne@126.com <![CDATA[Flash AS3 二维码生成工具]]> 临风站长 Flash 2014-7-23 6:39:43 老早就想做一个功能比较全面的二维码工具,发现ZXing库还是比较全的,AS3的库也有,就用Flash做了一个,效果展示:

初步的功能其实还好,但问题就卡在编码上,生成出来的汉字扫出来就是 ?? ,这肯定是编码问题,于是对ZXing(AS3)编码流程仔细地检查,发现有一步编码中没有将编码参数传入,于是里面使用了默认的 iso-8859-1 的编码。原来加上参数就好了。

//文件:com\google\zxing\qrcode\QRCodeWriter.as 63
Encoder.encode(contents, errorCorrectionLevel, code);

//修改
Encoder.encode(contents, errorCorrectionLevel, code, hints);

 

解决了编码问题,解码问题又来了,发现生成的二维码中的汉字,解码出来全是莫名其妙的符号(不是问号),我很熟悉这些符号,就是编辑器使用iso-8859-1字符集打开utf-8文档中看到的汉字部分。还是编码问题,但这次麻烦大了,不只是个参数问题,而是解码算法,原代码是直接读一个字节,就转换String,而没有像编码中那样用Flash的ByteArray中的方法,经过反复测试,只需要将转换的部分改成写入一个ByteArray,最后使用ByteArray的readMultiByte的方法传入设置的编码就好了。

//文件:com\google\zxing\qrcode\decoder\DecodedBitStreamParser
//修改方法
private static function decodeByteSegment(bits:BitSource, result:StringBuilder, count:int, currentCharacterSetECI:CharacterSetECI, byteSegments:ArrayList, hints:HashTable):void
		{
			// Don't crash trying to read more bits than we have available.
			if (count << 3 > bits.available())
			{
				throw FormatException.getFormatInstance();
			}
			
			var encoding:String = 'iso-8859-1';
			if (hints.containsKey(DecodeHintType.CHARACTER_SET)) {
				encoding = String(hints.getValueByKey(DecodeHintType.CHARACTER_SET));
			}
			
			var readBytes:Array = new Array(count);
			var bytes:ByteArray = new ByteArray();
			var bit:int;
			for (var i:int = 0; i < count; i++)
			{
				bit = bits.readBits(8);
				bytes.writeByte(bit);
				readBytes[i] = String.fromCharCode(bit);
			}
			bytes.position = 0;
			result.Append(bytes.readMultiByte(bytes.length,encoding));
			byteSegments.addElement(readBytes);
		}

 源码下载:http://pan.baidu.com/s/1qWzcpkw  提取密码:gi23

]]>
<![CDATA[PHP的switch陷阱]]> 临风站长 PHP 2014-4-20 10:00:10 自从上个月经历了博客内容丢失的风波,再加上最近确实比较忙,没心情更新博客了。

有空就重新做下博客的系统。

这几天做开发发现一个莫名其妙的问题,就是百度安全检测网站有XSS漏洞,而那个字段是经过过滤的。大致的过滤流程如下:

可以看出,这个字段要么是数字格式,按天来计算,要么是时间格式,时间格式不对会自动处理成当天日期。

$date=$_GET['date'];

switch($date){
	case 1:
	$val=date_add(date_create(),new DateInterval('P1D'));
	break;
	case 2:
	$val=date_add(date_create(),new DateInterval('P2D'));
	break;
	default:
	if(strtotime($date)){
		$val=new DateTime($date);
	}else{
		$val=new DateTime();
	}
}
echo $val->format('Y-m-d H:i:s');

 

那又是怎么形成XSS的呢?

原来就是因为switch中的选项使用了数值,而变量是从外部获取的字符串,所以执行switch的时候内部有一个类型的转换,这样,如果提交的参数是可转换的,并且转换后的值在列表中,那么,原始值没有做重新赋值,就会导致原始值在下面使用的时候还是字符串,被转换前的字符串。大家都知道,PHP转换整型是判断开始处的字符,所以只要提交的参数以数字开头,转换的时候就可以成功转换成数字,如果不对原始值处理,原始值的数字后面可以附加任何内容(比如:传入1和 1"onload="" 结果一样)。好危险啊!~

要解决这个问题,简单点,需要在选项上明确设置字符串,如:

$date=$_GET['date'];
switch($date){
	case "1":
	$val=date_add(date_create(),new DateInterval('P1D'));
	break;
	case "2":
	$val=date_add(date_create(),new DateInterval('P2D'));
	break;
	default:
	if(strtotime($date)){
		$val=new DateTime($date);
	}else{
		$val=new DateTime();
	}
}
echo $val->format('Y-m-d H:i:s');

 

这样判断的时候就不会经过类型转换,只要字符串不同结果就不一样。

]]>
<![CDATA[jQuery插件之Textarea自动长高]]> JAVASCRIPT 2014-3-9 10:27:35 做一个小项目,要用到Textarea自动长高的效果,以前做过这个效果,方法是绑定keyup事件,根据字体大小和行高,以及换行符的个数计算实时高度。但是,对于分行短的可以,长篇的就有问题了。于是百度了下,找到一篇文章,方法是建一个隐藏textarea,根据scrollHeight来获取高度。这方法不错。不过,既然是scrollHeight可以获取实时高度,为什么还要新建一个呢?其实这是为了兼容高度减小的效果,scrollHeight最小高度总是textarea自身的高度,所以,根据自身的scrollHeight就只能增长,不能减少。

看了下代码,效果虽然达到了,考虑不够全面,没考虑到布局上需求textarea最小高度的问题,代码里设定了最小高度是20,另外,没考虑textarea样式中的字体和行高,所以不太精确。基于这些问题,作了修正,写了个jQuery插件出来,特此共享

 

jQuery.fn.extend({
	'autoHeight':function(){
		this.keyup(function(){
			var minHeight=40;
			if(!$(this).attr('min-height')){
				minHeight=$(this).innerHeight();
				$(this).attr('min-height',minHeight);
			}else{
				minHeight=$(this).attr('min-height');
			}
			if($("#_hidetextarea").length<=0){
				$("body").append('<textarea id="_hidetextarea" style="visibility:hidden;height:0;border:0;padding:0;margin:0;display:none;"></textarea>');
			}
			var mh=$("#_hidetextarea");
			mh.css({display:'',width:$(this).width(),'fontSize':$(this).css('fontSize'),'lineHeight':$(this).css('lineHeight')}).val($(this).val());
			$(this).css("height",Math.max(minHeight,mh[0].scrollHeight));
			mh.css('display','none');
		});
	}
});

 

]]>
<![CDATA[Joomla 3不支持magic_quotes_gpc配置的解决办法]]> PHP 2014-2-28 21:26:43 去年底的时候一个客户的网站要求的权限非常细致,就想到了Joomla,这个系统虽然比较复杂,但后台的权限控制功能非常细致,而且也使用的Bootstrap风格,感觉很舒服,于是就用了Joomla做二次开发。

也是第一次用Joomla,安装并调整了手机版,评论,等功能,最后在客户买好的空间里上传测试才发现,Joomla 3不支持开启了magic_quotes_gpc配置的服务器,编辑框里的代码全部被转义了。还以为万网的服务器多好,原来就这样子,只有几个配置选项,关不掉magic_quotes_gpc,运行时又有限制。没有办法,就想到在程序初始化时去除被转义过的表单值。

Joomla的前后台是分开的两个Application,所以要统一加,还要在框架里加,libraries是Joomla的库文件,非常庞大,但是层次分明,application目录下就是Joomla的application原型,于是在初始化方法里加入以下代码:

 

//function __construct:
// Remove slashes
if ( get_magic_quotes_gpc())
{
	$_GET = self::stripslashesRecursive($_GET);
	$_POST = self::stripslashesRecursive($_POST);
	$_REQUEST = self::stripslashesRecursive($_REQUEST);
}


/**
 * 
 */
public static function stripslashesRecursive(array $array)
{
	foreach ($array as $k => $v) {
		if (is_string($v)) {
			$array[$k] = stripslashes($v);
		} else if (is_array($v)) {
			$array[$k] = self::stripslashesRecursive($v);
		}
	}
	return $array;
}

 

问题解决。

]]>
<![CDATA[IIS PHP Sql Server搭配小记]]> PHP 2014-1-9 19:39:05 研究了几天,问题终于都搞定了,今天就记录一下其中的关键点备忘。

步骤:

一,在Win2003 IIS6上配置PHP+MySQL环境

说起这个话题,我也是很久没动了,以前刚学php的时候也进行过很多次配置,本以为不是问题,谁知道搞了两天才弄好(当然中间穿插了其它工作要做)。以前记得PHP搭配IIS官方有一个msi的安装包,可以自动配置到IIS上。结果去官网一看,新版本的没有msi包了,都是压缩包,只有5.3及以下才有安装包。

第一次尝试以ISAPI方式搭配,没有成功,调试了几处配置,不知道是哪里问题。

于是下载了5.3的安装包,安装的时候选择了fastcgi方式,又一想IIS6还不支持fastcgi,需要去微软下载fastcgi软件,软件不大,安装也没问题,看了下说明,在系统盘有一个配置文件,只要在里面把php文件配置上就可以了。Php安装好,简单的测试phpinfo没问题,以为大功告成了,谁知道上网站一看,依旧是一片空白,看来是错误报不出来。于是继续找相关资料,看来还需要在php中设置几个fastcgi和cgi的参数。其实都是一些细节,只要严格按照官方的文档去做,基本上就没问题的,这里就不详细写了。因为我这里也只是测试的时候用,真正上线的时候撤掉旧的ASP系统,要把服务器换成Linux上线的。

下面是安装Mysql,这个本来没什么问题的,但是我下载了最新版本的Mysql,结果需要.net3.5还是4.0,于是又要下载.net,安装的时候又提示缺少个什么组件,果断放弃,选择了版本略低的Mysql,也没问题。

二,从旧的SQL Server数据库中导出数据到新的MySQL中,两套系统结构不一样,只是同一类型的平台,业务逻辑相似,但细节还是有很大差别的,所以,导入的时候只求基础业务逻辑没问题就行。

关键点一、PHP中连接SQL Server

PHP对数据库的支持还是很广泛的,包括了抽象层的ODBC,PDO等,以及对应数据库的支持,MySQL的Mysql,Mysqlnd,Mysqli,Oracle,MSSQL,IBM,Mongo等等。但是用的最多的还是MySQL,其它的也没怎么测试,总觉得原理都是一样,都没什么问题。今天要做这个MSSQL到MySQL数据的导入,才发现问题。

首先创建两个连接,一个连MSSQL,一个连MySQL,结果出错,mssql_connect不存在。这个简单,打开扩展选项。这下问题更大,PHP运行不起了,提示找不到扩展,一看ext目录下,php_mssql.dll没有了。这是什么情况?安装的版本不完整?于是去官方下载zip包,依旧没有。于是去官方手册查,简介页面写着

 

These functions allow you to access MS SQL Server database.
This extension is not available anymore on Windows with PHP 5.3 or later.
SQLSRV, an alternative extension for MS SQL connectivity is available from Microsoft: » http://msdn.microsoft.com/en-us/sqlserver/ff657782.aspx.

看来是新版本PHP不提供mssql驱动了,而是由微软提供另外一套驱动。去微软下载驱动,其实就是个压缩包,有两个版本,一个针对5.2和5.3,另一个是5.3以上版本。里面有PDO和普通和驱动,分ntf和tf版本,还有说明手册。打开手册看了下,是另外一套函数,其实和其它数据库操作函数类似,配置好就可以使用了。

关键点二、脚本编写了个开头,先弄些测试数据试试,结果一导入进去,全是乱码。难道是gbk编码连接的?于是对中文字段手动用iconv转编码。也没什么大问题(其实是隐患)。

到后来脚本基本编写完成的时候测试,一直是有部分记录出错,出错的点也很奇怪,是在sqlsrv_query返回结果集,用sqlsrv_fetch_array取行的时候,引发的错误,文本提示是:字符串数据,右截断。网罗了好久,大概的只提到两点,一是内容长度大于字段长度,这是不可能的,是读数据。另外就是内容中有特殊字符。难道是 \0 ?在数据库中查询,也不太对,为此我还特意替换掉了内容中的换行等字符。但是发现出现的条目和实际出错的条目不一致,而且只导入前一部分数据,错误一直是那些记录。忽然想到中间数据导入有一个转编码的过程,能不能直接连MSSQL使用UTF-8编码呢?查了下MS手册,原来是支持的,连接参数中加入CharacterSet=>'utf-8'就可以用UTF-8连接服务器了。于是把文件备份了下,去除转编码操作。重新测试,问题解决。

其实MSSQL中的字段编码问题以前也遇到过,就是设置的text或char,varchar等字段不支持特殊字符,插入数据时会出错,用n起头的类型就没问题,看来为了以后兼容,可能用到中文的字段都要用n类型的字段才好。

 

]]>
<![CDATA[利用Rewrite实现ASP和PHP动态生成缩略图]]> 网络相关 2013-12-29 20:25:43 记得之前曾写过一篇博客,讲的是在IIS官网上看到一个很有用的组件,就是可以动态处理图片的组件,找了下,链接在这里。

Dynamic Image Resizing Module v3

刚看到这个组件,自然想到每次都动态生成缩略图,性能大概是个问题吧。也许是它内部有缓存机制?不过这个确实是不错的工具,可惜需要在服务器上配置,一般的空间不带这个功能的。受此启发,写了个ASP和PHP动态生成缩略图的功能,结合Rewrite效果更好,不过没考虑那么多功能,像什么边框,旋转之类的就没做了。只做了基本的缩放,加上品质参数,缩放类型。ASP的需要Persits.JPEG组件支持,PHP的需要开启GD库。下面是几种常用的伪静态方式,假设文件命名为image.php,放在网站根目录下。(PHP中图片目录是要相对于PHP文件的目录),需要动态生成缩略图的图片存放在upload目录内,仅对jpg和png图片作此处理

 

<!-- IIS7 URL Rewrite Node system.webServer rewrite rules -->
<rule name="ResizeImageRule" stopProcessing="true">
<match url="^(upload/.+?\.(jpg|png))" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{QUERY_STRING}" pattern="^(w|h)\=.+" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" />
</conditions>
<action type="Rewrite" url="/image.php?img={R:1}" />
</rule>

 

 

# httpd.ini
RewriteRule /(upload/.+?\.(jpg|png))\?((w|h).+) /image.php?img=$1&$3 [N,I]
# .htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{QUERY_STRING} ^(w|h)\=.+
RewriteRule ^(upload/.+?\.(jpg|png)) image.php?img=$1 [NC,L,QSA]

 

 

#参数说明
# img 图片路径,一般相对于网站根目录,php则相对于image.php
# w 最大宽度
# h 最大高度 其中w和h必须至少指定一个
# q 压缩品质 1-100
# m 裁剪方式,不指定时为普通缩放,指定outer时会对图片裁剪以适应宽高

 

大家可根据自己的情况进行测试。

下面是效果图对比

下面压缩包里放了ASP+PHP的源文件代码,有兴趣的可以研究下。

 ASP+PHP动态生成缩略图

]]>
<![CDATA[关于Chrome的Command Line API]]> JAVASCRIPT 2013-12-15 17:34:56 今天做网站调试,习惯在Chrome的Console里直接写简单的js测试效果,但是却出现了个奇怪的现象

其实写完代码我才想到,好像这个页面忘记包含jQuery了,还没有用到任何js库,但奇怪的是错误提示,竟然是HTML元素XX没有height属性。难道是代码里写了简单的$函数,查了下,确实没有,好奇之下,单独输出了$,返回的就是下面这行。是的,我没猜错,Chrome竟然内置了$函数,函数体用Command Line API替代了,说明是已编译的内置函数,这个函数又奇怪在,看这意思,它只是命令行才有的,正常的Javascript内置函数,函数体的替代字符串应该是native code

好吧,我没选错Chrome,果然是专为开发人员准备的。各种新奇好用的功能!

出于好奇,想继续看看是不是还有别的惊喜,输入了个window,展开看了下,只有native code替代体的函数,没有一个Command Line API的函数,看来这个函数不是挂在Window上的了,有空再找找哪里有这个说明,估计还会有惊喜的

]]>
<![CDATA[网站安全性浅谈]]> ASP 2013-11-30 13:44:30

最近有个网友一直在问我什么安全性高的ASP系统。关于网站的安全,我也仅仅是从部分层面有一些体会,今天就分享出来,也作为自己在这方面的一些总结。

这里说明还是以ASP为主。

一、关于漏洞,漏洞修复

这个是关注最多的问题,不管是ASP,PHP还是多高级的语言,漏洞都是无处不在。大多数情况下,漏洞跟开发者有直接或间接的关系。当然,在网站方面,漏洞的主要表现就在参数过滤不严,权限检测不严导致的。

比如前台读取一条新闻,会根据新闻ID这个参数来调用,最初的那些ASP教程里都会这样写

Dim sql,rs
sql="SELECT * FROM NEWS WHERE ID="& Request.QueryString("ID")
Set rs=conn.Execute(sql)

取来的参数不经任何过滤就组装到SQL语句中,只需把参数加些字符,就可实现很多功能

 

'在参数里传入 ID=1 And (SELECT LEN(AdminName) FROM Admin)=5
'SQL语句就成了
SELECT * FROM NEWS WHERE ID=1 And (SELECT LEN(AdminName) FROM Admin)=5
'可以判断管理员名称长度
'在参数里传入 ID=1 And (SELECT Mid(AdminName,2,1) FROM Admin)='a'
'SQL语句就成了
SELECT * FROM NEWS WHERE ID=1 And (SELECT Mid(AdminName,2,1) FROM Admin)='a'
'可以判断某个位置的字符

 

其次是文件上传之类的接口,没经任何验证就直接保存文件,特别是不检测文件名是否合法就以原文件名保存,将直接导致木马文件或后门被上传。

二、修补漏洞的几个层次。

对于一些较早的站长,自己又不大懂得代码的,网站漏洞可是个头疼的问题。网站刚流行的时候,黑客可是个希罕词儿,那时候的网站,也不大注意阻止常规的漏洞,所以,代码中处处都隐藏着类似上面提到的片断,这种网站修补起来很麻烦,网上有些高手于是写了各种通用的防注入程式,其机制就是在代码运行初期,逐个对提交的变量检测(ASP中的Cookie,QueryString,Form),检测的标准一般是基于一些特殊字符(单引号,百分号等)和关键字(select,insert等)。这种做法通常可以起到一定的效果,但同时也有很多不便,比如后台要更新一篇文章,个别时候会出现上述的符号或关键字,就造成文章无法添加,这对用户是非常不友好的。另外,对于文件上传的代码,在调用BinaryRead之前是不能调用Form的,这也会影响到文件上传的模块。这是漏洞修补和第一个层次。

第二个层次,就是在用到外部提交的参数的时候逐一转换或过滤,比如用到数字,就转换int型,用到字符串,如果只需要字母和数字,就把字符串中非字母和数字的过滤掉,然后在组装SQL语句时进行必要的转义。这个层次的主要功夫,就在代码层面,一个Web开发者的水平,也多在这个层面能体现一二。具体代码就不列举了,相信有经验的开发者都有所体会。

第三个层次,就是前年闹的沸沸扬扬的XSS攻击。所谓XSS,全称Cross Site Script,跨站脚本攻击。基本特性就是不直接攻击服务器,而是利用服务器的过滤不严格来构造一些代码,去获取该网站浏览者的隐私信息。在一般的网站后台,很少有考虑到这个问题的,因为后台多是站长自己更新或发布的地方,不会特意去构造XSS代码,所以这种攻击多体现在前台,如一些简单网站的留言板里,如果不对客户的留言内容或其它字段过滤,直接插入到数据库,会导致管理员或其它访客在浏览时遭受跨站攻击,泄漏个人隐私。一般简单的代码是不允许使用html代码,直接对内容进行html编码,这样浏览的时候所有代码都会以原型显示而不会运行。复杂点的方法是针对内容中可能出现脚本或可执行的地方做过滤,尤其是针对IE低版本浏览器,在CSS中都可以运行代码。

代码层面能做到这些,基本上算是比较安全的了,细致的话可以配合上验证码(登录,提交验证,验证过自动刷新),加密(cookie信息加密,验证信息加密)等机制,则可以做到更好。

最后还不要忘记了,除了http协议外还有一个https协议,这是专门用于安全链接的,可防止隐私信息被截获,至于具体使用方法,网络上也有很多介绍。

]]>
<![CDATA[如湘趣事 - 偷喝奶]]> 如湘趣事 2013-11-17 17:05:54 这是接着上一篇的,昨天晚上打电话,不算太晚,但在老家,差不多准备睡觉了。

妈小声告诉我们,湘湘嚷着要睡觉了,在喝奶,不让告诉你们,要不然她就要哭了。

于是我们也装着不知道,她接电话的时候我问他:在干嘛呢,湘湘?

我在喝鸡蛋面疙瘩呢!

香不香啊?

可香!

我跟妻悄悄地笑了。

]]>
<![CDATA[Flash AS3录音 回放 保存文件功能研究]]> Flash 2013-11-3 18:52:35 前天收到一个朋友的问题,是关于AS3能不能录音并播放的问题,我虽然没做过,但基于对AS3的部分了解,毫不犹豫地回答他:可以。

说起来是简单,当时也没想那么多,以前只简单测试过AS3调用摄像头的功能,心想这个就是麦克风,应该也差不多吧。

出于好奇,真想整出这个功能来看看,研究了这两天,终于做出来了。虽然现在看来,不算复杂,但其中确实有些曲折。

先看下效果吧:

下面分享下中间的曲折:

首先是打开AS3 官方API查阅下相关的对象,我在本地IIS上放了AS3相关的大部分API,所以查阅起来很方便。这里是官方API地址 当然,我们国内一般打开速度没那么快,所以我还是下载了个压缩包放在本地。下载地址我现在也找不到了,偶尔会在开发中心里放出来,偶尔会上中文版。

好了,不废话了。MicroPhone这个类在flash.media包下,获取麦克风用

//获取可以执行回音消除功能的增强的 Microphone 对象
var micro:MicroPhone=MicroPhone.getEnhancedMicrophone();
//或
micro= Microphone.getMicrophone();

两个方法,一般用后面的就可以了。要开始录音之前可以先设定下几个参数

micro.setSilenceLevel(0, 10000);
micro.gain = 50;
micro.rate = 44;
//监听用户是否同意使用麦克风
micro.addEventListener(StatusEvent.STATUS, mic_status);

然后绑定SampleDataEvent事件,在SampleDataEvent事件里把Event传过来的data写入一个事先声明的ByteArray里,就开始录音了。

var soundbyte:ByteArray=new ByteArray();
micro.addEventListener(SampleDataEvent.SAMPLE_DATA, function(e:SampleDataEvent):void{
while(e.data.bytesAvailable)
soundbyte.writeFloat(e.data.readFloat());
});

结束录音就是取消SampleDataEvent事件的绑定。录好的音就在那个ByteArray里。关键问题是,怎么把这个ByteArray播放出来,怎么编码成声音文件的格式保存。

我一开始想的是有一个Sound对象,看能不能直接加载。但查阅了下手册,有两个方法

但是看说明,loadCompressedDataFromByteArray似乎是用来加载MP3格式的,loadPCMFromByteArray似乎是直接加载ByteArray的,但说明上有很多限制,比如长度,版本的限制。说实话,这些没看多明白,还是以事实为准吧,一个一个拿来测试,首先loadCompressedDataFromByteArray不能一次加载整个ByteArray,报错是数据不能超过40k,于是切分开加载,又报错格式不对,这个看来是不行了。再试loadPCMFromByteArray,怎么都是报数据不能超过40k,API上的参数又写的不清不楚的(可能是我对音频这方面没什么了解)。没办法,去网上找找看吧。

首先搜索到的一篇文章是用NetStream和NetConnection通过本地rtmp服务器来做的,先是microphone传送数据到服务器,sound再从服务器加载,这做法实在麻烦,就没去测试。

其次找到的一篇是引用了org.as3wavsound包中的wav编码,解码的功能做的。这个还算靠谱,于是找到相关包下载来。按着功能大体写了出来,声音是出来了,但是怎么听着不舒服,音质太差了,而且保存的WAV文件数据有问题,要么就是保存的WAV文件正常(质量差点),在flash中播放出来的是叽叽呱呱的声音。也不管是哪里的问题了,反正不好用,很多参数不容易控制。看了相关的文件,大体了解了WAV编码方法,想单独摘出来做。

想来想去,还是再看下API,这次看了仔细点,文档中有链接到官网的一些示例代码,有一篇处理动态生成的音频,讲到了直接在Sound对象上绑定SampleDataEvent事件,在事件中写入二进制可以直接播放。找来找去,还是官方靠谱,其实MicroPhone录下的音频,不用做任何处理,直接写给Sound就可以了,只不过录制的时候最好以rate=44来录制,写入的时候单声道做双声道写入,试了下,音质还可以。然后又写了WAV编码相关的部分,可以直接保存出WAV文件。调试了几次,效果还算满意,又从这个小功能学了不少东西。Flash是越来越强大了。

另外需要注意的是,其中某些方法是11.7以上版本才支持的,所以开发环境最好用最新的SDK。

 

源码下载: http://pan.baidu.com/s/1o6oWZ7W   提取密码 rcvg

]]>
<![CDATA[Flash电子书系统]]> 前台相关 2013-6-1 13:46:00 基于国外一个开源的flash代码做的flash电子书系统。

原项目Github:  nidin / as3-flip-book

演示地址:AS3翻书效果

 

]]>
<![CDATA[Flash+XML可全屏相册轮播展示]]> 前台相关 2013-3-22 23:48:34 Flash+XML相册展示效果

1.图片从XML动态加载,可由后台程序输出

2.原则上图片数量不限制,自动加载所需数量,自动卸载移出场景的图片,不会因加载图片过多导致电脑CPU飙升

3.可配置图片比例,部分区域颜色

4.全屏效果及缩放尺寸时自动适应。

5.鼠标滚轮控制

 

 

效果展示页:FLASH+XML相册轮播效果展示

]]>
<![CDATA[春节近照]]> 宝贝如湘 2013-2-16 23:00:28 今年春节的最新照片!

欢迎分享

]]>
<![CDATA[菊城小榄菊花展]]> 幸福留念 2013-2-1 12:42:51 <![CDATA[模仿阿迪达斯官网图片轮播效果]]> 前台相关 2012-10-21 8:55:12 这个效果写了有一段时间了,一直没更新到demo里,最近有空,就弄上来了。

喜欢的同学可以拿去玩了。

演示:模仿阿迪达斯官网图片轮播效果

 

说明:

  1. 预览效果请使用IE9以上版本浏览器或chrome,firefox等
  2. 本效果支持IE9以上版本浏览器及chrome,firefox等现代浏览器,兼容IE8以下版本浏览器
  3. 在IE8以下版本浏览没有小图标的旋转动作,原因是不支持CSS3
  4. 本效果将始终保持横向铺满窗口,可随窗口缩放而自动按比例缩放。

 

]]>
<![CDATA[javascript 360度实物旋转展示]]> 前台相关 2012-3-14 21:59:45 使用了苹果的图片素材,

并参考妙味课堂的实例.

采用面向对象封装,同一个页面可初始化多个实例。

目前待改进加载图片的过程,加载有可能会出错

展示地址: 360度实物旋转展示

]]>
<![CDATA[春节期间的一些照片]]> 宝贝如湘 2012-2-11 16:45:49 qq空间或人人小站]]> <![CDATA[2011中山(东升)美食节]]> 其它 2012-1-2 10:17:51 跑了一天,累得要死.

要不是娶了个爱吃的老婆,我才不会去凑这热闹.

]]>
<![CDATA[第一个游戏作品--JavaScript版连连看]]> 前台相关 2011-12-26 10:35:15 第一个游戏作品--JavaScript版连连看

 

功能说明:
2011-12-26

主功能完成,界面很简陋

关卡设置

路径提示

重新排序

暂停及计时,没有时间限制

2011-12-29

独立计时单元,加入时间限制
加入玩家单元,积分及计时机制
修正部分错误
2011-12-30
改善界面
加入移动,不同关卡多种玩法

修正部分错误

 

演示地址:Javascript连连看

]]>
<![CDATA[中山一角]]> 其它 2011-12-23 18:53:31