#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 и сохранить их в локальном каталоге. Отличным началом было бы одно изображение, но конечная цель — массовое получение множества изображений для данного события.