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+Html+缓存
Nov 25 PHP
php中的MVC模式运用技巧
May 03 PHP
php Memcache 中实现消息队列
Nov 24 PHP
PHP 读取文件内容代码(txt,js等)
Dec 06 PHP
php session和cookie使用说明
Apr 07 PHP
php返回当前日期或者指定日期是周几
May 21 PHP
调试WordPress中定时任务的相关PHP脚本示例
Dec 10 PHP
Smarty高级应用之缓存操作技巧分析
May 14 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
Aug 03 PHP
PHP CURL使用详解
Mar 21 PHP
Laravel 类和接口注入相关的代码
Oct 15 PHP
PHP中多字节字符串操作实例详解
Aug 23 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删除数组中的特定元素的代码
2012/06/28 PHP
解析PHP多种序列化与反序列化的方法
2013/06/06 PHP
thinkPHP导出csv文件及用表格输出excel的方法
2015/12/30 PHP
php版微信公众平台开发之验证步骤实例详解
2016/09/23 PHP
IE无法设置短域名下Cookie
2010/09/23 Javascript
apycom出品的jQuery精美菜单破解方法
2011/02/18 Javascript
解决IE6的PNG透明JS插件使用介绍
2013/04/17 Javascript
用innerhtml提高页面打开速度的方法
2013/08/02 Javascript
JQuery操作单选按钮以及复选按钮示例
2013/09/23 Javascript
JS简单的图片放大缩小的两种方法
2013/11/11 Javascript
jQuery 删除或是清空某个HTML元素示例
2014/08/04 Javascript
JavaScript中的闭包(Closure)详细介绍
2014/12/30 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
Node连接mysql数据库方法介绍
2017/02/07 Javascript
关于Vue单页面骨架屏实践记录
2017/12/13 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
解决$store.getters调用不执行的问题
2019/11/08 Javascript
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
[32:36]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第二场 12.12
2020/12/16 DOTA
使用pycharm设置控制台不换行的操作方法
2019/01/19 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
2019/06/18 Python
Django 响应数据response的返回源码详解
2019/08/06 Python
python读取指定字节长度的文本方法
2019/08/27 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
美国便宜的横幅和标志印刷在线:Best of Signs
2019/05/29 全球购物
东南亚冒险旅行与活动:Adventoro
2019/10/16 全球购物
PHP面试题集
2016/12/18 面试题
EntityManager都有哪些方法
2013/11/01 面试题
会计出纳员的自我评价
2014/01/15 职场文书
《十六年前的回忆》教学反思
2014/02/14 职场文书
计算机大学生职业生涯规划书范文
2014/02/19 职场文书
推荐信模板
2014/05/09 职场文书
就职演讲稿范文
2014/05/19 职场文书
微电影大赛策划方案
2014/06/05 职场文书
安全生产月标语
2014/10/07 职场文书