当前位置: 首页 > article >正文

智能门禁刷脸照片格式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;


http://www.kler.cn/a/136095.html

相关文章:

  • 谷歌建筑下载
  • 回归预测 | MATLAB实现CNN-BiGRU-Attention卷积神经网络结合双向门控循环单元融合注意力机制多输入单输出回归预测
  • 点击展示大图预览
  • WebSocket入门与结合redis
  • RabbitMQ个人理解与基本使用
  • 使用Gradio编写大模型ollama客户端 -界面版
  • 力扣labuladong——一刷day44
  • 网络参考模型与标准协议(一)
  • ORA-00600 【3948】,ORA-00600 【3949】
  • 何时使用Elasticsearch而不是MySql?
  • 虚拟化逻辑架构: 创建KVM中的VM与实现VNC远程登录
  • 键盘控制ROS车运动
  • Linux 串口应用编程
  • 阿里国际站(直通车)
  • 【开题报告】基于SpringBoot的膳食营养健康网站的设计与实现
  • WebGoat通关攻略之 SQL Injection (intro)
  • 持续集成交付CICD:Jenkins Sharedlibrary 共享库
  • Java语言基础第四天
  • centos oracle11g开启归档模式
  • 下一代搜索引擎会什么?
  • 力扣贪心——跳跃游戏I和II
  • 【整顿C盘】pycharm、chrome等软件,缓存移动
  • 记一次线上bug排查-----SpringCloud Gateway组件 请求头accept-encoding导致响应结果乱码
  • pytho你-opencv划痕检测
  • 浅谈无线测温产品在菲律宾某工厂配电项目的应用
  • 手机照片误删解决方法分享