将内存中的图像转换为 Blob [关闭]

2024-03-16

我内存中有一个图像(类型:java.awt.Image),我想使用jdk 1.7将其转换为Blob(类型:java.sql.Blob)。

我能找到的关于这个主题的所有内容都使用流和文件。当然,我不需要先将此图像保存到文件中才能转换它?

这里没有太多可展示的内容,但示例如下:

导入java.sql.Blob; 导入java.awt.Image;

public GenericResponseType savePhoto(Image image)
{
       Connection conn = ds.getConnection();

       << some DB code and assembly of PreparedStatement >>

       Blob blob = conn.createBlob();

           << here's where the magic needs to happen I need to get the image parameter to blob >>
           // I've tried the following but doesn't quite work as it wants a RenderedImage
       // OutputStream os = blob.setBinaryStream(1);
       // ImageIO.write(parameters.getPhoto().getImage(), "jpg", os);


       pstmt.setBlob(4, blob);
     }

一些更详细的信息(尽管我怀疑它很重要)是上面的内容是使用 WSDL 中的 Web 服务/JAX-WS 生成的,并使用 MTOM 声明的操作。因此它会生成一个签名,并将图像作为变量传递。


java.awt.Image很简单。它不提供任何写入/保存图像的方法,也不提供任何访问图像底层像素数据的方法。

第一步,是将java.awt.Image到某事ImageIO可以支持。这将允许您写出图像数据......

ImageIO需要一个RenderedImage因为它是主要图像源。BufferedImage是默认库中此接口的唯一实现...

不幸的是,没有简单的方法可以从一种转换为另一种。幸运的是,这并不难。

Image img = ...;

BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bi.createGraphics();
g2d.drawImage(img, 0, 0, null);
g2d.dispose();

基本上,这只是绘制原始的java.awt.ImageBufferedImage

接下来,我们需要以某种方式保存图像,以便它可以生成InputStream...

这有点不太理想,但可以完成工作。

ByteArrayOutputStream baos = null;
try {
    baos = new ByteArrayOutputStream();
    ImageIO.write(bi, "png", baos);
} finally {
    try {
        baos.close();
    } catch (Exception e) {
    }
}
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());

基本上,我们将图像写入ByteArrayOutputStream并使用结果生成ByteArrayInputStream

现在。如果内存有问题或者图像相当大,您可以先将图像写入File然后简单地阅读File通过某种方式回来InputStream反而...

最后,我们设置InputStream到所需的列...

PreparedStatement stmt = null;
//...    
stmt.setBlob(parameterIndex, bais);

布洛布是你叔叔……

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将内存中的图像转换为 Blob [关闭] 的相关文章

  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • 对 PLSQL 中的每个表执行

    我想要所有表中匹配特定名称条件的记录数 这是我构建的 SQL Declare SQLStatement VARCHAR 8000 BEGIN SELECT SELECT COUNT FROM Table Name INTO SQLState
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • 将 SVG 文件转换为多个不同大小的 PNG 文件

    我有一个 SVG 格式的徽标图像 我想知道是否有办法生成多个不同大小的 png 文件 例如 我设置了 20 个不同的宽度和高度 它会生成 20 个 PNG 文件 如果我必须一次处理 5 张图像也没关系 我已经安装了 illustrator
  • Delphi 5 中的 Oracle 数据库连接

    我正在使用 Delphi 5 版本 我想连接到 Oracle 数据库 我有 TDatabase 组件 我不知道如何通过 Delphi 连接到数据库 请提供连接数据库的步骤 谢谢 The TDatabase http docwiki emba
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 在 Oracle 行的多个列上使用透视

    我在 Oracle 表中有以下示例数据 tab1 我正在尝试将行转换为列 我知道如何在某一列上使用 Oracle 数据透视表 但是否可以将其应用于多个列 样本数据 Type weight height A 50 10 A 60 12 B 4
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O

随机推荐

  • 使用facet_wrap时,geom_bar中的条形有不需要的不同宽度

    我找不到以下问题的解决方案 我非常感谢一些帮助 以下代码使用facet 生成条形图 然而 由于 ggplot2 在某些组中具有 额外空间 即使我指定 0 1 或类似的宽度 它也会使条形变得更宽 我觉得这很烦人 因为它看起来很不专业 我希望所
  • 如何在 C++ 中正确返回数组(类成员)?

    我对 C 还很陌生 所以这可能是一个微不足道的问题 我的类有一个私有成员变量 它是一个数组 我需要返回该数组 但我不确定如何正确执行此操作 class X private double m Array 9 public double Get
  • 这段代码可以防止SQL注入吗?

    背景 我已签约分析现有数据提供者 并且我知道以下代码有错误 但为了指出它有多糟糕 我需要证明它容易受到 SQL 注入的影响 Question 什么 Key 参数可能会破坏PrepareString函数并允许我执行DROP陈述 代码片段 Pu
  • 如何访问网络文件?

    using namespace std ofstream myfile myfile open Z ABC TXT fails Z is a network drive myfile open C Temp ABC TXT OK myfil
  • 为 JavaScript 模块编写 scalajs Facade 时如何使用 JSImport

    我使用 JSImport 编写了一个外观 并且它有效 不幸的是 我通过反复试验找到了解决方案 并且我不完全理解为什么这个特定的解决方案有效 但我尝试过的其他解决方案却无效 背景 我从一个使用 sbt 构建的工作项目开始 它是一个单页应用程序
  • 有没有办法以正确的顺序生成 Liquibase 数据?

    我正在使用 Liquibase 对现有数据库进行版本控制 所以我使用 liquibase logLevel debug driver com mysql jdbc Driver classpath lib mysql connector j
  • 合并删除远程分支列表下的分支后仍然看到Git Branch

    我正在开发一个自动化套件 我在其中创建了两个分支 p2pOnOff 和 release 分支 后来我将它们合并到 master 并使用以下命令删除它们 git branch d p2pOnOff git push origin p2pOnO
  • 删除元组列表中包含 nan 的元组 - Python

    我有一个很长的元组列表 想要使用 Python 删除其中包含 nan 的任何元组 我目前拥有的 x 录音开始 0 nan 4 nan 7 事件标记1 150 我正在寻找的结果 x 录音开始 0 事件标记1 150 我尝试过使用 np isn
  • 将 fb-contrib 库与 Gradle 的 FindBugs 插件结合使用

    是否可以整合Facebook 贡献 http fb contrib sourceforge net 带有 Gradle 的库FindBugs 插件 http www gradle org docs current userguide fin
  • 在Java中,为什么Stack是一个具体类,而Queue是一个接口?

    Queue 的哪一个子类是 普通 队列 1 java util Stack 是 Java 1 0 的遗留类 它早于 Collections 框架很多年 坦率地说 它是一个例子horrible多方面的设计 一切都不是事情应有的样子 主要问题是
  • 为什么 numpy.var 是 O(N) 空间?

    我有一个 13GB 的数组 我打电话numpy var对其进行计算方差 然而 它又分配了约 13GB 来执行此操作 为什么需要 O N 空间 或者我打电话numpy var以错误的方式 import numpy as np data pri
  • 打印一个文件中与另一文件中的模式匹配的行

    我有一个超过 40 000 行的文件 file1 我想提取与 file2 中的模式匹配的行 大约 6000 行 我像这样使用 grep 但它很慢 grep f file2 file1 gt out 有没有更快的方法来使用awk or sed
  • 通过线性布局以编程方式设置两个按钮之间的边距

    我如何以编程方式在按钮 regler 和 decommender 之间设置 20dp 的边距 这是我的工作 LinearLayout lytmain new LinearLayout Mcontex lytmain setOrientati
  • 如何传递特征矩阵行引用以将其视为向量?

    我有一个对向量引用进行操作的函数 例如 void auto bias const Eigen VectorXf v Eigen Ref
  • Vim:打开文件后读取模型行?

    我从事各种项目 其中许多项目设置了特定于文件的 vim 设置 我被要求不要在 vimrc 中设置模型行 加载文件后有没有办法加载模型设置 所以如果我用 vim 打开 tmp c int main int argc char argv ret
  • 工具提示气球显示位置(用于错误通知)

    不久前我问了一个与此密切相关的问题 通知用户错误的替代方法 https stackoverflow com questions 2878043 alternative way to notify the user of an error 简
  • ASP.NET MVC 显示成功消息

    这是我从应用程序中删除记录的示例方法 Authorize Roles news admin public ActionResult Delete int id var ArticleToDelete from a in db Article
  • PyQt - 如何打开目录文件夹?

    我搜索了很多 我知道如何打开目录对话框窗口 但我正在寻找的是在Windows操作系统下打开目录文件夹的方法 就像右键单击本地文件夹之一并选择打开一样 有什么建议么 对于 python 3 7 你可以这样做 os startfile path
  • 在c中实现时间延迟

    我不知道如何准确地描述这个搜索 所以我没有运气找到任何东西 S 我需要在 C 中实现时间延迟 例如我想做一些事情 然后等一分钟 然后继续做事情 这有道理吗 谁能帮我吗 在标准 C C99 中 您可以使用time 为此 请执行以下操作 inc
  • 将内存中的图像转换为 Blob [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我内存中有一个图像 类型 java awt Image 我想使用jdk 1 7将其转换为Blob 类型 java sql Blob 我能找