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中通过虚代理实现延迟加载的实现代码
Jun 10 PHP
PHP stripos()函数及注意事项的分析
Jun 08 PHP
基于php中使用excel的简单介绍
Aug 02 PHP
解析php mysql 事务处理回滚操作(附实例)
Aug 05 PHP
ThinkPHP之getField详解
Jun 20 PHP
PHP实现的购物车类实例
Jun 17 PHP
实现WordPress主题侧边栏切换功能的PHP脚本详解
Dec 14 PHP
PHP生成可点击刷新的验证码简单示例
May 13 PHP
PHP7匿名类用法分析
Sep 26 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
Feb 06 PHP
PHP基于swoole多进程操作示例
Aug 12 PHP
PHP7变量处理机制修改
Mar 09 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日历[测试通过]
2008/03/27 PHP
基于Zend的Config机制的应用分析
2013/05/02 PHP
使用php方法curl抓取AJAX异步内容思路分析及代码分享
2014/08/25 PHP
php网站被挂木马后的修复方法总结
2014/11/06 PHP
PHP的几个常用加密函数
2016/02/03 PHP
PHP下的浮点运算不准的解决方法
2016/10/27 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
jQuery 方法大全方便学习参考
2010/02/25 Javascript
jQuery实现仿腾讯微博滑出效果报告每日天气的方法
2015/05/11 Javascript
JS Array.slice 截取数组的实现方法
2016/01/02 Javascript
javascript求日期差的方法
2016/03/02 Javascript
jQuery简单实现iframe的高度根据页面内容自适应的方法
2016/08/01 Javascript
微信小程序开发之Tabbar实例详解
2017/01/09 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
基于Vue-cli快速搭建项目的完整步骤
2018/11/03 Javascript
使用layui定义一个模块并使用的例子
2019/09/14 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
vue中使用echarts的示例
2021/01/03 Vue.js
[01:38]女王驾到——至宝魔廷新尊技能&特效展示
2020/06/16 DOTA
[46:38]完美世界DOTA2联赛PWL S2 Magma vs PXG 第三场 11.28
2020/12/02 DOTA
python简单的函数定义和用法实例
2015/05/07 Python
Python聚类算法之基本K均值实例详解
2015/11/20 Python
python排序函数sort()与sorted()的区别
2018/09/18 Python
Python将json文件写入ES数据库的方法
2019/04/10 Python
django settings.py 配置文件及介绍
2019/07/15 Python
如何理解Python中包的引入
2020/05/29 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
马来西亚排名第一的宠物用品店:Pets Wonderland
2020/04/16 全球购物
师范教师毕业鉴定
2014/01/13 职场文书
什么样的创业计划书可行性高?
2014/02/01 职场文书
申报优秀教师材料
2014/12/16 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
学生会副主席竞选稿
2015/11/19 职场文书
eclipse创建项目没有dynamic web的解决方法
2021/06/24 Java/Android
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android