php 將bmp圖片轉(zhuǎn)為jpg等其他任意格式的圖片
更新時間:2009年06月29日 23:56:48 作者:
php 將bmp圖片轉(zhuǎn)為jpg等其他任意格式的圖片 ,這樣大家就不用為圖片是bmp格式的而發(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上傳非標準格式的圖片pjpeg失敗的方法
- php實現(xiàn)將base64格式圖片保存在指定目錄的方法
- php實現(xiàn)常見圖片格式的水印和縮略圖制作(面向?qū)ο?
- PHP判斷圖片格式的七種方法小結(jié)
- PHP支持多種格式圖片上傳(支持jpg、png、gif)
- 簡單PHP上傳圖片、刪除圖片實現(xiàn)代碼
- PHP 圖片文件上傳實現(xiàn)代碼
- php+ajax實現(xiàn)圖片文件上傳功能實例
- PHP生成圖片驗證碼、點擊切換實例
- php文字水印和php圖片水印實現(xiàn)代碼(二種加水印方法)
- PHP處理bmp格式圖片的方法分析
相關(guān)文章
PHP使用redis實現(xiàn)統(tǒng)計緩存mysql壓力的方法
這篇文章主要介紹了PHP使用redis實現(xiàn)統(tǒng)計緩存mysql壓力的方法,涉及PHP操作MySQL數(shù)據(jù)庫及使用Redis統(tǒng)計的相關(guān)技巧,需要的朋友可以參考下2015-11-11
批量獲取memcache值并按key的順序返回的實現(xiàn)代碼
一臺memcache時返回是正確的,在有多臺memcache時就無法一一對應的按順序返回。2011-06-06
php從csv文件讀取數(shù)據(jù)并輸出到網(wǎng)頁的方法
這篇文章主要介紹了php從csv文件讀取數(shù)據(jù)并輸出到網(wǎng)頁的方法,涉及php中fgetcsv函數(shù)及數(shù)組遍歷的使用技巧,需要的朋友可以參考下2015-03-03
PHP中addslashes與mysql_escape_string的區(qū)別分析
這篇文章主要介紹了PHP中addslashes與mysql_escape_string的區(qū)別,簡單分析了addslashes與mysql_escape_string在使用過程中的區(qū)別,具有一定參考借鑒價值,需要的朋友可以參考下2016-04-04
php 命名空間(namespace)原理與用法實例小結(jié)
這篇文章主要介紹了php 命名空間(namespace)原理與用法,結(jié)合實例形式總結(jié)分析了PHP命名空間的相關(guān)概念、原理、基本使用方法及相關(guān)操作注意事項,需要的朋友可以參考下2019-11-11
php使用str_replace替換多維數(shù)組的實現(xiàn)方法分析
這篇文章主要介紹了php使用str_replace替換多維數(shù)組的實現(xiàn)方法,結(jié)合具體實例對比分析了php針對多維數(shù)組的遍歷與替換操作相關(guān)實現(xiàn)技巧與注意事項,需要的朋友可以參考下2017-06-06

