无法在PHP中使用MIME类型“image / x-ms-bmp”从BMP创建GD图像​​资源

时间:2010-01-20 11:14:16

标签: php gd bmp

我正在尝试从BMP图像创建GD图像​​资源,但是我没有运气。

使用Photoshop创建并保存有问题的BMP图像。我在网上找到了几个BMP,他们给出了相同的结果。

getimagesize()告诉我BMP图像的图像类型为IMAGETYPE_BMP(6),MIME类型为'image / x-ms-bmp'。

我尝试通过imagecreatefromwbmp()和imagecreatefromxbm()运行图像,但都没有识别它。我也试过通过imagecreatefromstring()运行它,但是错误地说“数据不是可识别的格式”。

我正在使用PHP 5.3.1和GD 2.0.34的Windows计算机上运行XAMPP,并启用了WBMP和XBM支持。我也尝试在运行PHP 5.2.6和GD 2.0.34的Linux服务器上启用WBMP和XBM支持,结果相同。

有关如何从此BMP创建GD图像​​资源的任何想法?它真的可能吗?

6 个答案:

答案 0 :(得分:3)

据我所知,它不支持BMP图像。 imagecreatefromwbmp()方法用于处理无线位图(WBMP)文件,而不是您在那里使用的普通BMP。 imagecreatefromxbm()用于处理XBM格式(同样,与BMP不同)。

我会通过重新打开Photoshop并重新保存为PNG或JPG来解决这个问题。假设您使用适当的支持安装/编译了PHP,您将能够正常使用其中一种或两种图像格式。

答案 1 :(得分:2)

Github上有一个新的开源项目,允许在PHP中读取和保存BMP文件(和其他文件格式)。这很容易使用。

该项目名为PHP Image Magician

答案 2 :(得分:1)

您正在寻找的解决方案如下: http://tr.php.net/imagecreate

向下滚动到评论,找到名为“ ImageCreateFromBMP ”的功能。 它将帮助您从bmp图像创建图像。

创建图像后,您可以使用 imagejpeg()功能以jpeg格式保存图像。

答案 3 :(得分:0)

我似乎记得很久以前学过GD不支持BMP格式。

Here's我刚刚找到的链接。

尽管对WBMP文件存在一些疑惑,但很久以前就已经存在。

来自Delicious.com的

This timeline表明可能是2005年。

答案 4 :(得分:0)

使用功能:

function imagecreatefrombmp( $filename )
{
    $file = fopen( $filename, "rb" );
    $read = fread( $file, 10 );
    while( !feof( $file ) && $read != "" )
    {
        $read .= fread( $file, 1024 );
    }
    $temp = unpack( "H*", $read );
    $hex = $temp[1];
    $header = substr( $hex, 0, 104 );
    $body = str_split( substr( $hex, 108 ), 6 );
    if( substr( $header, 0, 4 ) == "424d" )
    {
        $header = substr( $header, 4 );
        // Remove some stuff?
        $header = substr( $header, 32 );
        // Get the width
        $width = hexdec( substr( $header, 0, 2 ) );
        // Remove some stuff?
        $header = substr( $header, 8 );
        // Get the height
        $height = hexdec( substr( $header, 0, 2 ) );
        unset( $header );
    }
    $x = 0;
    $y = 1;
    $image = imagecreatetruecolor( $width, $height );
    foreach( $body as $rgb )
    {
        $r = hexdec( substr( $rgb, 4, 2 ) );
        $g = hexdec( substr( $rgb, 2, 2 ) );
        $b = hexdec( substr( $rgb, 0, 2 ) );
        $color = imagecolorallocate( $image, $r, $g, $b );
        imagesetpixel( $image, $x, $height-$y, $color );
        $x++;
        if( $x >= $width )
        {
            $x = 0;
            $y++;
        }
    }
    return $image;
}

http://php.net/manual/ru/function.imagecreatefromwbmp.php

答案 5 :(得分:0)

PHP 7.2在GD库中引入了对BMP的支持:imagebmpimagecreatefrombmp