Невозможно создать ресурс изображения 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 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.