【问题标题】:Import and display a jpeg from a SQL Server database using r使用 r 从 SQL Server 数据库导入并显示 jpeg
【发布时间】:2020-08-20 21:13:35
【问题描述】:

工作要求我们从 SQL Server 数据库导入一系列 jpeg 文件,以便在我们拥有的仪表板产品上显示。我们正在使用 R 来查询我们的数据库并构建我们的仪表板,因此我们需要能够从 SQL Server 导入图像并显示它们(或至少导出到本地系统文件夹)。

我们可以下拉并显示标准表格信息,如文件名、文件大小、文件类型和文件数据<raw>,但我们很难理解如何提取和显示 jpeg 文件。

我知道它们以 varbinary 列类型存储在数据库中,但标准的 read/writeJPEG() 似乎不喜欢没有文件路径的任何东西,例如直接从 SQL Server 数据库中提取数据进入r。

尝试提取单个文件以导出到本地文件夹,但加载图像时出现同样的问题。

对如何进行有什么建议吗?

【问题讨论】:

    标签: sql r image jpeg


    【解决方案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)
    

    现在我们已经创建了一个示例原始矢量(就像可能存储在您的数据框中的那个),我们可以使用 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")
    

    【讨论】:

    • 感谢您的指导。所以我尝试了 readJPEG() 并收到了似乎是矢量值而不是实际图像的输出。您认为原始数据可能需要以不同的方式处理吗?
    • 好吧 readJPEG 只是决定图像数据。你想用这些数据做什么?您是否尝试像我上面那样绘制数据?
    • 我做到了,不幸的是没有成功。 fname
    • @CL3ad “没有成功”到底是什么意思?怎么了?最终目标是什么?
    • 我正在尝试从 sql 数据库中提取图像文件并将它们保存到本地目录。单个图像是一个很好的开始,但最终目标是为给定事件批量提取大量图像。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 2021-09-22
    • 2021-11-28
    • 2020-12-04
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    相关资源
    最近更新 更多