В PHP (plphp), как мы можем управлять файлом, хранящимся в байте, с помощью Imagick? - PullRequest
0 голосов
/ 03 ноября 2011

Мы храним целые файлы изображений в PostgreSQL, используя байтовые столбцы.

В PHP я пытаюсь открыть файл изображения из поля bytea (они хранятся в шестнадцатеричном формате), а затем хочет манипулировать / конвертировать изображение с помощью Imagick.

Необходимо преобразовать поток байтовшестнадцатеричного, чтобы быть управляемым - подобным файлу способом - Imagick?Есть ли какой-нибудь другой секретный соус?

Я бы не удивился, если бы нам пришлось читать за пределами битов заголовка файла.Оскорбительный фрагмент ниже:

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

Ответы [ 3 ]

2 голосов
/ 05 ноября 2011

На самом деле проблема здесь была связана с форматом представления данных в байтах PostgreSQL - поскольку мы используем v9.n из PG, по умолчанию выводится в шестнадцатеричном виде:

Сначала нам нужно было установить вывод в PG «Old School»Обработка байтов.Затем, с помощью pg-unescaping необработанных данных столбцов, у нас было что-то, с чем мы могли бы работать:

SET bytea_output = 'escape'

$unescaped   = pg_unescape_bytea($content);
1 голос
/ 03 ноября 2011

Вам нужен readimageblob. Вот, пожалуйста:

http://www.php.net/manual/en/function.imagick-readimageblob.php

0 голосов
/ 03 ноября 2011

Ошибка довольно очевидна, как и документация : конструктору требуется имя файла или массив имен файлов. Используйте решение Jauzsika.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...