智能门禁刷脸照片格式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
随着刷脸闸机的普及,很多场所都使用了刷脸金闸机,很多时候对方传来的照片格式不对。 刷脸闸机对应的格式都是jpg 照片来源:访客手机上传,管理员上传,团队购票上传 在转换的语言很多,在网站中php使用较为…...
听GPT 讲Rust源代码--src/librustdoc
题图来自 Why is building a UI in Rust so hard? File: rust/src/librustdoc/core.rs 在Rust中,rust/src/librustdoc/core.rs文件的作用是实现了Rustdoc库的核心功能和数据结构。Rustdoc是一个用于生成Rust文档的工具,它分析Rust源代码,并生…...
hosts 配置本地映射不生效
关闭所有科学上网工具!!刷新 DNS 解析缓存:ipconfig /flushdns关闭所有浏览器访问映射地址时,带上端口号...
Linux难学?大神告诉你,Linux到底该怎么自学!
文章目录 Part.1Part.2Part.3写作末尾 知乎上有一条热门问答,问题是“Linux为什么那么难?” 从问题来看,提问者还处在初学阶段。但他显然受困于 Linux 环境基本操作的问题,对操作系统本身的原理还不熟悉,并且对命令行工…...
GAMES101—Lec 05~06:光栅化
目录 概念回顾(个人理解)光栅化1.采样2.采样出现的问题:走样 反走样 概念回顾(个人理解) 屏幕:在图形学中,我们认为屏幕是一个二维数组,数组里的每一个元素为一个二维像素。 光栅化…...
R语言——taxize(第三部分)
taxize(第三部分) 3. taxize 文档中译3.24. genbank2uid(从 GenBankID 获取 NCBI 分类 UID)3.25. getkey(获取 API 密钥的函数)3.26. get_boldid(获取搜索词的 BOLD(生命条形码&…...
用于神经网络的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 大小: Grid 的大小由 dim3 grid 定义,其三个分量分别表示在 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:危险信号和安全信号Phase2:迁移(探索)Phase3:繁殖(开发) 四、流程图五、伪代码六、算法复杂度七、WO搜索示意图八、实验分析和结…...
go语言学习-结构体
1、简介 Go语言中的结构体是一种自定义数据类型,可以将不同类型的数据字符组合在一起形成一个单独的实体。结构体可以用于存储和操作复杂的数据结构,以及创建自定义数据类型。通过自定义结构体创建的变量,可以存储不同类型的数据字段。在实际开发中,结构体的用途非常广泛,…...
Stable Diffusion进阶玩法说明
之前章节介绍了Stable Diffusion的入门,介绍了文生图的魅力,可以生成很多漂亮的照片,非常棒 传送门: Stable Diffusion新手村-我们一起完成AI绘画-CSDN博客 那我们今天就进一步讲讲这个Stable Diffusion还能做些什么, …...
PDF控件Spire.PDF for .NET【转换】演示:将PDF 转换为 HTML
由于各种原因,您可能想要将 PDF 转换为 HTML。例如,您需要在社交媒体上共享 PDF 文档或在网络上发布 PDF 内容。在本文中,您将了解如何使用Spire.PDF for .NET在 C# 和 VB.NET 中将 PDF 转换为 HTML。 Spire.Doc 是一款专门对 Word 文档进行…...
二分查找——34. 在排序数组中查找元素的第一个和最后一个位置
文章目录 1. 题目2. 算法原理2.1 暴力解法2.2 二分查找左端点查找右端点查找 3. 代码实现4. 二分模板 1. 题目 题目链接:34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode) 给你一个按照非递减顺序排列的整数数组 nums&#…...
MFC中的主窗口以及如何通过代码找到主窗口
MFC程序中的主窗口 在MFC程序中,可以设置主窗口,主窗口在应用程序类中设置,即设置应用程序类(通常以App结尾,通常包括InitInstance方法的类)的m_pMainWnd属性,将其设置为主窗口的指针。 一般在…...
Typora下载安装 (Mac和Windows)图文详解
目录 Windows版本 一、下载 二、安装 Mac版本 一、下载 二、安装...
32位单片机PY32F040,主频72M,外设丰富,支持断码LCD
PY32F040 系列微控制器采用高性能的 32 位 ARM Cortex-M0 内核,宽电压工作范围的 MCU。嵌入高达 128 Kbytes flash 和 16 Kbytes SRAM 存储器,最高工作频率 72 MHz。LQFP64封装两块出头就可以拿到,我们还有开发板和开发资料帮助客户更好的开发。 PY32F040 系列微控…...
Shell判断:模式匹配:case(二)
简单的JumpServer 1、需求:工作中,我们需要管理N多个服务器。那么访问服务器就是一件繁琐的事情。通过shell编程,编写跳板程序。当我们需要访问服务器时,看一眼服务器列表名,按一下数字,就登录成功了。 2、…...
从android.graphics.Path中取出Point点,Kotlin
从android.graphics.Path中取出Point点,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进行去重操作,您可以将向量中的元素插入到集合中,因为std::set会自动去除重复元素。然后,您可以将集合中的元素重新存回向量中。以下是一个示例代码,演示如何使用std::set对std::vector进行去重&#…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...
Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...
从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...
rm视觉学习1-自瞄部分
首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...
