Impossibile creare GD risorsa immagine da BMP con il tipo MIME 'immagine / x-ms-bmp' in PHP

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

  •  21-09-2019
  •  | 
  •  

Domanda

Sto cercando di creare una risorsa immagine GD da un'immagine BMP, però sto avendo fortuna.

L'immagine BMP in questione è stato creato e salvato con Photoshop. Ho provato un paio di BMP ho trovato anche sul web, e hanno dato gli stessi risultati.

getimagesize () mi dice l'immagine BMP ha un tipo di immagine di IMAGETYPE_BMP (6) e un tipo MIME di 'image / x-ms-bmp'.

Ho provato a fare funzionare l'immagine attraverso imagecreatefromwbmp () e imagecreatefromxbm (), ma neppure riconoscerlo. Ho anche provato a fare funzionare attraverso imagecreatefromstring (), ma che con errori dicendo 'I dati non è in un formato riconosciuto'.

Io corro XAMPP su una macchina Windows con PHP 5.3.1 e 2.0.34 GD con WBMP e supporto XBM abilitato. Ho anche provato questo su un server Linux in esecuzione PHP 5.2.6 e GD 2.0.34 con supporto WBMP e XBM abilitato, stesso risultato.

Tutte le idee come posso creare una risorsa immagine GD da questo BMP? E 'davvero possibile?

È stato utile?

Soluzione

Per quanto ne so, non supporta le immagini BMP. Il metodo imagecreatefromwbmp() è per trattare con i file bitmap senza fili (WBMP), non il normale BMP che hai lì. Il imagecreatefromxbm() è per trattare con il formato XBM (di nuovo, diverso da BMP).

Vorrei lavorare intorno a questo ri-apertura di Photoshop e ri-salvare come PNG o JPG. Supponendo di aver installato PHP / compilato con il supporto del caso, sarete in grado di lavorare con uno o entrambi i formati di immagine fine.

Altri suggerimenti

C'è un nuovo progetto opensource su Github che permette la lettura e il salvataggio dei file BMP (e altri formati di file) in PHP. E 'abbastanza facile da usare.

Il progetto si chiama PHP Immagine Mago .

La soluzione che stai cercando è qui: http://tr.php.net/imagecreate

Scorrere seguito ai commenti di trovare la funzione denominata " ImageCreateFromBMP ". Essa vi aiuterà a creare le immagini dalle immagini BMP.

Una volta che si crea l'immagine è possibile utilizzare il imagejpeg () per salvare l'immagine in formato jpeg.

Mi sembra di ricordare l'apprendimento molto tempo fa, che GD non supporta il formato BMP.

Ecco un link che ho appena trovato.

Anche se ci fosse una certa confusione sui file WBMP, era molto tempo fa.

questa linea temporale da Delicious .com indica probabilmente era il 2005.

funzione d'uso:

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

fonte http://php.net/manual/ru/function.imagecreatefromwbmp.php

PHP 7.2 ha introdotto il supporto per BMP nella libreria GD: imageBmp , < a href = "http://php.net/manual/en/function.imagecreatefrombmp.php" rel = "nofollow noreferrer"> imagecreatefrombmp .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top