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 14 PHP
php下几个常用的去空、分组、调试数组函数
Feb 22 PHP
php中通过curl smtp发送邮件
Jun 05 PHP
PHP中文分词 自动获取关键词介绍
Nov 13 PHP
php excel reader读取excel内容存入数据库实现代码
Dec 06 PHP
php读取excel文件的简单实例
Aug 26 PHP
PHP使用SOAP调用.net的WebService数据
Nov 12 PHP
PHP的变量类型和作用域详解
Mar 12 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
Jun 10 PHP
PHP文件下载实例代码浅析
Aug 17 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
Mar 01 PHP
PHP的简单跳转提示的实现详解
Mar 14 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
在多个页面使用同一个HTML片段《续》
2011/03/04 Javascript
基于jQuery的图片左右无缝滚动插件
2012/05/23 Javascript
使用JSLint提高JS代码质量方法分享
2013/12/16 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
Google Maps API地图应用示例分享
2014/10/23 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
2014/10/31 Javascript
javascript 操作符(~、&amp;、|、^、)使用案例
2014/12/31 Javascript
js实现同一页面可多次调用的图片幻灯切换效果
2015/02/28 Javascript
javascript设计模式Constructor(构造器)模式
2016/08/19 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
Angularjs 动态改变title标题(兼容ios)
2016/12/29 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
NodeJS学习笔记之Module的简介
2017/03/24 NodeJs
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
vue结合Echarts实现点击高亮效果的示例
2018/03/17 Javascript
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
详解JS转换数值函数Number()、parseInt()、parseFloat()
2018/08/24 Javascript
Node.js API详解之 string_decoder用法实例分析
2020/04/29 Javascript
原生JavaScript实现留言板
2021/01/10 Javascript
[43:41]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
python3实现带多张图片、附件的邮件发送
2019/08/10 Python
python Xpath语法的使用
2020/11/26 Python
如何在Canvas上的图形/图像绑定事件监听的实现
2020/09/16 HTML / CSS
一套VC试题
2015/01/23 面试题
求职自荐信
2013/12/14 职场文书
医学生职业生涯规划书范文
2014/03/13 职场文书
应聘英语教师求职信
2014/04/24 职场文书
总经理岗位职责
2015/02/04 职场文书
专家推荐信范文
2015/03/26 职场文书
2015年医院后勤工作总结
2015/05/20 职场文书
欧也妮葛朗台读书笔记
2015/06/30 职场文书
2019职场单身人才调研报告:互联网行业单身比例最高
2019/08/07 职场文书
「玫瑰之王的葬礼」舞台剧主视觉图公开
2022/03/21 日漫
vue实现书本翻页动画效果实例详解
2022/04/08 Vue.js
mysql中如何用命令创建联合唯一索引
2022/04/20 MySQL