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 17 PHP
谨慎使用PHP的引用原因分析
Sep 06 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
Sep 28 PHP
PHP实现格式化文件数据大小显示的方法
Jan 03 PHP
php批量删除cookie的简单实现方法
Jan 26 PHP
php异常处理方法实例汇总
Jun 24 PHP
php解析url并得到url中的参数及获取url参数的四种方式
Oct 26 PHP
使用phpstorm和xdebug实现远程调试的方法
Dec 29 PHP
PHP简单判断字符串是否包含另一个字符串的方法
Mar 25 PHP
PHP创建多级目录的两种方法
Oct 28 PHP
PHP编程计算文件或数组中单词出现频率的方法
May 22 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
Jun 12 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中的cookie不用刷新就生效的方法
2012/02/04 PHP
php基于数组函数实现关联表的编辑操作示例
2017/07/04 PHP
拖动Html元素集合 Drag and Drop any item
2006/12/22 Javascript
js操作Xml(向服务器发送Xml,处理服务器返回的Xml)(IE下有效)
2009/01/30 Javascript
在Ajax中使用Flash实现跨域数据读取的实现方法
2010/12/02 Javascript
JS将光标聚焦在文本最后的实现代码
2014/03/28 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
2016/06/20 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
2020/04/16 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
2016/07/09 Javascript
BooStrap对导航条的改造实践小结
2016/09/21 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
微信小程序使用第三方库Immutable.js实例详解
2016/09/27 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
Vue.js 表单控件操作小结
2018/03/29 Javascript
node基于puppeteer模拟登录抓取页面的实现
2018/05/09 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
2019/09/06 Javascript
vue实现路由监听和参数监听
2019/10/29 Javascript
JS+CSS实现动态时钟
2021/02/19 Javascript
进一步了解Python中的XML 工具
2015/04/13 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
Python3如何判断三角形的类型
2020/04/12 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
python单例模式的应用场景实例讲解
2021/02/24 Python
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
学校消防演习方案
2014/02/19 职场文书
团购业务员岗位职责
2014/03/15 职场文书
网吧最新创业计划书范文
2014/03/27 职场文书
班级读书活动总结
2014/06/30 职场文书
暑期政治学习心得体会
2014/09/02 职场文书
先进单位事迹材料
2014/12/25 职场文书
技术员个人工作总结
2015/03/03 职场文书
长征观后感
2015/06/09 职场文书
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫
Java 定时任务技术趋势简介
2022/05/04 Java/Android