当前位置: 首页 > 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进行去重&#…...

CANN/ops-math循环填充2D反向传播

aclnnCircularPad2dBackward 【免费下载链接】ops-math 本项目是CANN提供的数学类基础计算算子库&#xff0c;实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-math &#x1f4c4; 查看源码 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT√…...

CANN/cannbot-skills Attention-Only模板

Attention-Only Scope 模板 【免费下载链接】cannbot-skills CANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体&#xff0c;本仓库为其提供可复用的 Skills 模块。 项目地址: https://gitcode.com/cann/cannbot-skills 本模板提供仅将 Attention 模块纳入 Super…...

告别繁琐操作:碧蓝航线智能管家Alas如何解放你的双手

告别繁琐操作&#xff1a;碧蓝航线智能管家Alas如何解放你的双手 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研&#xff0c;全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 你是否曾经…...

告别横屏限制!为你的Arduino/STM32 OLED项目添加竖屏显示功能(SH1107驱动适用)

突破显示边界&#xff1a;SH1107 OLED竖屏显示的工程实践指南 当你在开发智能家居控制面板或便携式传感器设备时&#xff0c;是否曾为横屏OLED显示的文字阅读体验不佳而困扰&#xff1f;传统SH1107驱动芯片仅支持180度旋转&#xff0c;无法满足现代用户对竖屏显示的自然阅读需求…...

如何在 SvelteKit 中为动态加载的图片正确实现悬停显示覆盖层

本文详解如何在 SvelteKit 中优雅、响应式地实现图片悬停时显示信息覆盖层&#xff0c;避免直接操作 DOM&#xff0c;推荐使用 class: 指令与局部状态管理&#xff0c;兼顾可维护性、作用域样式支持和编译器兼容性。 本文详解如何在 sveltekit 中优雅、响应式地实现图片悬…...

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

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

基于Tmux与Claude构建AI自治开发团队:三层架构与自动化实践

1. 项目概述&#xff1a;一个能让你安心睡觉的AI开发团队如果你和我一样&#xff0c;对AI辅助编程充满热情&#xff0c;但又苦于每次都要手动给Claude发指令、检查进度、切换项目&#xff0c;那这个项目绝对会让你眼前一亮。Tmux Orchestrator AI Code 不是一个简单的脚本集合&…...

实时系统时序建模与RMA分析实践

1. 实时系统设计中的时序建模基础在嵌入式系统开发领域&#xff0c;实时性是最具挑战性的需求之一。不同于普通计算系统&#xff0c;实时系统对时间约束有着严苛要求——某些场景下毫秒级的延迟就可能导致整个系统失效。我曾参与过航空电子系统的开发&#xff0c;亲眼见证过一个…...

从Windows到Linux:IC设计新手的双系统Ubuntu 20.04环境搭建心路历程

从Windows到Linux&#xff1a;IC设计新手的双系统Ubuntu 20.04环境搭建心路历程 第一次打开Ubuntu终端时&#xff0c;那个闪烁的光标让我想起了大学时被C语言支配的恐惧。作为在Windows环境下成长起来的IC设计工程师&#xff0c;我从未想过有一天需要面对chmod 777这样的神秘咒…...

还在用CentOS 7?一文看懂CentOS 6/7/8各版本内核与支持周期,帮你选对系统版本

CentOS版本选择指南&#xff1a;从生命周期到迁移策略的深度解析 如果你还在使用CentOS 7甚至更早版本&#xff0c;现在可能是时候重新评估你的技术栈了。CentOS项目近年来经历了重大变革&#xff0c;从传统的稳定发行版转向了滚动更新的Stream模式&#xff0c;这让许多依赖Cen…...