imagecreatefrombmp 不适用于 php
Posted
技术标签:
【中文标题】imagecreatefrombmp 不适用于 php【英文标题】:imagecreatefrombmp not working on php 【发布时间】:2013-05-15 05:53:53 【问题描述】:我正在尝试将 php 中的 bmp 图像大小减半。 PHO gd 没有 imagecreatefrombmp 所以我必须包含单独的功能。但是我的代码似乎不起作用。它适用于 jpeg。这是我的代码,它应该显示 bmp 图像 test.bmp 的一半图像
<?php
if (!function_exists("imagecreatefrombmp"))
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;
// File and new size
$filename = 'wheat.bmp';
$percent = 0.5;
// Content type
header('Content-Type: image/bmp');
// Get new sizes
list($width, $height) = getimagesize($filename);
$newwidth = $width * $percent;
$newheight = $height * $percent;
// Load
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefrombmp($filename);
// Resize
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
// Output
imagejpeg($thumb);
?>
【问题讨论】:
那么实际上它似乎不起作用?什么有效,什么无效? 它只是一个银行页面,半尺寸图片不显示 【参考方案1】:在我的情况下,它也抛出了与下面相同的错误。
调用未定义函数 imagecreatefrombmp()
即使我在使用 php 版本 PHP 版本 7.1.28
所以,我把这个函数定义为
function imagecreatefrombmp($p_sFile)
$file = fopen($p_sFile,"rb");
$read = fread($file,10);
while(!feof($file)&&($read<>""))
$read .= fread($file,1024);
$temp = unpack("H*",$read);
$hex = $temp[1];
$header = substr($hex,0,108);
if (substr($header,0,4)=="424d")
$header_parts = str_split($header,2);
$width = hexdec($header_parts[19].$header_parts[18]);
$height = hexdec($header_parts[23].$header_parts[22]);
unset($header_parts);
$x = 0;
$y = 1;
$image = imagecreatetruecolor($width,$height);
$body = substr($hex,108);
$body_size = (strlen($body)/2);
$header_size = ($width*$height);
$usePadding = ($body_size>($header_size*3)+4);
for ($i=0;$i<$body_size;$i+=3)
if ($x>=$width)
if ($usePadding)
$i += $width%4;
$x = 0;
$y++;
if ($y>$height)
break;
$i_pos = $i*2;
$r = hexdec($body[$i_pos+4].$body[$i_pos+5]);
$g = hexdec($body[$i_pos+2].$body[$i_pos+3]);
$b = hexdec($body[$i_pos].$body[$i_pos+1]);
$color = imagecolorallocate($image,$r,$g,$b);
imagesetpixel($image,$x,$height-$y,$color);
$x++;
unset($body);
return $image;
作为参数,我传递了文件的相对路径。即(upload/images/example.bmp)
【讨论】:
【参考方案2】:试试imagecreatefromwbmp()
。这是将图像转换为 bmp 文件的正确功能。
【讨论】:
文档表明这是一种无线位图规范,不同于 windows 位图图像格式。【参考方案3】:显然 imagecreatefrombmp() 现在包含在 PHP 7 中。
【讨论】:
以上是关于imagecreatefrombmp 不适用于 php的主要内容,如果未能解决你的问题,请参考以下文章
生产推送通知 .p12 生产证书不适用于企业分发应用程序(应用商店之外)