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


Posted in PHP onJune 21, 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 表单提交给自己
Jul 24 PHP
PHP编码规范之注释和文件结构说明
Jul 09 PHP
php循环语句 for()与foreach()用法区别介绍
Sep 05 PHP
PHP中$_FILES的使用方法及注意事项说明
Feb 14 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
May 28 PHP
php数组添加元素方法小结
Dec 20 PHP
Symfony数据校验方法实例分析
Jan 26 PHP
PHP中如何判断exec函数执行成功?
Aug 04 PHP
php版微信公众平台开发之验证步骤实例详解
Sep 23 PHP
php封装的mysqli类完整实例
Oct 18 PHP
浅谈php(codeigniter)安全性注意事项
Apr 06 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
ie6 动态缩略图不显示的原因
Jun 21 #PHP
PHP COOKIE设置为浏览器进程
Jun 21 #PHP
PHP 输出缓存详解
Jun 20 #PHP
php 图像函数大举例(非原创)
Jun 20 #PHP
PHP 类型转换函数intval
Jun 20 #PHP
php MYSQL 数据备份类
Jun 19 #PHP
PHP 程序员也要学会使用“异常”
Jun 16 #PHP
You might like
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
PHP实现的一致性哈希算法完整实例
2015/11/14 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
2016/10/17 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
基于jQuery选择器的整理集合
2013/04/26 Javascript
jquery拖动插件(jquery.drag)使用介绍
2013/06/18 Javascript
jQuery实现首页顶部可伸缩广告特效代码
2015/04/15 Javascript
JavaScript Math 对象常用方法总结
2016/04/28 Javascript
jQuery简单验证上传文件大小及类型的方法
2016/06/02 Javascript
JavaScript中setter和getter方法介绍
2016/07/11 Javascript
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
js tab栏切换代码实例解析
2019/09/03 Javascript
python基础教程之获取本机ip数据包示例
2014/02/10 Python
Python对象类型及其运算方法(详解)
2017/07/05 Python
JS设计模式之责任链模式实例详解
2018/02/03 Python
python中返回矩阵的行列方法
2018/04/04 Python
用python代码将tiff图片存储到jpg的方法
2018/12/04 Python
Django框架 querySet功能解析
2019/09/04 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
Python字符编码转码之GBK,UTF8互转
2020/02/09 Python
python读取xml文件方法解析
2020/08/04 Python
html5 初试 indexedDB(推荐)
2016/07/21 HTML / CSS
购买限量版收藏品、珠宝和礼品:Bradford Exchange
2016/09/23 全球购物
英国儿童图书网站:Scholastic
2017/03/26 全球购物
将一个数的从第5位开始的7个数取出,其余位置0
2016/05/26 面试题
后勤自我鉴定
2013/10/13 职场文书
厨师岗位职责
2013/11/12 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
2014年党员整改措施范文
2014/09/21 职场文书
迟到检讨书2000字(精选篇)
2014/10/07 职场文书
教师节寄语2015
2015/03/23 职场文书
2015年工程部工作总结
2015/04/30 职场文书
2015年度信用社工作总结
2015/05/04 职场文书
消防宣传标语大全
2015/08/03 职场文书
python数字图像处理实现图像的形变与缩放
2022/06/28 Python