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代码
Sep 14 PHP
php源代码安装常见错误与解决办法分享
May 28 PHP
php实现保存submit内容之后禁止刷新
Mar 19 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
Sep 23 PHP
set_exception_handler函数在ThinkPHP中的用法
Oct 31 PHP
php使用正则表达式进行字符串搜索的方法
Mar 23 PHP
PHP处理postfix邮件内容的方法
Jun 16 PHP
php实现的网络相册图片防盗链完美破解方法
Jul 01 PHP
我整理的PHP 7.0主要新特性
Jan 07 PHP
thinkPHP框架自动填充原理与用法分析
Apr 03 PHP
PHP随机数函数rand()与mt_rand()的讲解
Mar 25 PHP
Laravel框架下载,安装及路由操作图文详解
Dec 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
强烈推荐:php.ini中文版(1)
2006/10/09 PHP
php继承的一个应用
2011/09/06 PHP
php inc文件使用的风险和注意事项
2013/11/12 PHP
浅析php创建者模式
2014/11/25 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
JS动画效果代码3
2008/04/03 Javascript
contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2011/09/13 Javascript
人人网javascript面试题 可以提前实现下
2012/01/05 Javascript
JS实现淘宝幻灯片效果的实现方法
2013/03/22 Javascript
jsPDF生成pdf后在网页展示实例
2014/01/16 Javascript
js打开windows上的可执行文件示例
2014/05/27 Javascript
js判断浏览器类型及设备(移动页面开发)
2015/07/30 Javascript
javascript实现PC网页里的拖拽效果
2016/03/14 Javascript
使用cookie绕过验证码登录的实现代码
2017/10/12 Javascript
vue 1.x 交互实现仿百度下拉列表示例
2017/10/21 Javascript
VueJs使用Amaze ui调整列表和内容页面
2017/11/30 Javascript
jQuery+SpringMVC中的复选框选择与传值实例
2018/01/08 jQuery
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
深入理解js A*寻路算法原理与具体实现过程
2018/12/13 Javascript
jQuery 选择器用法基础入门示例
2020/01/04 jQuery
Selenium执行Javascript脚本参数及返回值过程详解
2020/04/01 Javascript
Jquery ajax书写方法代码实例解析
2020/06/12 jQuery
微信小程序视频弹幕发送功能的实现
2020/12/28 Javascript
[01:20]2018DOTA2亚洲邀请赛总决赛战队LGD晋级之路
2018/04/07 DOTA
Python函数学习笔记
2008/10/07 Python
python下paramiko模块实现ssh连接登录Linux服务器
2015/06/03 Python
Python 读写文件和file对象的方法(推荐)
2016/09/12 Python
python paramiko模块学习分享
2017/08/23 Python
机器学习的框架偏向于Python的13个原因
2017/12/07 Python
python 缺失值处理的方法(Imputation)
2019/07/02 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
优秀共青团员事迹材料
2014/12/25 职场文书
建党伟业的观后感
2015/06/01 职场文书
导游词之上海杜莎夫人蜡像馆
2019/11/22 职场文书
《极主夫道》真人电影正式预告 定档6月3日上映
2022/04/05 日漫