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中使用模板的方法
May 24 PHP
如何突破PHP程序员的技术瓶颈分析
Jul 17 PHP
PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
Apr 09 PHP
php获取数组中重复数据的两种方法
Jun 28 PHP
关于php支持分块与断点续传文件下载功能代码
May 09 PHP
ThinkPHP 表单自动验证运用示例
Oct 13 PHP
通过PHP简单实例介绍文件上传
Dec 16 PHP
Laravel5权限管理方法详解
Jul 26 PHP
php 从一个数组中随机的取出若干个不同的数实例
Dec 31 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
Feb 28 PHP
php之可变函数的实例详解
Sep 13 PHP
PHP+Mysql分布式事务与解决方案深入理解
Feb 27 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/07/02 PHP
PHP读取PDF内容配合Xpdf的使用
2012/11/24 PHP
PHP进程同步代码实例
2015/02/12 PHP
dvwa+xampp搭建显示乱码的问题及解决方案
2015/08/23 PHP
PHP的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
2016/07/23 PHP
javascript动态控制服务器控件实例
2014/09/05 Javascript
JavaScript设计模式之代理模式介绍
2014/12/28 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
jQuery基于xml格式数据实现模糊查询及分页功能的方法
2016/12/25 Javascript
Node.js 异步异常的处理与domain模块解析
2017/05/10 Javascript
React如何利用相对于根目录进行引用组件详解
2017/10/09 Javascript
JavaScript实现多重继承的方法分析
2018/01/09 Javascript
JavaScript动态加载重复绑定问题
2018/04/01 Javascript
解决jQuery使用append添加的元素事件无效的问题
2018/08/30 jQuery
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
2018/09/04 Javascript
JavaScript 判断iPhone X Series机型的方法
2019/01/28 Javascript
vue2配置scss的方法步骤
2019/06/06 Javascript
基于vue实现圆形菜单栏组件
2019/07/05 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
2019/10/24 Javascript
ES6中new Function()语法及应用实例分析
2020/02/19 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
js获取url页面id,也就是最后的数字文件名
2020/09/25 Javascript
Python开发实例分享bt种子爬虫程序和种子解析
2014/05/21 Python
详解python 字符串和日期之间转换 StringAndDate
2017/05/04 Python
python在html中插入简单的代码并加上时间戳的方法
2018/10/16 Python
anaconda如何查看并管理python环境
2019/07/05 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
2020/02/29 Python
pytorch简介
2020/11/11 Python
HTML5打开手机扫码功能及优缺点
2017/11/27 HTML / CSS
幼儿园数学教学反思
2014/02/02 职场文书
成语的广告词
2014/03/19 职场文书
高校教师个人总结
2015/02/10 职场文书
大学生入党自荐书
2015/03/05 职场文书
朋友聚会祝酒词
2015/08/10 职场文书
SpringBoot集成Redis,并自定义对象序列化操作
2021/06/22 Java/Android