Maison  >  Article  >  développement back-end  >  Comment convertir bmp au format jpg en php

Comment convertir bmp au format jpg en php

藏色散人
藏色散人original
2020-07-30 10:31:502471parcourir

Comment convertir php bmp en jpg : ouvrez d'abord le fichier "php.ini" ; puis ouvrez la bibliothèque d'extensions gd ; enfin utilisez "changeBMPtoJPG" et d'autres méthodes pour convertir le fichier bmp au format jpg.

Comment convertir bmp au format jpg en php

Recommandé : "Tutoriel vidéo PHP"

php convertit le format d'image bmp au format jpg

Avant de convertir le format d'image, générez d'abord phpinfo() pour vérifier les informations de la bibliothèque php et vérifiez si la bibliothèque d'extension gd est activée. Si elle n'est pas activée, ouvrez le fichier php.ini et <.>utilisez l'outil de recherche pour trouver extension=php_gd2 .dll, placez simplement le [;] devant extension=php_gd2.dll

La conversion au format jpg nécessite la prise en charge JPEG et png nécessite PNG. Prise en charge. Vérifiez d'abord la conversion correspondante. Si le format prend en charge

L'échec de la fonction imagejpeg() peut être un problème avec les autorisations de votre dossier. 🎜>

. Vous pouvez d'abord le vérifier avec la fonction function_exist() ImageCreateFromBMP. Est-ce qu'il existe ? ImageCreateFromBMP_private dans l'exemple suivant est utilisé pour remplacer la méthode ImageCreateFromBMP

L'exemple de code est le suivant :

<?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;
    }
}

?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn