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 相关文章推荐
实用函数2
Nov 08 PHP
析构函数与php的垃圾回收机制详解
Oct 28 PHP
PHP-Java-Bridge使用笔记
Sep 22 PHP
php将html转成wml的WAP标记语言实例
Jul 08 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
Feb 26 PHP
Yii框架连接mongodb数据库的代码
Jul 27 PHP
php、java、android、ios通用的3des方法(推荐)
Sep 09 PHP
yii gridview实现时间段筛选功能
Aug 15 PHP
Laravel如何使用Redis共享Session
Feb 23 PHP
php记录搜索引擎爬行记录的实现代码
Mar 02 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
Oct 22 PHP
win10下 php安装seaslog扩展的详细步骤
Dec 04 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
多文件上传的例子
2006/10/09 PHP
Optimizer与Debugger兼容性问题的解决方法
2008/12/01 PHP
php魔术方法与魔术变量、内置方法与内置变量的深入分析
2013/06/03 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
thinkPHP框架实现的简单计算器示例
2018/12/07 PHP
js实现键盘上下左右键选择文字并显示在文本框的方法
2015/05/07 Javascript
详解JavaScript时间格式化
2015/12/23 Javascript
jQuery设置Cookie及删除Cookie实例分析
2016/04/15 Javascript
js 能实现监听F5页面刷新子iframe 而父页面不刷新的方法
2016/11/09 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
gulp教程_从入门到项目中快速上手使用方法
2017/09/14 Javascript
JavaScript JMap类定义与使用方法示例
2019/01/22 Javascript
10个最受欢迎的 JavaScript框架(推荐)
2019/04/24 Javascript
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
2019/06/27 Javascript
vue中v-for循环选中点击的元素并对该元素添加样式操作
2020/07/17 Javascript
python通过apply使用元祖和列表调用函数实例
2015/05/26 Python
Python 基础教程之包和类的用法
2017/02/23 Python
python批量读取txt文件为DataFrame的方法
2018/04/03 Python
基于MTCNN/TensorFlow实现人脸检测
2018/05/24 Python
python3 读取Excel表格中的数据
2018/10/16 Python
Python语言检测模块langid和langdetect的使用实例
2019/02/19 Python
对django的User模型和四种扩展/重写方法小结
2019/08/17 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
2020/08/19 Python
CSS3 简单又实用的5个属性
2010/03/04 HTML / CSS
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
使用HTML5的File实现base64和图片的互转
2013/08/01 HTML / CSS
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
Manduka官网:瑜伽垫、瑜伽毛巾和服装
2018/07/02 全球购物
寻找完美的房车租赁:RVShare
2019/02/23 全球购物
如何进行Linux分区优化
2016/09/13 面试题
销售岗位职责范本
2014/06/12 职场文书
服务标语大全
2014/06/18 职场文书
学校政风行风评议工作总结
2014/10/21 职场文书
校园安全教育心得体会
2016/01/15 职场文书
进行数据处理的6个 Python 代码块分享
2022/04/06 Python
win11怎么消除图标小盾牌?win11消除图标小盾牌解决方法
2022/08/05 数码科技