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

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

相关文章:

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

随着刷脸闸机的普及&#xff0c;很多场所都使用了刷脸金闸机&#xff0c;很多时候对方传来的照片格式不对。 刷脸闸机对应的格式都是jpg 照片来源&#xff1a;访客手机上传&#xff0c;管理员上传&#xff0c;团队购票上传 在转换的语言很多&#xff0c;在网站中php使用较为…...

听GPT 讲Rust源代码--src/librustdoc

题图来自 Why is building a UI in Rust so hard? File: rust/src/librustdoc/core.rs 在Rust中&#xff0c;rust/src/librustdoc/core.rs文件的作用是实现了Rustdoc库的核心功能和数据结构。Rustdoc是一个用于生成Rust文档的工具&#xff0c;它分析Rust源代码&#xff0c;并生…...

hosts 配置本地映射不生效

关闭所有科学上网工具&#xff01;&#xff01;刷新 DNS 解析缓存&#xff1a;ipconfig /flushdns关闭所有浏览器访问映射地址时&#xff0c;带上端口号...

Linux难学?大神告诉你,Linux到底该怎么自学!

文章目录 Part.1Part.2Part.3写作末尾 知乎上有一条热门问答&#xff0c;问题是“Linux为什么那么难&#xff1f;” 从问题来看&#xff0c;提问者还处在初学阶段。但他显然受困于 Linux 环境基本操作的问题&#xff0c;对操作系统本身的原理还不熟悉&#xff0c;并且对命令行工…...

GAMES101—Lec 05~06:光栅化

目录 概念回顾&#xff08;个人理解&#xff09;光栅化1.采样2.采样出现的问题&#xff1a;走样 反走样 概念回顾&#xff08;个人理解&#xff09; 屏幕&#xff1a;在图形学中&#xff0c;我们认为屏幕是一个二维数组&#xff0c;数组里的每一个元素为一个二维像素。 光栅化…...

R语言——taxize(第三部分)

taxize&#xff08;第三部分&#xff09; 3. taxize 文档中译3.24. genbank2uid&#xff08;从 GenBankID 获取 NCBI 分类 UID&#xff09;3.25. getkey&#xff08;获取 API 密钥的函数&#xff09;3.26. get_boldid&#xff08;获取搜索词的 BOLD&#xff08;生命条形码&…...

用于神经网络的FLOP和Params计算工具

用于神经网络的FLOP和Params计算工具 1. FlopCountAnalysis pip install fvcoreimport torch from torchvision.models import resnet152, resnet18 from fvcore.nn import FlopCountAnalysis, parameter_count_tablemodel resnet152(num_classes1000)tensor (torch.rand(1…...

CUDA核函数,如何设置grid和block即不超过大小又能够遍历整个volume

此问题答案来自于openAI 1、Grid 大小&#xff1a; Grid 的大小由 dim3 grid 定义&#xff0c;其三个分量分别表示在 x、y、z 方向上的 Grid 数量。Grid 的大小不应该超过 GPU 的最大 Grid 大小。cudaDeviceGetAttribute获取限制。 int maxGridSizeX, maxGridSizeY, maxGridS…...

【Linux】软连接和硬链接:创建、管理和解除链接的操作

文章目录 1. 软链接和硬链接简介2. Linux软链接使用方法3. Linux硬链接使用方法4. 总结 1. 软链接和硬链接简介 什么是软链接 软链接(Symbolic Link),也称为符号链接,是包含了源文件位置信息的特殊文件。它的作用是间接指向一个文件或目录。如果软链接的源文件被删除或移动了,软…...

Matlab群体智能优化算法之海象优化算法(WO)

文章目录 一、灵感来源二、算法的初始化三、GTO的数学模型Phase1&#xff1a;危险信号和安全信号Phase2&#xff1a;迁移&#xff08;探索&#xff09;Phase3&#xff1a;繁殖&#xff08;开发&#xff09; 四、流程图五、伪代码六、算法复杂度七、WO搜索示意图八、实验分析和结…...

go语言学习-结构体

1、简介 Go语言中的结构体是一种自定义数据类型,可以将不同类型的数据字符组合在一起形成一个单独的实体。结构体可以用于存储和操作复杂的数据结构,以及创建自定义数据类型。通过自定义结构体创建的变量,可以存储不同类型的数据字段。在实际开发中,结构体的用途非常广泛,…...

Stable Diffusion进阶玩法说明

之前章节介绍了Stable Diffusion的入门&#xff0c;介绍了文生图的魅力&#xff0c;可以生成很多漂亮的照片&#xff0c;非常棒 传送门&#xff1a; Stable Diffusion新手村-我们一起完成AI绘画-CSDN博客 那我们今天就进一步讲讲这个Stable Diffusion还能做些什么&#xff0c; …...

PDF控件Spire.PDF for .NET【转换】演示:将PDF 转换为 HTML

由于各种原因&#xff0c;您可能想要将 PDF 转换为 HTML。例如&#xff0c;您需要在社交媒体上共享 PDF 文档或在网络上发布 PDF 内容。在本文中&#xff0c;您将了解如何使用Spire.PDF for .NET在 C# 和 VB.NET 中将 PDF 转换为 HTML。 Spire.Doc 是一款专门对 Word 文档进行…...

二分查找——34. 在排序数组中查找元素的第一个和最后一个位置

文章目录 1. 题目2. 算法原理2.1 暴力解法2.2 二分查找左端点查找右端点查找 3. 代码实现4. 二分模板 1. 题目 题目链接&#xff1a;34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣&#xff08;LeetCode&#xff09; 给你一个按照非递减顺序排列的整数数组 nums&#…...

MFC中的主窗口以及如何通过代码找到主窗口

MFC程序中的主窗口 在MFC程序中&#xff0c;可以设置主窗口&#xff0c;主窗口在应用程序类中设置&#xff0c;即设置应用程序类&#xff08;通常以App结尾&#xff0c;通常包括InitInstance方法的类&#xff09;的m_pMainWnd属性&#xff0c;将其设置为主窗口的指针。 一般在…...

Typora下载安装 (Mac和Windows)图文详解

目录 Windows版本 一、下载 二、安装 Mac版本 一、下载 二、安装...

32位单片机PY32F040,主频72M,外设丰富,支持断码LCD

PY32F040 系列微控制器采用高性能的 32 位 ARM Cortex-M0 内核,宽电压工作范围的 MCU。嵌入高达 128 Kbytes flash 和 16 Kbytes SRAM 存储器,最高工作频率 72 MHz。LQFP64封装两块出头就可以拿到&#xff0c;我们还有开发板和开发资料帮助客户更好的开发。 PY32F040 系列微控…...

Shell判断:模式匹配:case(二)

简单的JumpServer 1、需求&#xff1a;工作中&#xff0c;我们需要管理N多个服务器。那么访问服务器就是一件繁琐的事情。通过shell编程&#xff0c;编写跳板程序。当我们需要访问服务器时&#xff0c;看一眼服务器列表名&#xff0c;按一下数字&#xff0c;就登录成功了。 2、…...

从android.graphics.Path中取出Point点,Kotlin

从android.graphics.Path中取出Point点&#xff0c;Kotlin /*** 从一条Path中获取多少个Point点*/private fun getPoints(path: Path, pointCount: Int): Array<FloatPoint?> {val points arrayOfNulls<FloatPoint>(pointCount)val pm PathMeasure(path, false)…...

力扣C++学习笔记——C++ 给vector去重

要使用std::set对std::vector进行去重操作&#xff0c;您可以将向量中的元素插入到集合中&#xff0c;因为std::set会自动去除重复元素。然后&#xff0c;您可以将集合中的元素重新存回向量中。以下是一个示例代码&#xff0c;演示如何使用std::set对std::vector进行去重&#…...

库存预测准确率大PK!实在Agent如何终结企业“库存积压”噩梦?

摘要&#xff1a;在2026年全球供应链进入“盈利竞赛”的理性成熟期&#xff0c;库存预测的精准度已成为制造与流通企业的生命线。面对IDC预测的300亿美元规模市场&#xff0c;企业不仅面临库存积压与资金占用的双重压力&#xff0c;更深陷系统围墙、信创适配难及传统自动化工具…...

集成电路PVT角点分析的零调优智能方法

1. 多元角点分析的技术挑战与突破在集成电路设计领域&#xff0c;工艺-电压-温度&#xff08;PVT&#xff09;角点分析是确保芯片可靠性的关键环节。随着工艺节点不断缩小&#xff0c;晶体管级变异效应日益显著&#xff0c;传统的单角点验证方法已无法满足现代芯片设计的严苛要…...

WeChatPad:解锁微信多设备协同,重塑移动办公边界

WeChatPad&#xff1a;解锁微信多设备协同&#xff0c;重塑移动办公边界 【免费下载链接】WeChatPad 强制使用微信平板模式 项目地址: https://gitcode.com/gh_mirrors/we/WeChatPad 你是否曾在工作与生活之间疲于切换微信账号&#xff1f;是否因微信"手机和平板不…...

深度解析 MCP 协议:如何通过 Model Context Protocol 实现 AI Agent 的工具调用标准化

深度解析 MCP 协议&#xff1a;如何通过 Model Context 协议实现 AI Agent 的工具调用标准化 摘要&#xff1a; 随着大语言模型&#xff08;LLM&#xff09;能力的飞速提升&#xff0c;如何让 AI 能够更安全、更高效地访问外部工具和数据成为了 AI Agent 领域的核心挑战。Model…...

作物生长模型

林氏系统(通常称L系统)是林德梅叶1968年为模拟生物形态而设计的&#xff0c;后来史密斯于1984年 、普鲁辛凯维奇于1986年&#xff0c;分别将它应用于计算机图形学, 认为&#xff1a;种子中包含的信息不是整个树的信息&#xff0c;而是生成这个树木的规则&#xff01;而这个规则…...

TensorFlow自动微分终极指南:从基础概念到实战应用的完整教程

TensorFlow自动微分终极指南&#xff1a;从基础概念到实战应用的完整教程 【免费下载链接】TensorFlow-Course :satellite: Simple and ready-to-use tutorials for TensorFlow 项目地址: https://gitcode.com/gh_mirrors/te/TensorFlow-Course TensorFlow自动微分技术…...

CodeGreen:跨平台软件能耗精准测量工具解析

1. CodeGreen&#xff1a;跨平台软件能耗精准测量工具解析在当今计算环境中&#xff0c;软件能耗已成为影响运营成本和环境可持续性的关键因素。随着AI工作负载的爆炸式增长&#xff0c;传统性能优化已无法满足绿色计算的需求。CodeGreen应运而生&#xff0c;这是一款面向开发者…...

Zed编辑器Cursor深色主题移植:设计解析与深度定制指南

1. 项目概述&#xff1a;从 Cursor 到 Zed 的深色主题移植如果你和我一样&#xff0c;是那种对编辑器外观有“强迫症”的开发者&#xff0c;那么找到一个既护眼又符合审美的主题&#xff0c;绝对是提升编码幸福感的第一步。最近&#xff0c;我在 Zed 编辑器上发现了一个让我眼前…...

Roo Code深度体验:多模式AI编程助手如何重塑开发工作流

1. 项目概述&#xff1a;你的编辑器里的AI开发团队 如果你和我一样&#xff0c;每天大部分时间都泡在代码编辑器里&#xff0c;那你肯定对“效率”这个词有执念。从写业务逻辑、重构旧代码、写文档到调试那些让人抓狂的Bug&#xff0c;每个环节都在和时间赛跑。过去几年&#x…...

ClawSwap SDK:一站式DEX聚合器集成方案与实战指南

1. 项目概述&#xff1a;一个为去中心化交易聚合而生的SDK最近在开发一个需要深度集成去中心化交易&#xff08;DEX&#xff09;功能的项目&#xff0c;我花了不少时间研究市面上的各种工具。在这个过程中&#xff0c;我发现了WarTech9/clawswap-sdk这个仓库。简单来说&#xf…...