php实现将wav文件转换成图像文件并在页面中显示的方法


Posted in PHP onApril 21, 2015

本文实例讲述了php实现将wav文件转换成图像文件并在页面中显示的方法。分享给大家供大家参考。具体分析如下:

需求:将wav文件转换成png文件并且显示出来。

Wav_To_Png.php:

<?php
 function wav_graph($file, $f=0, $w=0)
 {
  global $DATA_DIR;
  if(!is_file($file))
   return 0;
  $fp = fopen($DATA_DIR.$file, 'r');
  $raw = fread($fp, 36);
  $str = '';
  $header = unpack('A4Riff/VSize/A4Wav/A4Head/VHeadSize/vPCM/vChannels/VSampleRate/VByteRate/vBlockAlign/vSampleBits', $raw);
  foreach($header as $k=>$v)
   $str .= $k.': '. $v.' ';
  fseek($fp, 36 + $header['HeadSize'] - 16);
  $raw = fread($fp, 8);
  $data = unpack('A4Data/VDataSize', $raw);
  foreach($data as $k=>$v)
   $str .= $k.': '. $v.' ';
  $b = $header['SampleBits'];
  $c = $header['Channels'];
  $l = $b * $c / 8; // sample frame length in bytes
  $s = $data['DataSize'] / $l; // total number of samples
  $r = $header['SampleRate'];
  if($f)
   $h = pow(2, $b) / $f;
  else
   { $h = 200; $f = pow(2, $b - 1) / $h; }
  if($w == 0)
   $w = round($r / 1000); // default to show 1k sample frames per minute
  header("Content-type: image/png");
  $im = imagecreate($s / $w, $h * $c * 2);
  imagecolorallocate($im, 0xff, 0xff, 0xff); // white bg
  $color = imagecolorallocate($im, 0, 0, 255); // black
  imagestring($im, 5, 5, 5, $str, $color);
  $x=0; $y = array(); $yn = array();
  for($i = 0; $i < $c; $i++) $y[$i] = $h * $i + $h;
  $n = $l * $w;
  while(1)
  {
   if($s == 0) 
    break;
   if($s < $n) 
    $n = $s;
   $samples = fread($fp, 1000 * $n);
   if($samples === FALSE)
    break;
   $packed = unpack("s*", $samples);
   foreach($packed as $k=>$v)
   {
    $cnt = ($k-1) % ($w * $l) ;
    if( $cnt > $c - 1) 
     continue;
    $yn[$cnt] = $h * $cnt + $h - $v / $f;
    imageline($im, $x, $y[$cnt], $x+1, $yn[$cnt], $color);
    $y[$cnt] = $yn[$cnt];
    $x++;
   }
   $s -= $n;
  }
  imagepng($im);
  imagedestroy($im);
 }
 wav_graph('GetWave.wav');
?>

效果图如下:

php实现将wav文件转换成图像文件并在页面中显示的方法

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
用PHP制作的意见反馈表源码
Mar 11 PHP
php下使用以下代码连接并测试
Apr 09 PHP
php程序的国际化实现方法(利用gettext)
Aug 14 PHP
利用PHP扩展vld查看PHP opcode操作步骤
Mar 04 PHP
初识laravel5
Mar 02 PHP
php实现概率性随机抽奖代码
Jan 02 PHP
php简单实现短网址(短链)还原的方法(测试可用)
May 09 PHP
PHP编程之设置apache虚拟目录
Jul 08 PHP
微信支付开发告警通知实例
Jul 12 PHP
Smarty缓存机制实例详解【三种缓存方式】
Jul 20 PHP
再谈Yii Framework框架中的事件event原理与应用
Apr 07 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
May 27 PHP
PHP判断是否为空的几个函数对比
Apr 21 #PHP
php两种无限分类方法实例
Apr 21 #PHP
PHP中使用register_shutdown_function函数截获fatal error示例
Apr 21 #PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
Apr 21 #PHP
wordpress安装过程中遇到中文乱码的处理方法
Apr 21 #PHP
PHP使用递归生成文章树
Apr 21 #PHP
php实现的美国50个州选择列表实例
Apr 20 #PHP
You might like
thinkphp3.x中cookie方法的用法分析
2016/05/19 PHP
有一段有意思的代码-javascript现实多行信息
2007/08/26 Javascript
IE与Firefox下javascript getyear年份的兼容性写法
2007/12/20 Javascript
关于可运行代码无法正常执行的使用说明
2010/05/13 Javascript
如何判断鼠标是否在DIV的区域内
2013/11/13 Javascript
iframe里面的元素触发父窗口元素事件的jquery代码
2014/10/19 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
2015/07/27 Javascript
JS修改地址栏参数实例代码
2016/06/14 Javascript
微信小程序 火车票查询实例讲解
2016/10/17 Javascript
jQuery下拉菜单的实现代码
2016/11/03 Javascript
JavaScript简单实现合并两个Json对象的方法示例
2017/10/16 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
2018/03/24 Javascript
JS实现的杨辉三角【帕斯卡三角形】算法示例
2019/02/26 Javascript
jquery选择器和属性对象的操作实例分析
2020/01/10 jQuery
jQuery实现飞机大战小游戏
2020/07/05 jQuery
[34:47]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第一场 11.18
2020/11/18 DOTA
python使用urllib模块开发的多线程豆瓣小站mp3下载器
2014/01/16 Python
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
Python 调用Java实例详解
2017/06/02 Python
Python补齐字符串长度的实例
2018/11/15 Python
Python装饰器简单用法实例小结
2018/12/03 Python
在Python 字典中一键对应多个值的实例
2019/02/03 Python
python中有关时间日期格式转换问题
2019/12/25 Python
Python 实现将数组/矩阵转换成Image类
2020/01/09 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
2020/07/01 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
利用html5的websocket实现websocket聊天室
2013/12/12 HTML / CSS
美国工业用品采购网站:Zoro.com
2020/10/27 全球购物
安全承诺书范文
2014/03/26 职场文书
运动会宣传口号
2014/06/09 职场文书
2014最新党员批评与自我批评材料
2014/09/24 职场文书
家长给老师的感谢信
2015/01/20 职场文书
爱心捐书倡议书
2015/04/27 职场文书
篮球赛新闻稿
2015/07/17 职场文书
六一儿童节新闻稿
2015/07/17 职场文书
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang