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 相关文章推荐
多重?l件?合查?(一)
Oct 09 PHP
第七节--类的静态成员
Nov 16 PHP
Ajax PHP简单入门教程代码
Apr 25 PHP
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
Oct 15 PHP
php启用zlib压缩文件的配置方法
Jun 12 PHP
解析php开发中的中文编码问题
Aug 08 PHP
ThinkPHP CURD方法之data方法详解
Jun 18 PHP
php实现批量压缩图片文件大小的脚本
Jul 04 PHP
PHP中echo,print_r与var_dump区别分析
Sep 29 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
Aug 23 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
Oct 21 PHP
php批量删除操作代码分享
Feb 26 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
php&amp;java(二)
2006/10/09 PHP
php设置编码格式的方法
2013/03/05 PHP
单点登录 Ucenter示例分析
2013/10/29 PHP
php导出csv格式数据并将数字转换成文本的思路以及代码分享
2014/06/05 PHP
Laravel Validator自定义错误返回提示消息并在前端展示
2019/05/09 PHP
thinkphp整合系列之极验滑动验证码geetest功能
2019/06/18 PHP
js的event详解。
2006/09/06 Javascript
javascript来定义类的规范小结
2010/11/19 Javascript
js replace替换所有匹配的字符串
2014/02/13 Javascript
jquery实现动静态条形统计图
2015/08/17 Javascript
JS+CSS相对定位实现的下拉菜单
2015/10/06 Javascript
Javascript的表单验证-初识正则表达式
2016/03/18 Javascript
jquery注册文本框获取焦点清空,失去焦点赋值的简单实例
2016/09/08 Javascript
jQuery表单插件ajaxForm实例详解
2017/01/17 Javascript
使用Xcache缓存器加速PHP网站的配置方法
2017/04/22 Javascript
Vue Socket.io源码解读
2018/02/07 Javascript
JavaScript多态与封装实例分析
2018/07/27 Javascript
JS加密插件CryptoJS实现的DES加密示例
2018/08/16 Javascript
微信小程序实现多个按钮的颜色状态转换
2019/02/15 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
2019/06/24 Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
2020/07/11 Javascript
Node.js 中如何收集和解析命令行参数
2021/01/08 Javascript
Python中操作符重载用法分析
2016/04/29 Python
Python 异常处理的实例详解
2017/09/11 Python
Python进阶之尾递归的用法实例
2018/01/31 Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
2019/12/04 Python
Python读取多列数据以及用matplotlib制作图表方法实例
2020/09/23 Python
一款基于css3麻将筛子3D翻转特效的实例教程
2014/12/31 HTML / CSS
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
报社实习生自荐信
2014/01/24 职场文书
作风建设年度心得体会
2014/10/29 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
质量保证书怎么写
2015/02/27 职场文书
《社戏》教学反思
2016/02/22 职场文书
【海涛教你打dota】体验一超神发条:咱是抢盾专业户
2022/04/01 DOTA
Redis实战高并发之扣减库存项目
2022/04/14 Redis