我从iPhone上得到了一个包含大量数据的数据库。
这些列命名为:
- 身份证
- 缩略图
- 数据
它来自的应用程序主要与图片有关,因此这让我认为该应用程序将图片存储到此表中。
仔细观察,Thumbnail
和Data
是斑点。
我正在尝试将这些 Blob 转换回图像(但我不知道它们以前是什么内容类型(。
我尝试使用base64
、file_put_contents
、ibase_blob_echo
和大多数其他方式在 PHP 中转换 Blob。
Blob 的签名为:BE 9A BC A4 37 25 78 72 7D (¾š¼¤7%xr})
我希望在这里找到签名,但不幸的是我找不到它。
我不是IOS开发人员,所以我实际上不知道如何将图像转换为blob并再次检索的最常见方法;我只是假设它将与任何其他应用程序相同。
如果有人可以帮助我识别此 Blob 的类型或可以帮助我在 PHP 中转换转换此 Blob,我将不胜感激。
(请注意,我不希望将原始 Blob 数据放在这里(
杰米
您可以创建一个数据库表来存储和检索 BLOB 格式的图像。要记住的重要一点是在显示图像类型时将正确的标题设置为图像类型。这是你如何做到这一点,这是基本的,但你可以使代码广泛而详细。
请参阅 PHPRO 教程。
代码太多,无法放在这里。但这是你应该这样做的方式,或者有一个好的起点。
如果不知道可以使用的 Blob 的类型
imagecreatefromstring()
http://php.net/manual/en/function.imagecreatefromstring.php
它可能会自动检测 Blob。
或者,您可以使用它来确定您是否不知道 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";
}
@ref:从 MySQL 列确定 MIME 类型
您还可以从此参考中展开类型、魔术数字:http://en.wikipedia.org/wiki/List_of_file_signatures