Импортируйте и отобразите jpeg из базы данных SQL Server с помощью r

#sql #r #image #jpeg

#sql #r #изображение #jpeg

Вопрос:

Work попросил нас импортировать серию файлов jpeg из базы данных SQL Server для отображения в имеющемся у нас продукте dashboard. Мы используем R для запроса нашей базы данных и построения наших информационных панелей, поэтому нам нужно иметь возможность импортировать изображения с SQL Server и отображать их (или, по крайней мере, экспортировать в локальную системную папку).

Мы можем извлекать и отображать стандартную табличную информацию, такую как имя файла, размер файла, тип файла и данные файла <raw> , но нам трудно понять, как извлекать и отображать файлы jpeg.

таблица сведений об изображении

Я знаю, что они хранятся в базе данных в varbinary типах столбцов, но стандартному read / writeJPEG (), похоже, ничего не нравится без пути к файлу, например, извлекая данные непосредственно из базы данных SQL Server в r.

Попытался извлечь один файл для экспорта в локальную папку, но та же проблема с загрузкой изображения.

Есть предложения о том, как действовать дальше?

Ответ №1:

jpeg::readJPEG Функция говорит, что она может считывать из необработанных векторов, и у вас, похоже, есть необработанные векторы в вашем data.frame. Итак, попробуйте что-то вроде

 jpeg::readJPEG(dd$FileData[[1]])
  

Для чего-то воспроизводимого, вот пример, который считывает образец изображения из jpeg пакета в качестве необработанного вектора, а затем превращает его в объект изображения

 #sample data
fname <- system.file("img", "Rlogo.jpg", package="jpeg")
filedataraw <- readBin(fname, "raw", file.info(fname)$size)
  

Теперь, когда мы создали образец необработанного вектора (подобного тому, который предположительно хранится в вашем dataframe), мы можем проанализировать данные изображения с помощью jpeg библиотеки

 img <- jpeg::readJPEG(filedataraw)
plot(1:2, type='n')
rasterImage(img, 1.2, 1.27, 1.8, 1.73)
  

Если целью является просто запись в файл, вам вообще не нужно анализировать файл как JPEG. Вы можете просто записать байты на диск.

 writeBin(filedataraw, "sample.jpeg")
  

Комментарии:

1. Спасибо за указания. Итак, я попробовал readJPEG () и получил выходные данные, которые, по-видимому, являются векторными значениями, а не фактическим изображением. Считаете ли вы, что необработанные данные, возможно, потребуется обработать другим способом?

2. Что ж, readJPEG просто определяет данные изображения. Что вы хотите сделать с этими данными? Вы пробовали отображать данные, как я делал выше?

3. Я сделал, к сожалению, безуспешно. fname <- system. файловая функция выглядит так, как будто она пытается вызвать из локального каталога, но поскольку файл изображения хранится в базе данных sql, я не могу понять, как правильно указать его в нужное местоположение.

4. @CL3ad Что именно означает «безуспешно»? Что происходит не так? Какова конечная цель?

5. Я пытаюсь извлечь файлы изображений из базы данных sql и сохранить их в локальном каталоге. Отличным началом было бы одно изображение, но конечная цель — массовое получение множества изображений для данного события.