php 将bmp图片转为jpg等其他任意格式的图片


Posted in PHP onJune 29, 2009
<? php 
// 例子: 
$path = ROOT . ' upload/2009/06/03/124401282315771. ' ; 
$pathAll = $path . ' bmp ' ; 
$mi = '' ; 
$mi = ImageCreateFromBMP( $pathAll ); 
imagejpeg( $mi , $path . ' jpg ' ); 
// 函数如下: 
function ImageCreateFromBMP( $filename ) 
{ 
// Ouverture du fichier en mode binaire 
if ( ! $f1 = fopen ( $filename , " rb " )) return FALSE ; 
// 1 : Chargement des ent�tes FICHIER 
$FILE = unpack ( " vfile_type/Vfile_size/Vreserved/Vbitmap_offset " , fread ( $f1 , 14 )); 
if ( $FILE [ ' file_type ' ] != 19778 ) return FALSE ; 
// 2 : Chargement des ent�tes BMP 
$BMP = unpack ( ' Vheader_size/Vwidth/Vheight/vplanes/vbits_per_pixel ' . 
' /Vcompression/Vsize_bitmap/Vhoriz_resolution ' . 
' /Vvert_resolution/Vcolors_used/Vcolors_important ' , fread ( $f1 , 40 )); 
$BMP [ ' colors ' ] = pow ( 2 , $BMP [ ' bits_per_pixel ' ]); 
if ( $BMP [ ' size_bitmap ' ] == 0 ) $BMP [ ' size_bitmap ' ] = $FILE [ ' file_size ' ] - $FILE [ ' bitmap_offset ' ]; 
$BMP [ ' bytes_per_pixel ' ] = $BMP [ ' bits_per_pixel ' ] / 8 ; 
$BMP [ ' bytes_per_pixel2 ' ] = ceil ( $BMP [ ' bytes_per_pixel ' ]); 
$BMP [ ' decal ' ] = ( $BMP [ ' width ' ] * $BMP [ ' bytes_per_pixel ' ] / 4 ); 
$BMP [ ' decal ' ] -= floor ( $BMP [ ' width ' ] * $BMP [ ' bytes_per_pixel ' ] / 4 ); 
$BMP [ ' decal ' ] = 4 - ( 4 * $BMP [ ' decal ' ]); 
if ( $BMP [ ' decal ' ] == 4 ) $BMP [ ' decal ' ] = 0 ; 
// 3 : Chargement des couleurs de la palette 
$PALETTE = array (); 
if ( $BMP [ ' colors ' ] < 16777216 ) 
{ 
$PALETTE = unpack ( ' V ' . $BMP [ ' colors ' ] , fread ( $f1 , $BMP [ ' colors ' ] * 4 )); 
} 
// 4 : Cr�ation de l'image 
$IMG = fread ( $f1 , $BMP [ ' size_bitmap ' ]); 
$VIDE = chr ( 0 ); 
$res = imagecreatetruecolor( $BMP [ ' width ' ] , $BMP [ ' height ' ]); 
$P = 0 ; 
$Y = $BMP [ ' height ' ] - 1 ; 
while ( $Y >= 0 ) 
{ 
$X = 0 ; 
while ( $X < $BMP [ ' width ' ]) 
{ 
if ( $BMP [ ' bits_per_pixel ' ] == 24 ) 
$COLOR = unpack ( " V " , substr ( $IMG , $P , 3 ) . $VIDE ); 
elseif ( $BMP [ ' bits_per_pixel ' ] == 16 ) 
{ 
$COLOR = unpack ( " n " , substr ( $IMG , $P , 2 )); 
$COLOR [ 1 ] = $PALETTE [ $COLOR [ 1 ] + 1 ]; 
} 
elseif ( $BMP [ ' bits_per_pixel ' ] == 8 ) 
{ 
$COLOR = unpack ( " n " , $VIDE . substr ( $IMG , $P , 1 )); 
$COLOR [ 1 ] = $PALETTE [ $COLOR [ 1 ] + 1 ]; 
} 
elseif ( $BMP [ ' bits_per_pixel ' ] == 4 ) 
{ 
$COLOR = unpack ( " n " , $VIDE . substr ( $IMG , floor ( $P ) , 1 )); 
if (( $P * 2 ) % 2 == 0 ) $COLOR [ 1 ] = ( $COLOR [ 1 ] >> 4 ) ; else $COLOR [ 1 ] = ( $COLOR [ 1 ] & 0x0F ); 
$COLOR [ 1 ] = $PALETTE [ $COLOR [ 1 ] + 1 ]; 
} 
elseif ( $BMP [ ' bits_per_pixel ' ] == 1 ) 
{ 
$COLOR = unpack ( " n " , $VIDE . substr ( $IMG , floor ( $P ) , 1 )); 
if (( $P * 8 ) % 8 == 0 ) $COLOR [ 1 ] = $COLOR [ 1 ] >> 7 ; 
elseif (( $P * 8 ) % 8 == 1 ) $COLOR [ 1 ] = ( $COLOR [ 1 ] & 0x40 ) >> 6 ; 
elseif (( $P * 8 ) % 8 == 2 ) $COLOR [ 1 ] = ( $COLOR [ 1 ] & 0x20 ) >> 5 ; 
elseif (( $P * 8 ) % 8 == 3 ) $COLOR [ 1 ] = ( $COLOR [ 1 ] & 0x10 ) >> 4 ; 
elseif (( $P * 8 ) % 8 == 4 ) $COLOR [ 1 ] = ( $COLOR [ 1 ] & 0x8 ) >> 3 ; 
elseif (( $P * 8 ) % 8 == 5 ) $COLOR [ 1 ] = ( $COLOR [ 1 ] & 0x4 ) >> 2 ; 
elseif (( $P * 8 ) % 8 == 6 ) $COLOR [ 1 ] = ( $COLOR [ 1 ] & 0x2 ) >> 1 ; 
elseif (( $P * 8 ) % 8 == 7 ) $COLOR [ 1 ] = ( $COLOR [ 1 ] & 0x1 ); 
$COLOR [ 1 ] = $PALETTE [ $COLOR [ 1 ] + 1 ]; 
} 
else 
return FALSE ; 
imagesetpixel( $res , $X , $Y , $COLOR [ 1 ]); 
$X ++ ; 
$P += $BMP [ ' bytes_per_pixel ' ]; 
} 
$Y -- ; 
$P += $BMP [ ' decal ' ]; 
} 
// Fermeture du fichier 
fclose ( $f1 ); 
return $res ; 
} 
?>
PHP 相关文章推荐
PHP如何得到当前页和上一页的地址?
Nov 27 PHP
PHP中HTTP方式下的Gzip压缩传输方法举偶
Feb 15 PHP
UCenter中的一个可逆加密函数authcode函数代码
Jul 20 PHP
php生成zip压缩文件的方法详解
Jun 09 PHP
php获取textarea的值并处理回车换行的方法
Oct 20 PHP
php实现paypal 授权登录
May 28 PHP
PHP实现的蚂蚁爬杆路径算法代码
Dec 03 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
Apr 02 PHP
thinkPHP商城公告功能开发问题分析
Dec 01 PHP
Yaf框架封装的MySQL数据库操作示例
Mar 06 PHP
关于laravel 日志写入失败问题汇总
Oct 17 PHP
PHP与Web页面的交互示例详解二
Aug 04 PHP
PHP 彩色文字实现代码
Jun 29 #PHP
php 过滤危险html代码
Jun 29 #PHP
php 图片上添加透明度渐变的效果
Jun 29 #PHP
需要发散思维学习PHP
Jun 29 #PHP
PHP HTML代码串 截取实现代码
Jun 29 #PHP
PHP 网页过期时间的控制代码
Jun 29 #PHP
PHP 超链接 抓取实现代码
Jun 29 #PHP
You might like
PHP4和PHP5性能测试和对比 测试代码与环境
2007/08/17 PHP
PHP中array_merge和array相加的区别分析
2013/06/17 PHP
php中adodbzip类实例
2014/12/08 PHP
ThinkPHP控制器详解
2015/07/27 PHP
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
javascript 面向对象 function类
2010/05/13 Javascript
js实现点小图看大图效果的思路及示例代码
2013/10/28 Javascript
Javascript浅谈之引用类型
2013/12/18 Javascript
javascript 自定义回调函数示例代码
2014/09/26 Javascript
JavaScript的jQuery库插件的简要开发指南
2015/08/12 Javascript
基于javascript实现动态显示当前系统时间
2016/01/28 Javascript
javascript实现九宫格相加数值相等
2020/05/28 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
解析JavaScript模仿块级作用域
2016/12/29 Javascript
webpack4之SplitChunksPlugin使用指南
2018/06/12 Javascript
Vue实现textarea固定输入行数与添加下划线样式的思路详解
2018/06/28 Javascript
Vue文本模糊匹配功能如何实现
2020/07/30 Javascript
vue实现单一筛选、删除筛选条件
2020/10/26 Javascript
微信小程序实现分页加载效果
2020/11/19 Javascript
python使用三角迭代计算圆周率PI的方法
2015/03/20 Python
python实现将pvr格式转换成pvr.ccz的方法
2015/04/28 Python
解决Mac安装scrapy失败的问题
2018/06/13 Python
Selenium chrome配置代理Python版的方法
2018/11/29 Python
python实现抽奖小程序
2020/04/15 Python
Django 使用easy_thumbnails压缩上传的图片方法
2019/07/26 Python
Pytorch 多块GPU的使用详解
2019/12/31 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
2020/07/27 Python
CSS3网格的三个新特性详解
2014/04/04 HTML / CSS
详解HTML5中表单验证的8种方法介绍
2016/12/19 HTML / CSS
荷兰照明、灯具和配件网上商店:dmlights
2019/08/25 全球购物
Ajax的优点和缺点
2014/11/21 面试题
电子信息专业学生自荐信
2013/11/09 职场文书
校长岗位职责
2013/11/26 职场文书
幼儿园优秀班主任事迹材料
2014/05/14 职场文书
先进员工事迹材料
2014/12/20 职场文书