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递归实现无限分类生成下拉列表的函数
Aug 08 PHP
PHP学习之字符串比较和查找
Apr 17 PHP
JpGraph php柱状图使用介绍
Aug 23 PHP
PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)
Apr 02 PHP
php以post形式发送xml的方法
Nov 04 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
Jan 13 PHP
smarty自定义函数htmlcheckboxes用法实例
Jan 22 PHP
Laravel 5 框架入门(四)完结篇
Apr 09 PHP
PHP学习笔记(三):数据类型转换与常量介绍
Apr 17 PHP
PHP与服务器文件系统的简单交互
Oct 21 PHP
详细对比php中类继承和接口继承
Oct 11 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投票程序源码
2007/03/11 PHP
利用php获取服务器时间的实现代码
2013/06/07 PHP
php进程daemon化的正确实现方法
2018/09/06 PHP
PHP PDOStatement::execute讲解
2019/01/31 PHP
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
浅谈javascript回调函数
2014/12/07 Javascript
JavaScript获取页面中第一个锚定文本的方法
2015/04/03 Javascript
jqGrid中文文档之选项设置
2015/12/02 Javascript
jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
2015/12/31 Javascript
js时间比较 js计算时间差的简单实现方法
2016/08/26 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
2016/11/24 Javascript
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
使用JS模拟锚点跳转的实例
2018/02/01 Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
2018/03/12 Javascript
手动用webpack搭建第一个ReactApp的示例
2018/04/11 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
vue3 源码解读之 time slicing的使用方法
2019/10/31 Javascript
解决vue中的无限循环问题
2020/07/27 Javascript
在python中的socket模块使用代理实例
2014/05/29 Python
python中实现延时回调普通函数示例代码
2017/09/08 Python
对python判断ip是否可达的实例详解
2019/01/31 Python
python文件写入write()的操作
2019/05/14 Python
浅析python表达式4+0.5值的数据类型
2020/02/26 Python
python实现遍历文件夹图片并重命名
2020/03/23 Python
python opencv进行图像拼接
2020/03/27 Python
美国儿童服装、家具和玩具精品店:Maisonette
2019/11/24 全球购物
办公室主任职责范文
2013/11/08 职场文书
上课玩手机的检讨书
2014/10/01 职场文书
2014最新预备党员思想汇报范文:中国梦,我的梦
2014/10/25 职场文书
2014年设计师工作总结
2014/11/25 职场文书
天那边观后感
2015/06/09 职场文书
党员心得体会范文2016
2016/01/23 职场文书
Pytorch中Softmax与LogSigmoid的对比分析
2021/06/05 Python
解析redis hash应用场景和常用命令
2021/08/04 Redis
十大最帅动漫男主 碓冰拓海上榜,第一是《灌篮高手》男主角
2022/03/18 日漫