Изображение на графике из BLOB/RAW

Я пытаюсь использовать пакет ROracle для извлечения изображений из базы данных. Изображения хранятся в базе данных как BLOB.

Мне удалось получить изображения в R в «сыром» формате. Есть ли способ конвертировать его из raw в jpeg/png?

Это то, что у меня есть до сих пор:

con <- dbConnect(drv, username = user,
                 password = pw, dbname=connect.string)

query.string <- paste("select db.img",
                      "from database db",
                      "where db.id = '01234567')")

## run a SQL statement by first creating a resultSet object
rs <- dbSendQuery(con, query.string)
## fetch records from the resultSet into a data.frame
data <- fetch(rs)
## extract all rows
str(data)

> str(data)
'data.frame':   1 obs. of  1 variable:
 $ DATA:List of 1
  ..$ : raw  ff d8 ff e1 ...

В идеале я мог бы сделать что-то вроде этого:

pic <- rawToJpeg(unlist(data)[1])

что затем позволило бы мне построить/сохранить изображение


person user123965    schedule 26.03.2019    source источник


Ответы (1)


Рассмотрите возможность использования writeBin для передачи двоичных данных в файл:

rawToJpeg <- function(pic_data) {
    f = file(paste0('output.jpeg'), "wb")           # OPEN FILE CONNECTION
    writeBin(pic_data, con = f, useBytes=TRUE)      # TRANSFER RAW DATA
    close(f)                                        # CLOSE FILE CONNECTION
}

rawToJpeg(unlist(data)[1])
person Parfait    schedule 27.03.2019
comment
Рад слышать! Используя odbc в базе данных Oracle, я никогда не мог получить большой двоичный объект без преобразования сначала в hex, чем в raw. Возможно, ROracle делает по-другому. - person Parfait; 27.03.2019