【问题标题】:In PHP (plphp), how can we manage a file stored in a bytea with Imagick?在 PHP (plphp) 中,我们如何使用 Imagick 管理存储在 bytea 中的文件?
【发布时间】:2026-01-24 11:10:01
【问题描述】:

我们使用 bytea 列将整个图像文件存储在 PostgreSQL 中。

在 PHP 中,我试图从 bytea 字段(这些存储为十六进制)打开图像文件,然后想使用 Imagick 操作/转换图像。

必须将字节流从十六进制转换为可管理的 - 以类似文件的方式 - 由 Imagick 吗?还有什么秘方吗?

如果我们必须读取文件头位之外的内容,我也不会感到惊讶。冒犯的sn-p如下:

// Decode image from hex?
$image = new Imagick ($row['thewholefile']);
// ERROR:  Uncaught exception 'ImagickException' with message 'Unable to read the file: /x0000000 (etc)

【问题讨论】:

    标签: php postgresql imagemagick imagick


    【解决方案1】:

    实际上这里的问题与 PostgreSQL 的 bytea 表示格式有关——因为我们使用的是 PG 的 v9.n,所以默认输出是十六进制:

    我们必须首先将输出设置为 PG 的“老派”字节茶处理。然后,通过对原始列数据进行 pg-unescaping,我们可以使用一些东西:

    SET bytea_output = 'escape'
    
    $unescaped   = pg_unescape_bytea($content);
    

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 感谢您的回复 - 虽然不是我真正处理的问题,但 readimageblob 肯定是 整体 解决方案的一部分。
      【解决方案3】:

      错误很明显,就像documentation:构造函数需要文件名或文件名数组。使用 Jauzsika 的解决方案。

      【讨论】: