php接收二进制数据流转换成图片

合集下载

PHP算法十进制二进制互相转化(含小数)

PHP算法十进制二进制互相转化(含小数)

PHP算法⼗进制⼆进制互相转化(含⼩数)1、⼆进制转换⼗进制原理:⼩数点前或者整数要从右到左⽤⼆进制的每个数去乘以2的相应次⽅并递增,⼩数点后则是从左往右乘以⼆的相应负次⽅并递减。

例:10101.1011 = 1*20+0*21+1*22+0*23+1*24.1*2-1+0*2-2+1*2-3+1*2-4 = 1+0+4+0+16+0.5+0+0.125+0.0625 = 21.6875abcd.efg = d*20+c*21+b*22+a*23+e*2-1+f*2-2+g*2-3#代码实现1$number = "10101.1011";2$i = 0;3$sum = 0;4$float = 0;5$numberArr = explode(".",$number);6$len = strlen($numberArr['0']);7$numberA = strrev($numberArr['0']); //反转字符串因为整数需要从右到左运算8for($i;$i<$len;$i++){9$sum = $sum + $numberA[$i]*pow(2,$i); #运算从右到左每个数*2的次⽅递增例:*2的0次⽅ *2的1次⽅ *2的2次⽅ *2的3次⽅10 }11if(strpos($number,".")){ //运算浮点数12$i = 0;13$len = strlen($numberArr['1']);14for($i;$i<$len;$i++){15$float = $float + $numberArr['1'][$i]*pow(2,-($i+1)); #运算浮点数从左到右每个数*2的负次⽅递减例:*2的-1次⽅ *2的-2次⽅ *2的-3次⽅16 }17echo "浮点数:".($sum+$float);18 }else{19echo "整数".$sum;20 };2、⼗进制转换⼆进制原理:⼗进制整数转换为⼆进制整数采⽤"除2取余,逆序排列"法整数部分除2有余数得1 整除得0 以此类推最后调转数据得出⼆进制 ⼗进制⼩数转换成⼆进制⼩数采⽤"乘2取整,顺序排列"法⼩数部分乘2取整数得1取1 得0取0 然后⼩数部分再乘2 以此类推例:21.6875 = 21/2 10/2 5/2 2/2 1/2 . 0.6875*2 0.375*2 0.75*2 0.5*2 = 10101.1011整数位 21/2 = 10.5 有余数得 1 ⼩数位 0.6875*2 = 1.375 取得整数位 1 10/2 = 5 整除 得 0 0.375*2 = 0.75 取得整数位 0 5/2 = 2.5 有余数得 1 0.75*2 = 1.5 取得整数位 1 2/2 = 1 整除得 0 0.5*2 = 1 取得整数位 1 1/2 = 0.5 有余数得 1整数位为0 结束运算得 10101 ⼩数位为0 结束运算得1011拼接得 10101.1011#代码实现1$number = "21.6875";2$i = 1;3$arrInt = "";4function integer($number,$i,$arrInt){5for($i;$i>0;$i++){6$decide = $number/2; //获取下⾯的整数继续除⼆7$number = floor($number/2); //除⼆取整8if(strpos($decide,".")){9$arrInt = "1".$arrInt; //浮点数位 1 1000001 10100000110 }else{11$arrInt = "0".$arrInt; //整数位 01 001 0001 00001 000001 0100000112 }13if($decide < 1){14$i = -1;15 }16 }17return$arrInt;18 }19function floating($float,$i,$arrInt){20for($i;$i<50;$i++){21$decide = $float*2; //浮点数乘⼆22if($decide == 1){23$i = 51;24 }else{25$float = "0.".explode(".",$decide)['1']; //获取乘⼆后的浮点数供上⾯继续运算26 }27if($decide >= 1){28$arrInt = $arrInt."1"; //浮点数位29 }else{30$arrInt = $arrInt."0"; //整数位31 }32 }33return$arrInt;34 }35if(!strpos($number,".")){36$result = integer($number,$i,$arrInt); //返回整数转换的⼆进制37 }else{38$numberInt = floor($number); //取得浮点数的整数位39$int = integer($numberInt,$i,$arrInt); //返回整数转换的⼆进制40$numberFloat = "0.".explode(".",$number)['1'];41$flo = floating($numberFloat,$i,$arrInt); //返回浮点数转换的⼆进制42$result = $int.".".$flo;43 }44echo$result;。

前端把二进制流文件作为参数传给后端的方法

前端把二进制流文件作为参数传给后端的方法

前端把二进制流文件作为参数传给后端的方法在前端开发中,经常会遇到需要将二进制流文件传递给后端的情况。

这可能是用户上传的图片、文档,或者其他类型的二进制数据。

实现这一过程需要我们了解一些关键的技术和方法,以确保数据能够准确、高效地从前端传递到后端。

首先,我们来谈谈什么是二进制流文件。

简单来说,二进制流文件就是以二进制形式存储的数据,不像文本文件那样可以直接读取和理解其内容。

常见的二进制流文件包括图片(如 JPEG、PNG 等格式)、音频文件(如 MP3 等)、视频文件(如 MP4 等)以及各种文档格式(如 PDF 等)。

在前端,我们可以通过 HTML 的`<input>`元素来获取用户选择的文件。

例如,使用`type="file"`属性创建一个文件选择控件:```html<input type="file" id="fileInput" />```当用户选择了文件后,我们可以通过 JavaScript 来获取这个文件对象。

```javascriptconst fileInput = documentgetElementById('fileInput');const file = fileInputfiles0;```获取到文件对象后,接下来就是将其以二进制流的形式传递给后端。

常见的方法有两种:FormData 和 XMLHttpRequest 。

使用 FormData 是一种比较简单直观的方式。

FormData 可以方便地构建表单数据,包括文件。

```javascriptconst formData = new FormData();formDataappend('file', file);fetch('/upload',{method: 'POST',body: formData})then(response => responsejson())then(data => consolelog(data))catch(error => consoleerror('Error:', error));```在上述代码中,我们创建了一个 FormData 对象,并将文件添加到其中。

vue二进制转图片显示问题后端返回的是byte[]数组

vue二进制转图片显示问题后端返回的是byte[]数组

vue⼆进制转图⽚显⽰问题后端返回的是byte[]数组1、⼆进制转图⽚显⽰问题代码lookPreview(this.previewID).then(response => {this.previewUrl = "data:image/jpeg;base64," + response.data;this.previewList.push(this.previewUrl);this.imageOpen = true;});页⾯上也可以<img :src="'data:image/jpeg;base64,'+row.imageBlob" style="width:50%;height:50%" @click="handleLookAt(row)">我的页⾯<!-- 查看实时画⾯ --><el-dialog title="查看实时图⽚" :visible.sync="imageOpen" width="60%" :close-on-click-modal="false"><div><el-imagestyle="height: 200px":src="previewUrl":preview-src-list="previewList":fit="scale-down"></el-image></div><span slot="footer" class="dialog-footer"><el-button @click="getPreview()">刷新</el-button><el-button @click="imageOpen = false">取消</el-button><el-button type="primary" @click="imageOpen = false">确定</el-button></span></el-dialog>后端返回数据2、byte[]数组可显⽰var arry = [-1, -40, -1, -32, 0, 16, 74, 70, 73, 70, 0, 1, 2, 0, 0, 1, 0, 1, 0, 0, -1, -37, 0, 67, 0, 8, 6, 6, 7, 6, 5, 8, 7, 7, 7, 9, 9, 8, 10, 12, 20, 13, 12, 11, 11, 12, 25, 18, 19, 15, 20, 29, 26, 31, 30, 29, 26, 28, 28, 32, 36, 46, 39, 32, 34, 44, 35, 28, 28, 4 var str12 = arrayBufferToBase64(arry);//转换字符串console.log(str12);var outputImg = document.createElement('img');outputImg.src = 'data:image/png;base64,'+str12;// // append it to your pagedocument.body.appendChild(outputImg);console.log(outputImg);function arrayBufferToBase64( buffer ) {var binary = '';var bytes = new Uint8Array( buffer );var len = bytes.byteLength;for (var i = 0; i < len; i++) {binary += String.fromCharCode( bytes[ i ] );}return window.btoa( binary );}。

C#将图片以二进制保存,读取二进制转换图片

C#将图片以二进制保存,读取二进制转换图片

C#将图⽚以⼆进制保存,读取⼆进制转换图⽚⾸先定义数据库连接字符串:String strCn = "server=.;database=DB_NAME;user=sa;pwd=XXX";读取图⽚,将图⽚转换⼆进制保存到数据库⽅法:SqlConnection cn = new SqlConnection(strCn);SqlCommand cmd = new SqlCommand("INSERT INTO ProductID_Image (ProductID,ImageData) VALUES ('1',@BLOBData)", cn);String strBLOBFilePath = @"C:/Users/Administrator/Desktop/打印模板.jpeg";FileStream fsBLOBFile = new FileStream(strBLOBFilePath, FileMode.Open, FileAccess.Read);Byte[] bytBLOBData = new Byte[fsBLOBFile.Length];fsBLOBFile.Read(bytBLOBData, 0, bytBLOBData.Length);fsBLOBFile.Close();SqlParameter prm = new SqlParameter("@BLOBData", SqlDbType.VarBinary, bytBLOBData.Length, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, bytBLOBData); cmd.Parameters.Add(prm);cn.Open();cmd.ExecuteNonQuery();cn.Close();读取数据库中⼆进制数据,转换成图⽚⽅法:SqlConnection cn = new SqlConnection(strCn);cn.Open();SqlCommand cmd = new SqlCommand("select ProductID,ImageData from ProductID_Image", cn);SqlDataAdapter da = new SqlDataAdapter(cmd);DataSet ds = new DataSet();da.Fill(ds, "ProductID_Image");int c = ds.Tables["ProductID_Image"].Rows.Count;if (c > 0){Byte[] byteBLOBData = new Byte[0];byteBLOBData = (Byte[])(ds.Tables["ProductID_Image"].Rows[c - 1]["ImageData"]);MemoryStream stmBLOBData = new MemoryStream(byteBLOBData);pictureBox1.Image = Image.FromStream(stmBLOBData);}cn.Close();。

php 二进制byte数组

php 二进制byte数组

php 二进制byte数组
PHP中可以使用pack函数将二进制数据转换为字节数组。

pack 函数接受一个格式化字符串和要打包的数据作为参数,并返回一个包含字节数组的字符串。

格式化字符串指定了如何将数据打包成字节数组。

例如,如果你有一个包含二进制数据的字符串,你可以使用pack函数将其转换为字节数组。

以下是一个示例:
php.
$binaryData = "\x41\x42\x43\x44"; // 二进制数据。

$byteArray = unpack("C", $binaryData); // 将二进制数据转换为字节数组。

print_r($byteArray); // 输出字节数组。

在这个示例中,"\x41\x42\x43\x44"是一个包含二进制数据的字符串。

pack函数将其转换为一个包含字节数组的字符串,然后
unpack函数将其转换为一个字节数组。

另外,你也可以使用str_split函数将二进制数据转换为字节数组。

例如:
php.
$binaryData = "\x41\x42\x43\x44"; // 二进制数据。

$byteArray = str_split($binaryData); // 将二进制数据转换为字节数组。

print_r($byteArray); // 输出字节数组。

无论使用pack函数还是str_split函数,都可以将二进制数据转换为字节数组。

这样就可以在PHP中方便地处理二进制数据了。

希望这些信息能够帮助到你。

php和c++socket通讯(基于字节流,二进制)

php和c++socket通讯(基于字节流,二进制)

php和c++socket通讯(基于字节流,⼆进制)研究了⼀下PHP和C++socket通讯,⽤C++作为服务器端,php作为客户端进⾏.socket通讯是基于协议的,因此,只要双⽅协议⼀致就⾏.关于协议的选择:我看过⽹上⼤部分协议都是在应⽤层的协议,选⽤这样的协议很⽅便,基本上就是字符串传过来,传过去本次研究的协议算是当今国际化的⼀个标准做法.length+flag+body(长度+类型+内容)的⽅式,total_length code flag length1string1length2string2总长度操作类型标志字符串1长度字符串1字符串2长度字符串24字节2字节4字节(暂时⽆⽤)2字节x字节2字节x字节php实现⽅式,也很容易,通过pack打包成⼆进制进⾏通讯.下⾯贴⼀下代码本地测试主要应⽤为:发送账号和密码给服务器端<?phpclass Byte{//长度private $length=0;private $byte='';//操作码private $code;public function setBytePrev($content){$this->byte=$content.$this->byte;}public function getByte(){return $this->byte;}public function getLength(){return $this->length;}public function writeChar($string){$this->length+=strlen($string);$str=array_map('ord',str_split($string));foreach($str as $vo){$this->byte.=pack('c',$vo);}$this->byte.=pack('c','0');$this->length++;}public function writeInt($str){$this->length+=4;$this->byte.=pack('L',$str);}public function writeShortInt($interge){$this->length+=2;$this->byte.=pack('v',$interge);}}class GameSocket{private $socket;private $port=9991;private $host='192.168.211.231';private $byte;private $code;const CODE_LENGTH=2;const FLAG_LENGTH=4;public function __set($name,$value){$this->$name=$value;}public function __construct($host='192.168.211.231',$port=9991){$this->host=$host;$this->port=$port;$this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);if(!$this->socket){exit('创建socket失败');}$result = socket_connect($this->socket,$this->host,$this->port);if(!$result){exit('连接不上⽬标主机'.$this->host);}$this->byte=new Byte();}public function write($data){if(is_string($data)||is_int($data)||is_float($data)){$data[]=$data;}if(is_array($data)){foreach($data as $vo){$this->byte->writeShortInt(strlen($vo));$this->byte->writeChar($vo);}}$this->setPrev();$this->send();}/**设置表头部分*表头=length+code+flag*length是总长度(4字节) code操作标志(2字节) flag暂时⽆⽤(4字节)*/private function getHeader(){$length=$this->byte->getLength();$length=intval($length)+self::CODE_LENGTH+self::FLAG_LENGTH;return pack('L',$length);}private function getCode(){return pack('v',$this->code);}private function getFlag(){return pack('L',24);}private function setPrev(){$this->byte->setBytePrev($this->getHeader().$this->getCode().$this->getFlag());}private function send(){$result=socket_write($this->socket,$this->byte->getByte());if(!$result){exit('发送信息失败');}}public function __desctruct(){socket_close($this->socket);}}$data[]='testzouhao';$data[]='a';$gameSocket=new GameSocket();$gameSocket->code=11;$gameSocket->write($data);通过抓包分析,得到本次的包内容包头等等都不⽤看了,主要看蓝⾊部分.根据协议分析,前4个字节为表头,代表的是长度因此:17 00 00 00代表的是表头长度,17为16进制,转换为⼗进制为23,代表其余部分全部加为23字节. 0b 00代表的是操作码为11,代表是登录操作18 00 00 00代表的是flag,暂时⽆⽤,不去理会0a 00 代表的字符串1的长度,转为⼗进制为1074 65 73 74 7a 6f 75 68 61 6f 分别转为⼗进制之后,是ascii码对应的字符,结果为:testzouhao,由于C++字符串的机制是末尾是\0,所以在字符串后,00字节就是\0然后是第⼆个字符串长度为01 00,也就是为161同理,⼗进制转ascii码,为a,之后的00为c++机制的\0完美解析,发送包⽆措,之后c++服务器也返回了相应的包,我在按照同理进⾏解包就可以了!。

postgresql 中用于将二进制数据转换为文本的函数

postgresql 中用于将二进制数据转换为文本的函数

postgresql 中用于将二进制数据转换为文本的函数PostgreSQL是一种功能强大的关系型数据库管理系统,它提供了丰富的功能和灵活的数据类型支持。

在数据库中存储二进制数据是很常见的需求,而将二进制数据转换为文本也是一项非常重要的任务。

在本文中,我们将探讨在PostgreSQL中如何使用函数来将二进制数据转换为文本。

首先,让我们先了解一下什么是二进制数据。

二进制数据是由由0和1组成的位(bit)序列,可以用来表示任何类型的数据。

在数据库中,二进制数据可以用来表示图像、声音、视频等多媒体数据,或者是其他类型的特定格式数据。

在PostgreSQL中,提供了几个用于将二进制数据转换为文本的函数,其中最常用的是`encode`函数和`convert_from`函数。

1. `encode`函数:`encode`函数允许将二进制数据转换为指定的文本编码格式。

它的基本语法如下:sqlencode(bytea, format)其中,`bytea`是一个表示二进制数据的bytea数据类型的列或变量,`format`是一个表示所需文本编码格式的字符串。

例如,假设我们有一个存储了图片数据的bytea列`image_data`,我们可以使用以下语句将其转换为Base64编码的文本:sqlSELECT encode(image_data, 'base64') FROM images;这将返回一个包含Base64编码图片数据的文本字符串。

2. `convert_from`函数:`convert_from`函数允许将二进制数据转换为指定的文本编码格式,并指定数据库中存储的二进制数据的编码格式。

它的基本语法如下:sqlconvert_from(bytea, format_name)其中,`bytea`是一个表示二进制数据的bytea数据类型的列或变量,`format_name`是一个表示所需文本编码格式的字符串。

php btoa方法

php btoa方法

php btoa方法全文共四篇示例,供读者参考第一篇示例:PHP是一种广泛使用的脚本语言,用于Web开发。

其中提供了许多有用的函数和方法,其中之一就是btoa方法。

btoa方法用于将字符串编码为Base64格式。

在这篇文章中,我们将介绍PHP中的btoa方法,讨论它的用法和示例,并探讨它的优缺点。

让我们了解一下Base64编码是什么。

Base64是一种二进制到文本的编码方案,它将二进制数据转换为一种可打印的ASCII格式。

Base64编码通常用于在网络上传输二进制数据,以及在数据存储中处理二进制数据。

在Base64编码中,每3个字节的数据转换为4个字符,这样可以将二进制数据转换为文本格式。

在PHP中,btoa方法用于将字符串编码为Base64格式。

btoa方法接受一个字符串参数,并返回该字符串的Base64编码。

如果我们有一个字符串"Hello, World!",使用btoa方法将其编码为Base64格式:```php<?phpencoded_string = base64_encode("Hello, World!");echo encoded_string;?>```上面的代码将输出"SGVsbG8sIFdvcmxkIQ==",这就是字符串"Hello, World!"的Base64编码。

可以看到,Base64编码后的字符串包含了原始字符串的内容,但是已经转换为一种不可读的格式。

除了btoa方法之外,PHP还提供了另一个方法用于解码Base64编码的数据。

这个方法叫做atob,它接受一个Base64编码的字符串,并返回原始的字符串。

下面是一个示例:在实际开发中,btoa方法非常有用。

在向服务器发送二进制数据时,可以使用btoa方法将二进制数据转换为Base64编码的字符串,然后在服务器端使用atob方法将其解码为原始数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Php代码
1 <?php
2 /**
3 * 图片类
4 * @author Haroldphp@
5 * @version 1.0
6 *
7 */
8 class image {
9 const ROOT_PA TH = './';
10 const FAIL_WRITE_DA TA= /a/biancheng/web/php//'Fail to write data';
11 //没有数据流
12 const NO_STREAM_DA TA= /a/biancheng/web/php/'The post data is empty';
13 //图片类型不正确
14 const NOT_CORRECT_TYPE = 'Not a correct image type';
15 //不能创建文件
16 const CAN_NOT_CREA TE_FILE = 'Can not create file';
17 //上传图片名称
18 public $image_name;
19 //图片保存名称
20 public $save_name;
21 //图片保存路径
22 public $save_dir;
23 //目录+图片完整路径
24 public $save_fullpath;
25
26 /**
27 * 构造函数
28 * @param String $save_name 保存图片名称
29 * @param String $save_dir 保存路径名称
30 */
31 public function __construct($save_name, $save_dir) {
32 //set_error_handler ( $this->error_handler () );
33
34 //设置保存图片名称,若未设置,则随机产生一个唯一文件名
35 $this->save_name = $save_name ? $save_name : md5 ( mt_rand (), uniqid () );
36 //设置保存图片路径,若未设置,则使用年/月/日格式进行目录存储
37 $this->save_dir = $save_dir ? self::ROOT_PA TH .$save_dir : self::ROOT_PA TH .date ( 'Y/m/d' );
38
39 //创建文件夹
40 @$this->create_dir ( $this->save_dir );
41 //设置目录+图片完整路径
42 $this->save_fullpath = $this->save_dir . '/' . $this->save_name;
43 }
44 //兼容PHP4
45 public function image($save_name) {
46 $this->__construct ( $save_name );
47 }
48
49 public function stream2Image() {
50 //二进制数据流
51 $data = /kf/201204/file_get_contents ( 'php://input' ) ? file_get_contents ( 'php://input' ) : gzuncompress ( $GLOBALS ['HTTP_RA W_POST_DA TA'] );
52 //数据流不为空,则进行保存操作
53 if (! empty ( $data )) {
54 //创建并写入数据流,然后保存文件
55 if (@$fp = fopen ( $this->save_fullpath, 'w+' )) {
56 fwrite ( $fp, $data );
57 fclose ( $fp );
58 $baseurl = "http://" . $_SERVER ["SERVER_NAME"] . ":" . $_SERVER ["SERVER_PORT"] . dirname ( $_SERVER ["SCRIPT_NAME"] ) . '/' . $this->save_name;
59 if ( $this->getimageInfo ( $baseurl )) {
60 echo $baseurl;
文章来自:哈客部落详文参考:/a/biancheng/web/php/2012/0418/49973.html。

相关文档
最新文档