Home >Backend Development >PHP Problem >How to convert bmp to jpg format in php

How to convert bmp to jpg format in php

藏色散人
藏色散人Original
2020-07-30 10:31:502525browse

php bmp to jpg method: first open the "php.ini" file; then open the gd extension library; finally use "changeBMPtoJPG" and other methods to convert the bmp file into jpg format.

How to convert bmp to jpg format in php

Recommended: "PHP Video Tutorial"

php converts bmp image format to jpg format

Before converting the image format, first output phpinfo() to check the php library information and check whether the gd extension library is turned on. If it is not turned on, open the php.ini file. Use the search tool to find extension=php_gd2 .dll, just put the [;] in front of extension=php_gd2.dll.

Converting to jpg format requires JPEG Support, and png requires PNG Support. Check the corresponding conversion first. Whether the format is supported

The failure of the imagejpeg() function may be a problem with your folder permissions. Pay more attention

You can check it first with the function_exist() function ImageCreateFromBMP Whether it exists, ImageCreateFromBMP_private in the following example is used to replace the ImageCreateFromBMP method

The sample code is as follows:

<?php 
$srcFile =&#39;test.bmp&#39;;//需要转换的图片
$info = getimagesize($srcFile);    
$srcFileExt=$info[&#39;mime&#39;];
//判断是否是bmp格式
if($srcFileExt==&#39;image/x-ms-bmp&#39;){
    $result = changeBMPtoJPG($srcFile);
    if($result){
        echo $result;
    }else{
        echo "转换失败!";
    }
}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[&#39;file_type&#39;] != 19778)
        return false;

    $BMP = unpack(&#39;Vheader_size/Vwidth/Vheight/vplanes/vbits_per_pixel&#39; .
        &#39;/Vcompression/Vsize_bitmap/Vhoriz_resolution&#39; .
        &#39;/Vvert_resolution/Vcolors_used/Vcolors_important&#39;, fread($f1, 40));
    $BMP[&#39;colors&#39;] = pow(2, $BMP[&#39;bits_per_pixel&#39;]);
    if ($BMP[&#39;size_bitmap&#39;] == 0)
        $BMP[&#39;size_bitmap&#39;] = $FILE[&#39;file_size&#39;] - $FILE[&#39;bitmap_offset&#39;];
    $BMP[&#39;bytes_per_pixel&#39;] = $BMP[&#39;bits_per_pixel&#39;] / 8;
    $BMP[&#39;bytes_per_pixel2&#39;] = ceil($BMP[&#39;bytes_per_pixel&#39;]);
    $BMP[&#39;decal&#39;] = ($BMP[&#39;width&#39;] * $BMP[&#39;bytes_per_pixel&#39;] / 4);
    $BMP[&#39;decal&#39;] -= floor($BMP[&#39;width&#39;] * $BMP[&#39;bytes_per_pixel&#39;] / 4);
    $BMP[&#39;decal&#39;] = 4 - (4 * $BMP[&#39;decal&#39;]);
    if ($BMP[&#39;decal&#39;] == 4)
        $BMP[&#39;decal&#39;] = 0;

    $PALETTE = array();
    if ($BMP[&#39;colors&#39;] < 16777216) {
        $PALETTE = unpack(&#39;V&#39; . $BMP[&#39;colors&#39;], fread($f1, $BMP[&#39;colors&#39;] * 4));
    }

    $IMG = fread($f1, $BMP[&#39;size_bitmap&#39;]);
    $VIDE = chr(0);

    $res = imagecreatetruecolor($BMP[&#39;width&#39;], $BMP[&#39;height&#39;]);
    $P = 0;
    $Y = $BMP[&#39;height&#39;] - 1;
    while ($Y >= 0) {
        $X = 0;
        while ($X < $BMP[&#39;width&#39;]) {
            switch ($BMP[&#39;bits_per_pixel&#39;]) {
                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[&#39;bytes_per_pixel&#39;];
        }
        $Y--;
        $P+=$BMP[&#39;decal&#39;];
    }
    fclose($f1);
    return $res;
}

function changeBMPtoJPG($srcPathName){
    $srcFile=$srcPathName;  
    $dstFile = str_replace(&#39;.bmp&#39;, &#39;.jpg&#39;, $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;
    }
}

?

The above is the detailed content of How to convert bmp to jpg format in php. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn