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 相关文章推荐
第四节 构造函数和析构函数 [4]
Oct 09 PHP
如何写php程序?
Dec 08 PHP
关于PHP递归算法和应用方法介绍
Apr 15 PHP
探讨php中遍历二维数组的几种方法详解
Jun 08 PHP
解析获取优酷视频真实下载地址的PHP源代码
Jun 26 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
Oct 15 PHP
PHP中使用CURL获取页面title例子
Jan 07 PHP
php通过获取头信息判断图片类型的方法
Jun 26 PHP
PHP PDOStatement::columnCount讲解
Jan 30 PHP
tp5框架无刷新分页实现方法分析
Sep 26 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 PHP
PHP 使用位运算实现四则运算的代码
Mar 09 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原生模板引擎 最简单的模板引擎
2012/04/25 PHP
PHP设计模式之命令模式的深入解析
2013/06/13 PHP
javascript定时器完整实例
2015/02/10 Javascript
最简单的JavaScript验证整数、小数、实数、有效位小数正则表达式
2015/04/17 Javascript
javascript编写贪吃蛇游戏
2015/07/07 Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
2016/02/27 Javascript
最简单的tab切换实例代码
2016/05/13 Javascript
JavaScript必知必会(五) eval 的使用
2016/06/08 Javascript
jquery easyui DataGrid简单示例
2017/01/23 Javascript
Vue开发中整合axios的文件整理
2017/04/29 Javascript
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
bootstrap时间插件daterangepicker使用详解
2017/10/19 Javascript
bootstrap select下拉搜索插件使用方法详解
2017/11/23 Javascript
原生JS实现多个小球碰撞反弹效果示例
2018/01/31 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
2019/05/13 Javascript
node 版本切换的实现
2020/02/02 Javascript
vue开发移动端底部导航条功能
2020/04/08 Javascript
微信小程序文章列表功能完整实例
2020/06/03 Javascript
Python中字典(dict)和列表(list)的排序方法实例
2014/06/16 Python
Python中使用logging模块代替print(logging简明指南)
2014/07/09 Python
Django与遗留的数据库整合的方法指南
2015/07/24 Python
对pandas的dataframe绘图并保存的实现方法
2017/08/05 Python
Python 利用内置set函数对字符串和列表进行去重的方法
2018/06/29 Python
详解pytorch 0.4.0迁移指南
2019/06/16 Python
基于python实现从尾到头打印链表
2019/11/02 Python
Python和Sublime整合过程图示
2019/12/25 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
2020/09/01 Python
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
Amara美国站:英国高端家居礼品网站,世界各地的奢侈家具品牌
2017/07/26 全球购物
装潢设计实习自我鉴定
2013/09/19 职场文书
关于雷锋的演讲稿
2014/05/10 职场文书
催款函范本大全
2015/06/24 职场文书
golang在GRPC中设置client的超时时间
2021/04/27 Golang
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python
【海涛解说】pis亲自推荐,其实你从来不会玩NW
2022/04/01 DOTA