PHPでmimeタイプ 'image/x-ms-bmp'を使用してBMPからGDイメージリソースを作成できません
質問
BMP画像からGD画像リソースを作成しようとしていますが、運がありません。
問題のBMP画像が作成され、Photoshopで保存されました。私もウェブ上で見つけたいくつかのBMPを試しましたが、彼らは同じ結果を出しました。
getImagesize()は、BMP画像にはImageType_BMPの画像タイプ(6)と「Image/X-MS-BMP」のMIMEタイプがあることを教えてくれます。
imagecreatefromwbmp()とmagecreatefromxbm()を介して画像を実行しようとしましたが、どちらも認識していません。また、ImageCreateFromString()を使用して実行しようとしましたが、「データは認識された形式ではない」と言ってエラーが発生しました。
WBMPとXBMサポートを有効にして、PHP 5.3.1とGD 2.0.34を備えたWindowsマシンでXAMPPを実行しています。また、WBMPとXBMサポートが有効になっているPHP 5.2.6およびGD 2.0.34を実行しているLinuxサーバーでこれを試しました。同じ結果です。
このBMPからGD画像リソースを作成する方法はありますか?それは実際に可能ですか?
解決
私の知る限り、それはBMP画像をサポートしていません。 imagecreatefromwbmp()
方法は、通常のBMPではなく、ワイヤレスビットマップ(WBMP)ファイルを扱うためのものです。 imagecreatefromxbm()
XBM形式を扱うためです(BMPとは異なります)。
Photoshopを再開し、PNGまたはJPGとして再節約することで、これを回避します。 PHPが適切なサポートをインストール/コンパイルしていると仮定すると、これらの画像形式のいずれかまたは両方を正常に作業できるようになります。
他のヒント
PHPでBMPファイル(およびその他のファイル形式)の読み取りと保存を可能にするGitHubには、新しいOpenSourceプロジェクトがあります。使いやすいです。
プロジェクトは呼ばれます PHPイメージマジシャン.
あなたが探している解決策はここにあります:http://tr.php.net/imagecreate
下のコメントにスクロールして、名前のある関数を見つけます」ImageCreateFrombmp"。BMP画像から画像を作成するのに役立ちます。
画像を作成すると、使用できます Imagejpeg() JPEG形式で画像を保存する機能。
機能を使用:
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は、GDライブラリでBMPのサポートを導入しました。 ImageBMP, ImageCreateFrombmp.