Невозможно создать ресурс изображения GD из BMP с типом MIME «image/x-ms-bmp» в PHP

Я пытаюсь создать ресурс изображения GD из изображения BMP, однако мне не повезло.

Рассматриваемое изображение BMP было создано и сохранено с помощью Photoshop. Я также попробовал пару BMP, которые нашел в Интернете, и они дали те же результаты.

getimagesize() говорит мне, что изображение BMP имеет тип изображения IMAGETYPE_BMP (6) и тип MIME «image/x-ms-bmp».

Я пытался запустить образ через imagecreatefromwbmp() и imagecreatefromxbm(), но ни один из них не распознал его. Я также пытался запустить его через imagecreatefromstring(), но это привело к ошибке: «Данные не в распознанном формате».

Я запускаю XAMPP на компьютере с Windows с PHP 5.3.1 и GD 2.0.34 с включенной поддержкой WBMP и XBM. Я также пробовал это на сервере Linux с PHP 5.2.6 и GD 2.0.34 с включенной поддержкой WBMP и XBM, тот же результат.

Любые идеи, как я могу создать ресурс изображения GD из этого BMP? Это действительно возможно?


person Stephen Melrose    schedule 20.01.2010    source источник


Ответы (6)


Насколько я знаю, он не поддерживает изображения в формате BMP. Метод imagecreatefromwbmp() предназначен для работы с файлами беспроводных растровых изображений (WBMP), а не с обычным BMP, который у вас есть. imagecreatefromxbm() предназначен для работы с форматом XBM (опять же, отличается от BMP).

Я бы обошёл это, повторно открыв Photoshop и повторно сохранив в формате PNG или JPG. Предполагая, что у вас установлен/скомпилирован PHP с соответствующей поддержкой, вы сможете нормально работать с одним или обоими этими форматами изображений.

person Mark Embling    schedule 20.01.2010
comment
Вероятно, быстрее использовать convert от ImageMagick, если вам нужно преобразовать более пары изображений. - person Ignacio Vazquez-Abrams; 20.01.2010
comment
Я знал, что мне не хватает чего-то такого простого. Я просто предположил, что WBMP — это растровое изображение Windows или что-то в этом роде. Спасибо. - person Stephen Melrose; 20.01.2010

На Github есть новый проект с открытым исходным кодом, который позволяет читать и сохранять файлы BMP (и другие форматы файлов) в PHP. Это довольно легко использовать.

Проект называется PHP Image Magician.

person Jarrod    schedule 19.07.2012

Решение, которое вы ищете, находится здесь: http://tr.php.net/imagecreate

Прокрутите вниз до комментариев, чтобы найти функцию с именем «ImageCreateFromBMP». Это поможет вам создавать изображения из изображений BMP.

Создав изображение, вы можете использовать функцию imagejpeg(), чтобы сохранить изображение в формате jpeg.

person Haluk    schedule 28.03.2010
comment
Идеально. Рабочее решение прямо из источника (официальный веб-сайт PHP). У меня отлично работает - person Viktor; 11.09.2016

Кажется, я давно узнал, что GD не поддерживает формат BMP.

Вот ссылка, которую я только что нашел.

Хотя была некоторая путаница с файлами WBMP, это было давно.

Эта временная шкала с сайта Delicious.com указывает это был наверное 2005 год.

person pavium    schedule 20.01.2010

использовать функцию:

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

person igor    schedule 11.04.2015

В PHP 7.2 появилась поддержка BMP в библиотеке GD: imagebmp, imagecreatefrombmp.

person Robo Robok    schedule 29.03.2018