Heim  >  Artikel  >  Backend-Entwicklung  >  So konvertieren Sie BMP in PHP in das JPG-Format

So konvertieren Sie BMP in PHP in das JPG-Format

藏色散人
藏色散人Original
2020-07-30 10:31:502447Durchsuche

So konvertieren Sie PHP BMP in JPG: Öffnen Sie zuerst die Datei „php.ini“ und verwenden Sie schließlich „changeBMPtoJPG“ und andere Methoden, um die BMP-Datei in das JPG-Format zu konvertieren.

So konvertieren Sie BMP in PHP in das JPG-Format

Empfohlen: „PHP-Video-Tutorial

PHP konvertiert BMP-Bildformat in JPG-Format

Bevor Sie das Bildformat konvertieren, geben Sie zunächst phpinfo() aus, um die PHP-Bibliotheksinformationen zu überprüfen und zu prüfen, ob die GD-Erweiterungsbibliothek aktiviert ist. Öffnen Sie die Datei php.ini und Verwenden Sie das Suchtool, um extension=php_gd2.dll zu finden. Geben Sie einfach das [;] vor extension=php_gd2.dll ein.

Die Konvertierung in das JPG-Format erfordert JPEG-Unterstützung und PNG erfordert PNG Überprüfen Sie zunächst, ob das Format

unterstützt. Der Fehler der imagejpeg()-Funktion kann ein Problem mit Ihren Ordnerberechtigungen sein >

und Sie können es zuerst mit der Funktion function_exist() überprüfen ImageCreateFromBMP Existiert es? ImageCreateFromBMP_private wird im folgenden Beispiel verwendet, um die ImageCreateFromBMP-Methode zu ersetzen

Der Beispielcode lautet wie folgt:

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

?

Das obige ist der detaillierte Inhalt vonSo konvertieren Sie BMP in PHP in das JPG-Format. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn