3

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

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

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

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

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

有什么想法可以从这个 BMP 创建一个 GD 图像资源吗?真的有可能吗?

4

6 回答 6

3

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

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

于 2010-01-20T11:19:28.497 回答
2

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

该项目称为PHP Image Magician

于 2012-07-19T04:29:43.063 回答
1

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

滚动到下面的评论以找到名为“ ImageCreateFromBMP ”的函数。它将帮助您从 bmp 图像创建图像。

创建图像后,您可以使用imagejpeg()函数将图像保存为 jpeg 格式。

于 2010-03-28T21:12:35.440 回答
0

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

这是我刚刚找到的链接。

虽然对 WBMP 文件有些混淆,但那是很久以前的事了。

来自 Delicious.com 的时间线表明它可能是 2005 年。

于 2010-01-20T11:24:04.253 回答
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

于 2015-04-11T14:50:55.140 回答
0

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

于 2018-03-29T11:44:49.310 回答