这篇文章运用简单易懂的例子给大家介绍如何使用php将bmp转jpg格式,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
php bmp转jpg的方法:首先打开“php.ini”文件;然后开启gd扩展库;最后使用“changeBMPtoJPG”等方法将bmp的文件转换成jpg格式即可。
php转换bmp图片格式为jpg格式
进行图片格式转换前,先输出phpinfo()查看php库信息,查看gd扩展库是否开启,若未开启,打开php.ini文件,用查找工具找到extension=php_gd2.dll,把extension=php_gd2.dll 前面的【;】,就可以了
这里转换成为jpg格式需要JPEG Support支持,png需要 PNG Support支持,对应的先检查自己转的格式是否支持
imagejpeg()函数失败也许是你的文件夹权限问题,得多注意
可以先用function_exist()函数ImageCreateFromBMP检查是否存在,下例中的ImageCreateFromBMP_private用来代替ImageCreateFromBMP方法
示例代码如下:
<?php
$srcFile ='test.bmp';//需要转换的图片
$info = getimagesize($srcFile);
$srcFileExt=$info['mime'];
//判断是否是bmp格式
if($srcFileExt=='image/x-ms-bmp'){
$result = changeBMPtoJPG($srcFile);
if($result){
echo $result;
}else{
echo "转换失败!";
}
}else{
echo "该图片不是bmp格式";
}
exit;
function ImageCreateFromBMP_private($filename) {
if (!$f1 = fopen($filename, "rb"))
return false;
$FILE = unpack("vfile_type/Vfile_size/Vreserved/Vbitmap_offset", fread($f1, 14));
if ($FILE['file_type'] != 19778)
return false;
$BMP = unpack('Vheader_size/Vwidth/Vheight/vplanes/vbits_per_pixel' .
'/Vcompression/Vsize_bitmap/Vhoriz_resolution' .
'/Vvert_resolution/Vcolors_used/Vcolors_important', fread($f1, 40));
$BMP['colors'] = pow(2, $BMP['bits_per_pixel']);
if ($BMP['size_bitmap'] == 0)
$BMP['size_bitmap'] = $FILE['file_size'] - $FILE['bitmap_offset'];
$BMP['bytes_per_pixel'] = $BMP['bits_per_pixel'] / 8;
$BMP['bytes_per_pixel2'] = ceil($BMP['bytes_per_pixel']);
$BMP['decal'] = ($BMP['width'] * $BMP['bytes_per_pixel'] / 4);
$BMP['decal'] -= floor($BMP['width'] * $BMP['bytes_per_pixel'] / 4);
$BMP['decal'] = 4 - (4 * $BMP['decal']);
if ($BMP['decal'] == 4)
$BMP['decal'] = 0;
$PALETTE = array();
if ($BMP['colors'] < 16777216) {
$PALETTE = unpack('V' . $BMP['colors'], fread($f1, $BMP['colors'] * 4));
}
$IMG = fread($f1, $BMP['size_bitmap']);
$VIDE = chr(0);
$res = imagecreatetruecolor($BMP['width'], $BMP['height']);
$P = 0;
$Y = $BMP['height'] - 1;
while ($Y >= 0) {
$X = 0;
while ($X < $BMP['width']) {
switch ($BMP['bits_per_pixel']) {
case 32:
$COLOR = unpack("V", substr($IMG, $P, 3) . $VIDE);
break;
case 24:
$COLOR = unpack("V", substr($IMG, $P, 3) . $VIDE);
break;
case 16:
$COLOR = unpack("n", substr($IMG, $P, 2));
$COLOR[1] = $PALETTE[$COLOR[1] + 1];
break;
case 8:
$COLOR = unpack("n", $VIDE . substr($IMG, $P, 1));
$COLOR[1] = $PALETTE[$COLOR[1] + 1];
break;
case 4:
$COLOR = unpack("n", $VIDE . substr($IMG, floor($P), 1));
if (($P * 2) % 2 == 0)
$COLOR[1] = ($COLOR[1] >> 4);
else
$COLOR[1] = ($COLOR[1] & 0x0F);
$COLOR[1] = $PALETTE[$COLOR[1] + 1];
break;
case 1:
$COLOR = unpack("n", $VIDE . substr($IMG, floor($P), 1));
if (($P * 8) % 8 == 0)
$COLOR[1] = $COLOR[1] >> 7;
elseif (($P * 8) % 8 == 1)
$COLOR[1] = ($COLOR[1] & 0x40) >> 6;
elseif (($P * 8) % 8 == 2)
$COLOR[1] = ($COLOR[1] & 0x20) >> 5;
elseif (($P * 8) % 8 == 3)
$COLOR[1] = ($COLOR[1] & 0x10) >> 4;
elseif (($P * 8) % 8 == 4)
$COLOR[1] = ($COLOR[1] & 0x8) >> 3;
elseif (($P * 8) % 8 == 5)
$COLOR[1] = ($COLOR[1] & 0x4) >> 2;
elseif (($P * 8) % 8 == 6)
$COLOR[1] = ($COLOR[1] & 0x2) >> 1;
elseif (($P * 8) % 8 == 7)
$COLOR[1] = ($COLOR[1] & 0x1);
$COLOR[1] = $PALETTE[$COLOR[1] + 1];
break;
default:
return false;
break;
}
imagesetpixel($res, $X, $Y, $COLOR[1]);
$X++;
$P += $BMP['bytes_per_pixel'];
}
$Y--;
$P+=$BMP['decal'];
}
fclose($f1);
return $res;
}
function changeBMPtoJPG($srcPathName){
$srcFile=$srcPathName;
$dstFile = str_replace('.bmp', '.jpg', $srcPathName);
$photoSize = GetImageSize($srcFile);
$pw = $photoSize[0];
$ph = $photoSize[1];
$dstImage = ImageCreateTrueColor($pw, $ph);
$white = imagecolorallocate($dstImage, 255, 255, 255);
//用 $white 颜色填充图像
imagefill( $dstImage, 0, 0, $white);
//读取图片
$srcImage = ImageCreateFromBMP_private($srcFile);
//合拼图片
imagecopyresampled($dstImage, $srcImage, 0, 0, 0, 0, $pw, $ph, $pw, $ph);
$judge = imagejpeg($dstImage, $dstFile, 90);
imagedestroy($dstImage);
if($judge){
return $dstFile;
}else{
return false;
}
}
?
关于如何使用php将bmp转jpg格式就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。