正在尝试将SQL Blob转换为图像(从IOS DB,通过PHP)

正在尝试将SQL Blob转换为图像(从IOS DB,通过PHP),php,ios,sql,sqlite,blob,Php,Ios,Sql,Sqlite,Blob,我从我的iPhone上得到了一个包含大量数据的数据库 这些列的名称为: 身份证 缩略图 资料 它来自的应用程序主要与图片有关,因此我认为该应用程序正在将图片存储到该表中 仔细观察,缩略图和数据都是斑点 我正在尝试将这些blob转换回图像(但我不知道它们以前是什么内容类型) 我曾尝试使用base64,文件内容,ibase\u blob\u echo以及大多数其他可以在PHP中转换blob的方法 Blob的签名是:BE 9A BC A4 37 25 78 72 7D(¾š¼?7%xr}) 我希望

我从我的iPhone上得到了一个包含大量数据的数据库

这些列的名称为:

  • 身份证
  • 缩略图
  • 资料
它来自的应用程序主要与图片有关,因此我认为该应用程序正在将图片存储到该表中

仔细观察,
缩略图
数据
都是斑点

我正在尝试将这些blob转换回图像(但我不知道它们以前是什么内容类型)

我曾尝试使用
base64
文件内容
ibase\u blob\u echo
以及大多数其他可以在PHP中转换blob的方法

Blob的签名是:
BE 9A BC A4 37 25 78 72 7D(¾š¼?7%xr})

我希望能找到签名,但不幸的是我找不到

我不是一个IOS开发者,所以我不知道如何或者最常见的方式将一个图像转换成一个blob并再次检索它;我只是假设它将与任何其他应用程序相同

如果有人能帮我识别这个Blob的类型,或者能帮我用PHP转换这个Blob,我将不胜感激

(请注意,我不希望将原始Blob数据放在这里)


Jamie

您可以创建一个db表来存储和检索BLOB格式的图像。要记住的重要一点是在显示图像时将正确的标题设置为图像类型。下面是您如何做到这一点的,这是基本的,但您可以使代码更广泛和详细

请看

代码太多,无法放在这里。但这是你应该做的,或者说你应该有一个好的起点

如果您不知道可以使用的水滴类型

imagecreatefromstring()

它可以自动检测斑点

或者,如果您不知道BLOB的MIME类型,也可以使用此选项来确定:

function mimetype($data)
{
    //File signatures with their associated mime type
    $Types = array(
    "474946383761"=>"image/gif",                        //GIF87a type gif
    "474946383961"=>"image/gif",                        //GIF89a type gif
    "89504E470D0A1A0A"=>"image/png",
    "FFD8FFE0"=>"image/jpeg",                           //JFIF jpeg
    "FFD8FFE1"=>"image/jpeg",                           //EXIF jpeg
    "FFD8FFE8"=>"image/jpeg",                           //SPIFF jpeg
    "25504446"=>"application/pdf",
    "377ABCAF271C"=>"application/zip",                  //7-Zip zip file
    "504B0304"=>"application/zip",                      //PK Zip file ( could also match other file types like docx, jar, etc )
    );

    $Signature = substr($data,0,60); //get first 60 bytes shouldnt need more then that to determine signature
    $Signature = array_shift(unpack("H*",$Signature)); //String representation of the hex values

    foreach($Types as $MagicNumber => $Mime)
    {
        if( stripos($Signature,$MagicNumber) === 0 )
            return $Mime;  
    }

    //Return octet-stream (binary content type) if no signature is found
    return "application/octet-stream"; 
}
@参考:

您还可以从此引用中展开类型、MagicNumber:

谢谢您的回复!我尝试使用该教程中介绍的方法来显示blob,但我不知道blob的内容类型。我已经检查了每一个单独的MIME,看看它是否能工作,但每一个都会显示一个损坏的图像。我100%确定这个斑点是一个图像,但我似乎无法让它显示出来。谢谢你的回复。我尝试使用上述函数(以及finfo_file函数)来尝试确定文件类型。不幸的是,每个函数似乎都以“应用程序/八位字节流”作为回复。上面的函数也给了我以下签名:BE9ABCA4372578727D7233384042434537343234CBD53361043A2A22237357F793341E3339414A434636273237343338414344B05C332303434343338-这让我更不知道文件类型到底是什么。数据库大约是800mb满是斑点,我不知道其中包含什么(都在我的手机中),没有一个数据签名与MIME类型匹配?你试过了吗?真的。finfo_缓冲区还为我提供了“应用程序/八位字节流;字符集=二进制”。我只是注意到每个blob上的前563个字母是相同的(以a结尾,);这让我想到,可能有其他东西编码的blob本身。我试图删除重复的部分,但我仍然得到相同的结果时,重复我以前所做的一切。老实说,我已经尝试了我能想到的一切,除非我尝试看看应用程序如何解码图像,但不幸的是,这是不可能的。你还有什么可以帮助我的吗?