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 htmlentities和htmlspecialchars 的区别
Aug 18 PHP
php 动态执行带有参数的类方法
Apr 10 PHP
Ajax+PHP 边学边练之四 表单
Nov 27 PHP
php中利用post传递字符串重定向的实现代码
Apr 21 PHP
PHP中获取变量的变量名的一段代码的bug分析
Jul 07 PHP
PHP中读取文件的8种方法和代码实例
Aug 05 PHP
Yii实现多按钮保存与提交的方法
Dec 03 PHP
PHP 生成N个不重复的随机数
Jan 21 PHP
smarty自定义函数htmlcheckboxes用法实例
Jan 22 PHP
PHP实现简单汉字验证码
Jul 28 PHP
php实现购物车功能(上)
Jul 23 PHP
iis6手工创建网站后无法运行php脚本的解决方法
Jun 08 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输出表格的实现代码(修正版)
2010/12/29 PHP
探讨PHP使用eAccelerator的API开发详解
2013/06/09 PHP
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
2014/05/08 PHP
PHP中curl_setopt函数用法实例分析
2015/04/16 PHP
php flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
2018/04/21 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
2020/03/23 PHP
jQuery数据显示插件整合实现代码
2011/10/24 Javascript
jquery插件珍藏(图片局部放大/信息提示框)
2013/01/08 Javascript
JavaScript中通过prototype属性共享属性和方法的技巧实例
2015/03/13 Javascript
Bootstrap 源代码分析(未完待续)
2016/08/17 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
2017/01/22 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
require.js中的define函数详解
2017/07/10 Javascript
详解react-router4 异步加载路由两种方法
2017/09/12 Javascript
Vue 自适应高度表格的实现方法
2020/05/13 Javascript
夯基础之手撕javascript继承详解
2020/11/09 Javascript
用Python代码来绘制彭罗斯点阵的教程
2015/04/03 Python
Python使用CMD模块更优雅的运行脚本
2015/05/11 Python
Python2/3中urllib库的一些常见用法
2017/12/19 Python
python读取和保存视频文件
2018/04/16 Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
2018/12/04 Python
python集合的创建、添加及删除操作示例
2019/10/08 Python
Python matplotlib以日期为x轴作图代码实例
2019/11/22 Python
python随机生成大小写字母数字混合密码(仅20行代码)
2020/02/01 Python
pycharm新建Vue项目的方法步骤(图文)
2020/03/04 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
党员的自我评价范文
2014/01/02 职场文书
专业求职信撰写要诀
2014/02/18 职场文书
春季防火方案
2014/05/10 职场文书
专业技术职务聘任证明
2015/03/02 职场文书
工程资料员岗位职责
2015/04/13 职场文书
2015迎新晚会开场白
2015/05/29 职场文书
详解非极大值抑制算法之Python实现
2021/06/28 Python
OpenCV实现普通阈值
2021/11/17 Java/Android
java获取一个文本文件的编码(格式)信息
2022/09/23 Java/Android