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开发大型项目的一点经验
Oct 09 PHP
PHP 程序员的调试技术小结
Nov 15 PHP
php设计模式  Command(命令模式)
Jun 17 PHP
PHP整数取余返回负数的相关解决方法
May 15 PHP
codeigniter显示所有脚本执行时间的方法
Mar 21 PHP
PHP结合jQuery实现找回密码
Jul 22 PHP
WordPress中获取指定分类及其子分类下的文章数目
Dec 31 PHP
PHP简单实现无限级分类的方法
May 13 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
Jun 30 PHP
PHP编程实现微信企业向用户付款的方法示例
Jul 26 PHP
PHP实现的XXTEA加密解密算法示例
Aug 28 PHP
PHP safe_mode开启对于PHP系统函数有什么影响
Nov 10 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/10/26 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
php实现httpclient类示例
2014/04/08 PHP
让div层随鼠标移动的实现代码 ie ff
2009/12/18 Javascript
javascript学习笔记(七)利用javascript来创建和存储cookie
2011/04/08 Javascript
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
Jquery元素追加和删除的实现方法
2016/05/24 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
详解Nodejs基于mongoose模块的增删改查的操作
2016/12/21 NodeJs
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
Angular 2.x学习教程之结构指令详解
2017/05/25 Javascript
vue2.0在没有dev-server.js下的本地数据配置方法
2018/02/23 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
2018/09/11 Javascript
vue 实现input表单元素的disabled示例
2019/10/28 Javascript
[14:36]2014 DOTA2国际邀请赛中国区预选赛5.21 Orenda VS NE
2014/05/22 DOTA
[47:45]Liquid vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
2014/04/08 Python
python 字典(dict)遍历的四种方法性能测试报告
2014/06/25 Python
Python中subprocess模块用法实例详解
2015/05/20 Python
总结Python编程中函数的使用要点
2016/03/20 Python
深入理解Python3中的http.client模块
2017/03/29 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
pyqt5 实现在别的窗口弹出进度条
2019/06/18 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
Python字典fromkeys()方法使用代码实例
2020/07/20 Python
Python matplotlib模块及柱状图用法解析
2020/08/10 Python
python切割图片的示例
2020/11/12 Python
python 递归相关知识总结
2021/03/03 Python
阿迪达斯比利时官方商城:adidas比利时
2016/10/10 全球购物
世界上最大的餐具公司:Oneida
2016/12/17 全球购物
某IT外企面试题-二分法求方程!看看大家的C++功底
2015/07/04 面试题
一套SQL笔试题
2016/08/14 面试题
介绍一下grep命令的使用
2012/06/28 面试题
《陶罐和铁罐》教学反思
2014/02/19 职场文书
开场白怎么写
2015/06/01 职场文书
python实现三阶魔方还原的示例代码
2021/04/28 Python