【问题标题】:Unable to create GD image resource from BMP with MIME type 'image/x-ms-bmp' in PHP无法在 PHP 中使用 MIME 类型“image/x-ms-bmp”从 BMP 创建 GD 图像资源
【发布时间】:2010-01-20 11:14:16
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: php gd bmp


    【解决方案1】:

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

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

    【讨论】:

    • 如果您要转换多张图片,使用 ImageMagick 中的convert 可能会更快。
    • 我知道我错过了这么简单的东西。我只是假设 WBMP 是 Windows 位图或其他东西。谢谢。
    【解决方案2】:

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

    项目名为PHP Image Magician

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 完美。从源头(官方 PHP 网站)开始工作的解决方案。对我来说很好用
      【解决方案4】:

      我好像记得很久以前知道 GD 不支持 BMP 格式。

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

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

      来自 Delicious.com 的This timeline 表示可能是 2005 年。

      【讨论】:

        【解决方案5】:

        使用功能:

        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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-09-06
            • 1970-01-01
            • 2010-12-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多