溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php bmp轉(zhuǎn)jpg有哪些實(shí)現(xiàn)方法

發(fā)布時(shí)間:2020-08-06 10:09:12 來源:億速云 閱讀:184 作者:Leah 欄目:編程語言

本篇文章為大家展示了php bmp轉(zhuǎn)jpg有哪些實(shí)現(xiàn)方法,代碼簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

php bmp轉(zhuǎn)jpg的實(shí)現(xiàn)方法:首先開啟gd擴(kuò)展庫;然后用“function_exist()”函數(shù)“ImageCreateFromBMP”檢查是否存在;最后通過“ImageCreateFromBMP_private”方法實(shí)現(xiàn)轉(zhuǎn)換即可。

進(jìn)行圖片格式轉(zhuǎn)換前,先輸出phpinfo()查看php庫信息,查看gd擴(kuò)展庫是否開啟,若未開啟,打開php.ini文件,用查找工具找到extension=php_gd2.dll,把extension=php_gd2.dll 前面的【;】,就可以了

這里轉(zhuǎn)換成為jpg格式需要JPEG Support支持,png需要 PNG Support支持,對(duì)應(yīng)的先檢查自己轉(zhuǎn)的格式是否支持

php bmp轉(zhuǎn)jpg有哪些實(shí)現(xiàn)方法

imagejpeg()函數(shù)失敗也許是你的文件夾權(quán)限問題,得多注意

可以先用function_exist()函數(shù)ImageCreateFromBMP檢查是否存在,下例中的ImageCreateFromBMP_private用來代替ImageCreateFromBMP方法

示例代碼如下:

<?php 
$srcFile ='test.bmp';//需要轉(zhuǎn)換的圖片$info = getimagesize($srcFile);    
$srcFileExt=$info['mime'];//判斷是否是bmp格式if($srcFileExt=='image/x-ms-bmp'){    $result = changeBMPtoJPG($srcFile);    if($result){        echo $result;
    }else{        echo "轉(zhuǎn)換失敗!";
    }
}else{    echo "該圖片不是bmp格式";
} 
exit;function ImageCreateFromBMP_private($filename) {    if (!$f1 = fopen($filename, "rb"))        return false;    $FILE = unpack("vfile_type/Vfile_size/Vreserved/Vbitmap_offset", fread($f1, 14));    if ($FILE['file_type'] != 19778)        return false;    $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;    $PALETTE = array();    if ($BMP['colors'] < 16777216) {        $PALETTE = unpack('V' . $BMP['colors'], fread($f1, $BMP['colors'] * 4));
    }    $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']) {            switch ($BMP['bits_per_pixel']) {                case 32:                    $COLOR = unpack("V", substr($IMG, $P, 3) . $VIDE);                    break;                case 24:                    $COLOR = unpack("V", substr($IMG, $P, 3) . $VIDE);                    break;                case 16:                    $COLOR = unpack("n", substr($IMG, $P, 2));                    $COLOR[1] = $PALETTE[$COLOR[1] + 1];                    break;                case 8:                    $COLOR = unpack("n", $VIDE . substr($IMG, $P, 1));                    $COLOR[1] = $PALETTE[$COLOR[1] + 1];                    break;                case 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];                    break;                case 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];                    break;                default:                    return false;                    break;
            }

            imagesetpixel($res, $X, $Y, $COLOR[1]);            $X++;            $P += $BMP['bytes_per_pixel'];
        }        $Y--;        $P+=$BMP['decal'];
    }    fclose($f1);    return $res;
}function changeBMPtoJPG($srcPathName){    $srcFile=$srcPathName;  
    $dstFile = str_replace('.bmp', '.jpg', $srcPathName);    $photoSize = GetImageSize($srcFile);  
    $pw = $photoSize[0];  
    $ph = $photoSize[1];    $dstImage = ImageCreateTrueColor($pw, $ph);  
    $white = imagecolorallocate($dstImage, 255, 255, 255);    //用 $white 顏色填充圖像
    imagefill( $dstImage, 0, 0, $white);    //讀取圖片  
    $srcImage = ImageCreateFromBMP_private($srcFile); 
    //合拼圖片  
    imagecopyresampled($dstImage, $srcImage, 0, 0, 0, 0, $pw, $ph, $pw, $ph);  
    $judge = imagejpeg($dstImage, $dstFile, 90);  
    imagedestroy($dstImage);    if($judge){        return $dstFile;
    }else{        return false;
    }
}?>

上述內(nèi)容就是php bmp轉(zhuǎn)jpg有哪些實(shí)現(xiàn)方法,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI