php 將bmp圖片轉(zhuǎn)為jpg等其他任意格式的圖片
更新時(shí)間:2009年06月29日 23:56:48 作者:
php 將bmp圖片轉(zhuǎn)為jpg等其他任意格式的圖片 ,這樣大家就不用為圖片是bmp格式的而發(fā)愁了。
復(fù)制代碼 代碼如下:
<? php
// 例子:
$path = ROOT . ' upload/2009/06/03/124401282315771. ' ;
$pathAll = $path . ' bmp ' ;
$mi = '' ;
$mi = ImageCreateFromBMP( $pathAll );
imagejpeg( $mi , $path . ' jpg ' );
// 函數(shù)如下:
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 imagecreatefrombmp 從BMP文件或URL新建一圖像
- 解決PHP上傳非標(biāo)準(zhǔn)格式的圖片pjpeg失敗的方法
- php實(shí)現(xiàn)將base64格式圖片保存在指定目錄的方法
- php實(shí)現(xiàn)常見(jiàn)圖片格式的水印和縮略圖制作(面向?qū)ο?
- PHP判斷圖片格式的七種方法小結(jié)
- PHP支持多種格式圖片上傳(支持jpg、png、gif)
- 簡(jiǎn)單PHP上傳圖片、刪除圖片實(shí)現(xiàn)代碼
- PHP 圖片文件上傳實(shí)現(xiàn)代碼
- php+ajax實(shí)現(xiàn)圖片文件上傳功能實(shí)例
- PHP生成圖片驗(yàn)證碼、點(diǎn)擊切換實(shí)例
- php文字水印和php圖片水印實(shí)現(xiàn)代碼(二種加水印方法)
- PHP處理bmp格式圖片的方法分析
相關(guān)文章
php中讀寫(xiě)文件與讀寫(xiě)數(shù)據(jù)庫(kù)的效率比較分享
一直以來(lái)大家都把一些不經(jīng)常修改的數(shù)據(jù)保存為文件來(lái)調(diào)用,看來(lái)還是比較正確的,直接讀文件相比數(shù)據(jù)庫(kù)查詢效率更勝一籌,而且文中還沒(méi)算上連接和斷開(kāi)的時(shí)間2013-10-10PHP 全角轉(zhuǎn)半角實(shí)現(xiàn)代碼
將一個(gè)字串中含有全角的數(shù)字字符、字母、空格或'%+-()'字符轉(zhuǎn)換為相應(yīng)半角字符2010-05-05php 數(shù)組操作(增加,刪除,查詢,排序)等函數(shù)說(shuō)明
php 數(shù)組增加,刪除,查詢,排序詳細(xì)說(shuō)明,需要的朋友可以參考下。2010-05-05php mssql擴(kuò)展SQL查詢中文字段名解決方法
問(wèn)題就出現(xiàn)在SQLServer中表的字段名是中文,寫(xiě)好的查詢語(yǔ)句在SQLServe里測(cè)試是通過(guò)有記錄返回,用PHP的MSSQL擴(kuò)展查詢就是報(bào)錯(cuò)2012-10-10基于php中echo用逗號(hào)和用點(diǎn)號(hào)的區(qū)別詳解
下面小編就為大家分享一篇基于php中echo用逗號(hào)和用點(diǎn)號(hào)的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01php定義一個(gè)參數(shù)帶有默認(rèn)值的函數(shù)實(shí)例分析
這篇文章主要介紹了php定義一個(gè)參數(shù)帶有默認(rèn)值的函數(shù),實(shí)例分析了php參數(shù)帶有默認(rèn)值的函數(shù)使用技巧,需要的朋友可以參考下2015-03-03