Невозможно создать ресурс изображения GD из BMP с типом MIME 'Image/X-MS-BMP' в PHP

StackOverflow https://stackoverflow.com/questions/2100875

  •  21-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь создать ресурс изображения 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 Image из этого BMP? Это действительно возможно?

Это было полезно?

Решение

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

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

Другие советы

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

Проект называется PHP изображение Маг.

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

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

После создания изображения вы можете использовать ImageJpeg () Функция для сохранения изображения в формате JPEG.

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

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

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

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

Используйте функцию:

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

PHP 7.2 внедренная поддержка BMP в библиотеке GD: ImageBmp, ImageCreateFrombmp.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top