gpt4 book ai didi

php - 如何从 PHP 中的 mysql 数据库中提取可能损坏的图像 blob 并保存到文件

转载 作者:行者123 更新时间:2023-11-29 04:38:12 25 4
gpt4 key购买 nike

我有一个包含收据图像的数据库表,在 PHP 中编码为 BLOB 数据。该表具有以下列和数据:

id   | ownerid | file | filename            | size   | type       | fileerror
-----|---------|------|---------------------|--------|------------|-----------
1644 | 9 | BLOB | 2014-03-0714.30.jpg | 996379 | image/jpeg | NULL

文件类型是使用 iMagickGD 之一通过网络表单在原始上传时捕获的,转换为 blob,并存储在数据库中。

架构可能在某个时刻从 MyISAM 转换为 InnoDB。编码可能在某个时刻从 Latin1 转换为 UTF8-unicode-ci。它也可能一直都是这样设置的。

我随后尝试了所有将 BLOB 转换回我能想到的图像的方法,但我从未以图像结束。

我试过使用 Imagick::readImageBlob($myBlob) 并以一个不想成为图像的大胖文件结束,我试过使用 imagecreatefromstring($myBlob).

我正在使用 file_put_contents() 来保存文件。

我知道 BLOB 是二进制的,并且应该保持二进制,并且编码不应该影响它们......但是我不能再让我的 blob 成为图片了。

我如何判断:

  1. 我的二进制 blob 在数据库中已损坏,我应该放弃。
  2. 我的二进制 blob 很好,谢谢,但我的 PHP 技能让我失望了。
  3. 我可以修复 php 的幕后发生的某种字符编码问题。

我只是尝试将 blob 从 mysql workbench 直接保存到一个文件中,但这也没有帮助。

编辑:blob 的一点味道(取 self 转储的文件,通过 chrome)

/9j/4FwwEEpGSUZcMAEBAVwwYFwwYFwwXDD/4Vww8kV4aWZcMFwwTU1cMCpcMFwwXDAIXDAMAVwwXDADXDBcMFwwAQmQXDBcMAEBXDADXDBcMFwwAQcsXDBcMAEPXDACXDBcMFwwBE

最佳答案

根据您发布的 BLOB 数据,文件魔数(Magic Number) /9j/4 是 jpeg;base64,所以这应该是其中的一部分:

$data = base64_decode($data)
file_put_contents('2014-03-0714.30.jpg', $data);

数据看起来像 JPEG:

 ╪ α\0►JFIF\0☺☺☺\0`\0`\0\0 ß\0≥Exif\0\0MM\0*\0\0\\0♀☺\0\0♥\0\0\0☺       É\0\0☺☺\0♥\0\0\0☺,\0\0☺☼\0☻\    0\0\0♦

但是斜杠 \ 看起来很可疑,所以数据可能在编码之前已经被转义,所以尝试:

$data = stripslashes(base64_decode($data));

哪个看起来更好:

 ╪ α ►JFIF ☺☺☺ ` `   ß ≥Exif  MM *  ♀☺  ♥   ☺   É  ☺☺ ♥   ☺,  ☺☼ ☻   ♦

为了比较,类似于维基百科的Stonehenge :

 ╪ α ►JFIF ☺☻☺ x x   ß▬Exif   MM *  ☺↕  ♥   ☺☺ ☺→♣  ☺ b☺←♣ ☺j☺(♥ ☺☻ ☺1

关于php - 如何从 PHP 中的 mysql 数据库中提取可能损坏的图像 blob 并保存到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36288456/

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