Não é possível criar recurso de imagem GD de BMP com tipo MIME 'image/x-ms-bmp' em PHP

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

  •  21-09-2019
  •  | 
  •  

Pergunta

Estou tentando criar um recurso de imagem GD a partir de uma imagem BMP, porém não estou tendo sorte.

A imagem BMP em questão foi criada e salva no Photoshop.Também tentei alguns BMPs que encontrei na web e eles deram os mesmos resultados.

getimagesize() me diz que a imagem BMP tem um tipo de imagem IMAGETYPE_BMP (6) e um tipo MIME de 'image/x-ms-bmp'.

Tentei executar a imagem por meio de imagecreatefromwbmp() e imagecreatefromxbm(), mas nenhum deles a reconheceu.Também tentei executá-lo por meio de imagecreatefromstring (), mas ocorreu um erro ao dizer 'Os dados não estão em um formato reconhecido'.

Estou executando o XAMPP em uma máquina Windows com PHP 5.3.1 e GD 2.0.34 com suporte WBMP e XBM habilitado.Também tentei isso em um servidor Linux rodando PHP 5.2.6 e GD 2.0.34 com suporte WBMP e XBM habilitado, mesmo resultado.

Alguma idéia de como posso criar um recurso de imagem GD a partir deste BMP?É realmente possível?

Foi útil?

Solução

Pelo que eu sei, ele não suporta imagens BMP.O imagecreatefromwbmp() O método é para lidar com arquivos de bitmaps sem fio (WBMP), não com o BMP normal que você possui.O imagecreatefromxbm() é para lidar com o formato XBM (novamente, diferente de BMP).

Eu resolveria isso reabrindo o Photoshop e salvando novamente como PNG ou JPG.Supondo que você tenha o PHP instalado/compilado com o suporte apropriado, você poderá trabalhar perfeitamente com um ou ambos os formatos de imagem.

Outras dicas

Existe um novo projeto de código aberto no Github que permite ler e salvar arquivos BMP (e outros formatos de arquivo) em PHP.É muito fácil de usar.

O projeto é chamado Mágico de imagens PHP.

A solução que você procura está aqui:http://tr.php.net/imagecreate

Role abaixo até os comentários para encontrar a função chamada "ImagemCreateFromBMP".Isso o ajudará a criar imagens a partir de imagens bmp.

Depois de criar a imagem, você pode usar o imagemjpeg() função para salvar a imagem no formato jpeg.

Parece que me lembro de ter aprendido há muito tempo que o GD não suporta o formato BMP.

Aqui está um link que acabei de encontrar.

Embora tenha havido alguma confusão sobre os arquivos WBMP, isso foi há muito tempo.

Esta linha do tempo do Delicious.com indica que provavelmente foi em 2005.

usar função:

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;
}

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

PHP 7.2 introduziu suporte para BMP na biblioteca GD: imagembmp, imagemcreatefrombmp.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top