智能门禁刷脸照片格式gif、bmp,png转换,转换base64

随着刷脸闸机的普及,很多场所都使用了刷脸金闸机,很多时候对方传来的照片格式不对。

刷脸闸机对应的格式都是jpg

照片来源:访客手机上传,管理员上传,团队购票上传

在转换的语言很多,在网站中php使用较为广泛

一png转jpg

  $图片格式png_数据 = imagecreatefrompng($facecache_fullpath);

   $转换后保存路径 = str_replace('_ori.bmp', '_new_png.jpg', $facecache_fullpath);

   $res = imagejpeg($图片格式png_数据, $转换后保存路径);

二 gif 转换jpg

 $图片格式png_数据 = imagecreatefromgif($facecache_fullpath);

			   $dstFile = str_replace('_ori.bmp', '_new_gif.jpg', $facecache_fullpath);

               $res = imagejpeg($图片格式png_数据, $dstFile);
			   imagedestroy($dstFile);

三、bmp转换jpg

 $dstFile = str_replace('_ori.bmp', '_new_bmp.jpg', $facecache_fullpath);
			changeBMPtoJPGV2024($facecache_fullpath, $dstFile);
function changeBMPtoJPGV2024($srcPathName,$dstFile ){
    $srcFile=$srcPathName;  
   // $dstFile = str_replace('_ori.bmp', '_new.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;
    }
}
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 cyberwin_getImgFile_Type($facecache_fullpath){
	//image/png  image/bmp  image/jpeg
		$imginfo= getimagesize($facecache_fullpath);
		$图片类型 =  end($imginfo);

		if($图片类型 == "image/png"){
			return "png";
		}

		if($图片类型 == "image/bmp"){
			return "bmp";
		}

		if($图片类型 == "image/jpeg"){
			return "jpg";
		}

		if($图片类型 == "image/gif"){
			return "gif";
		}

		 

		return $图片类型;

      // return end($imginfo);
}

实现自动识别自动转换

$图片类型 = cyberwin_getImgFile_Type($facecache_fullpath);

		$目标最终地址= $facecache_fullpath;

		if($图片类型  == "jpg"){
		}

		if($图片类型  == "png"){

			  $图片格式png_数据 = imagecreatefrompng($facecache_fullpath);

			   $dstFile = str_replace('_ori.bmp', '_new_png.jpg', $facecache_fullpath);

               $res = imagejpeg($图片格式png_数据, $dstFile);

			 $目标最终地址= $dstFile;
		}

		if($图片类型  == "bmp"){

			echo "bmp格式";
			 $dstFile = str_replace('_ori.bmp', '_new_bmp.jpg', $facecache_fullpath);
			changeBMPtoJPGV2024($facecache_fullpath, $dstFile);
			
			  $目标最终地址= $dstFile;
			 
		}

		if($图片类型  == "gif"){

			  $图片格式png_数据 = imagecreatefromgif($facecache_fullpath);

			   $dstFile = str_replace('_ori.bmp', '_new_gif.jpg', $facecache_fullpath);

               $res = imagejpeg($图片格式png_数据, $dstFile);
			   imagedestroy($dstFile);
			  

			 $目标最终地址= $dstFile;
		}

将图片转换为base64,用于推送到刷脸设备

	$content互联网 = file_get_contents($目标最终地址);



		$file_content = chunk_split(base64_encode($content互联网)); // base64编码
		 $img_base64 = 'data:image/' . $img_type . ';base64,' . $file_content;//合成图片的base64编码

	    echo  $img_base64;

你可能感兴趣的:(物联网,php,门禁,php,图像处理)