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 表单验证实现代码
Mar 10 PHP
PHP通过iconv将字符串从GBK转换为UTF8字符集
Jul 18 PHP
PHP采集腾讯微博的实现代码
Jan 19 PHP
php异常处理技术,顶级异常处理器
Jun 13 PHP
高性能PHP框架Symfony2经典入门教程
Jul 08 PHP
PHP中的静态变量及static静态变量使用详解
Nov 05 PHP
php实现微信公众号主动推送消息
Dec 31 PHP
Zend Framework框架路由机制代码分析
Mar 22 PHP
yii2控制器Controller Ajax操作示例
Jul 23 PHP
手把手编写PHP框架 深入了解MVC运行流程
Sep 19 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
Feb 28 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
May 02 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
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
Docker配置PHP开发环境教程
2016/12/21 PHP
javascript实现动态CSS换肤技术的脚本
2007/06/29 Javascript
9个javascript语法高亮插件 推荐
2009/07/18 Javascript
Ext grid 添加右击菜单
2009/11/26 Javascript
jQuery 操作option的实现代码
2011/03/03 Javascript
flash遮住div问题的正确解决方法
2014/02/27 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
JQuery操作元素的css样式
2015/03/09 Javascript
Jquery使用css方法改变样式实例
2015/05/18 Javascript
jquery验证邮箱格式并显示提交按钮
2015/11/07 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
2017/11/10 Javascript
vue项目中引入vue-datepicker插件的详解
2019/05/14 Javascript
js实现经典贪吃蛇小游戏
2020/03/19 Javascript
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
2021/01/05 Vue.js
[13:38]2015国际邀请赛中国战队出征仪式
2015/05/29 DOTA
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
Python random模块(获取随机数)常用方法和使用例子
2014/05/13 Python
python 网络编程详解及简单实例
2017/04/25 Python
Python文件的读写和异常代码示例
2017/10/31 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
Python生成MD5值的两种方法实例分析
2019/04/26 Python
Python urllib2运行过程原理解析
2020/06/04 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
AJAX的优缺点都有什么
2015/08/18 面试题
模具专业毕业推荐信
2014/03/08 职场文书
新学期新寄语,献给新生们!
2019/11/15 职场文书
Nginx进程管理和重载原理详解
2021/04/22 Servers
一定要知道的 25 个 Vue 技巧
2021/11/02 Vue.js