【问题标题】:How to generate Image at server side in java [ blob-> string_image -> *.png or .jpg ]java [ blob-> string_image -> *.png or .jpg ] 如何在服务器端生成图像
【发布时间】:2021-01-03 03:26:04
【问题描述】:

我想在服务器端生成图像。我的图像以 blob 格式存储在服务器数据库中,我可以将其转换为 string_image。那我怎样才能把 string_image 转换成实际的 .jpg 或 .png 格式呢?

实际上,我将附件作为图片发布在用户的 Facebook 墙上。 如何在 Java 中的服务器端生成图像? 有没有示例代码可以做到这一点?

【问题讨论】:

    标签: java image facebook server-side


    【解决方案1】:

    如果您有 Blob 格式的图像,那么最好使用 ImageIO 并直接读取 blob 输入流。

    这将为您提供一个 java.awt.BufferedImage 对象,然后您可以使用 ImageIO 将其渲染为任何类型的图像。作为 OutputStream,您可以将其作为正文/结果从 HTTP GET 控制器返回。

    BufferedImage image = ImageIO.read( blob.getInputStream() );
    // Feel free to modify the image here using image.createGraphics()
    // add a water mark if you're feeling adventurous
    byte[] responseBody = toByteArray( image, "png" );
    
    ....    
    protected byte[] toByteArray(BufferedImage image, String type) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(image, type, baos);
        return baos.toByteArray();
    }
    

    我不太熟悉 facebook 如何使用图片。我认为这取决于你在做什么。对于 facebook 应用程序,我认为您仍然负责托管图像,但 facebook 将充当缓存代理并仅请求一次图像,然后将其提供给需要查看它的所有客户端。如果是用户发布的图片,那么我认为 facebook 会完全存储图片(显然,上传图片的用户通常不会在另一台服务器上拥有它)。

    如果您只想“按原样”显示图像以响应 Web 请求,则可以将 Blob 的输出直接通过管道传输到客户端,尽管这会使数据库连接保持打开一段时间,但您可能会更好地复制到磁盘缓存然后提供给客户端。

    我不得不承认,我找不到任何关于stirng_image 究竟是什么的有用信息?如果这个答案不能满足您的需求,也许您可​​以澄清一下。

    【讨论】:

    • 感谢重播。我从数据库中获取 bolb 传递它下面的函数,然后它以字符串格式返回图像。表示将 Blob 转换为 string_image。 public String returnBase64Code(Blob blob) { String string_image = null;尝试 { byte[] bytes = blob.getBytes((long) 1, (int) blob.length()); byte[] bytes64 = Base64.encode(bytes); string_image = new String(bytes64); } 捕捉(异常 e){ e.printStackTrace(); } 返回字符串图像; } 以上代码用 jAVA 编写
    • & 我想从这个 string_image 生成实际的 image.png 或 image.jpg。糟糕,可能是这段代码没有被正确看到,所以将它复制到任何 java 编辑器中。然后你了解我做了什么以及我接下来想做什么......希望最好的合作
    • 就像我说的,不要转换成字符串。这对您获取图像文件的目标是浪费且无益的。 Blob 有 getBinaryStream() 方法来获取它的数据。如果您只想将图像直接写入文件,则只需将此输入流通过管道传输到 FileOutputStream。如果要调整大小或更改图像编码,请使用 ImageIO.read 和 ImageIO.write。如果您真的必须从图像的 Base64 编码开始,那么您只需首先通过 Base64 解码器运行它。然后您可以使用 ByteArrayInputStream 作为 ImageIO.read 的源(或写入文件)。
    猜你喜欢
    • 2013-12-20
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多