gpt4 book ai didi

php - 将数组位转换为实际图像

转载 作者:行者123 更新时间:2023-12-05 03:23:56 25 4
gpt4 key购买 nike

我有一个像这样的数组:

[255, 216, 255, 224, 0, 16, 74, 70, 73, 70, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 255, 219, 0, 67, 0, 1, 1, ...]

我需要将其转换为实际图像。

所以我按照这个 python 脚本做同样的事情并正常工作:

file = x['data']['file']['file'] 

listRes = file.replace(' ', '')
listRes = listRes.replace('[', '').replace(']', '')
listRes = listRes.split(',')
for i in range(len(listRes)):
listRes[i] = int(listRes[i])
f = open('x.png', 'wb')
f.write(bytes(listRes))
f.close()

这是我类似的 php 代码:

if(!empty($que["answer"]["file"])){
$strbit = str_replace("[","",$que["answer"]["file"]["file"]);
$strbit = str_replace("]","",$strbit);
$strbit = str_replace(" ","",$strbit);
$arrbit = explode(',', $strbit);
for($j=0;$j<count($arrbit);$j++){
$arrbit[$j] = (int)($arrbit[$j]);
}
$imageName = str_random(10).'.'.'png';
\File::put(storage_path(). '/images/' . $imageName, ($arrbit));
}

但现在的问题是导出的图片是这样的:

capture

现在我尝试使用 file_put_contents($imageName, pack("C*", ...$arrbit)) 而不是 \File::put(storage_path()... ; 但它根本不导出任何内容!

那么这里出了什么问题?我该如何解决这个问题?


更新 #1:

我试过这个:

if(!empty($que["answer"]["file"])){
$strbit = str_replace("[","",$que["answer"]["file"]["file"]);
$strbit = str_replace("]","",$strbit);
$strbit = str_replace(" ","",$strbit);
$arrbit = explode(',', $strbit);
for($j=0;$j<count($arrbit);$j++){
$arrbit[$j] = (int)($arrbit[$j]);
}
$imageName = str_random(10).'.'.'jpeg';
file_put_contents($imageName, pack("C*", ...$arrbit));
}

但不导出任何图像,也不返回任何错误!

最佳答案

因此,主要问题是:如何将输入格式(括号中的逗号分隔字符代码字符串)转换为二进制形式并将其写入文件。

PHP 有 pack()非常适合这个目的的功能。具体来说,我们需要 C* 格式,因为我们要输出原始 8 位字符。所以,假设我们有这个输入:

$arr = [255, 216, 255, 224, 0, 16, 74, 70, 73, 70, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 255, 219, 0, 67, 0, 1, 1, /* ... */];

这就是我们如何将它转换成二进制字符串(注意 ... token -- 这在这里非常重要,因为 pack() 期望每个转换的字符有一个参数,而不是一个数组一个参数):

$str = pack("C*", ...$arr);

最后,原来的问题是询问.png 文件,但显然示例数据有JFIF header ,表示.jpg 格式。如果不知道格式,可以使用 getimagesize()猜一猜(注意:该函数需要已经写入磁盘的文件,而不是包含文件内容的二进制字符串)。

关于php - 将数组位转换为实际图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72413940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com