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 相关文章推荐
最省空间的计数器
Oct 09 PHP
PHP+MySQL 制作简单的留言本
Nov 02 PHP
PHP filter_var() 函数 Filter 函数
Apr 25 PHP
php抽奖小程序的实现代码
Jun 18 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
Oct 17 PHP
php 利用array_slice函数获取随机数组或前几条数据
Sep 30 PHP
PHP使用MPDF类生成PDF的方法
Dec 08 PHP
Joomla数据库操作之JFactory::getDBO用法
May 05 PHP
thinkphp验证码的实现(form、ajax实现验证)
Jul 28 PHP
PHP仿微信多图片预览上传实例代码
Sep 13 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
May 02 PHP
详解cookie验证的php应用的一种SSO解决办法
Oct 20 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中让上传的文件大小在上传前就受限制的两种解决方法
2013/06/24 PHP
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
2014/07/04 PHP
PHP快速排序算法实现的原理及代码详解
2019/04/03 PHP
Laravel实现通过blade模板引擎渲染视图
2019/10/25 PHP
js 获取中文拼音,Select自动匹配字母获取值的代码
2009/09/23 Javascript
高性能web开发 如何加载JS,JS应该放在什么位置?
2010/05/14 Javascript
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
2012/02/03 Javascript
jQuery插件StickUp实现网页导航置顶
2015/04/12 Javascript
jQuery on()方法使用技巧详解
2015/04/16 Javascript
AngularJS基础学习笔记之控制器
2015/05/10 Javascript
Bootstrap树形组件jqTree的简单封装
2016/01/25 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
2016/05/18 Javascript
js实现背景图自适应窗口大小
2017/01/10 Javascript
ajax分页效果(bootstrap模态框)
2017/01/23 Javascript
vue-cli的webpack模板项目配置文件分析
2017/04/01 Javascript
微信小程序实战之上拉(分页加载)效果(2)
2017/04/17 Javascript
JavaScript创建对象的七种方式(推荐)
2017/06/26 Javascript
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
记一次vue去除#问题处理经过小结
2019/01/24 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
Vue+Element自定义纵向表格表头教程
2020/10/26 Javascript
python实现读取类别频数数据画水平条形图案例
2020/04/24 Python
Python调用JavaScript代码的方法
2020/10/27 Python
canvas需要在标签里直接定义宽高
2014/12/17 HTML / CSS
英国第二大营养品供应商:Vitabiotics
2016/10/01 全球购物
自荐信不宜过于夸大
2013/11/06 职场文书
乡镇平安建设汇报材料
2014/08/25 职场文书
赔偿协议书范本
2014/09/12 职场文书
竞选大学学委演讲稿
2014/09/13 职场文书
英文慰问信
2015/02/14 职场文书
幼儿园开学通知
2015/04/24 职场文书
三严三实·严以用权心得体会
2016/01/12 职场文书
CSS 实现磨砂玻璃(毛玻璃)效果样式
2023/05/21 HTML / CSS