当前位置: 首页 > 知识库问答 >
问题:

缩放图像,然后保存到数据库(Blob)

慕容玉书
2023-03-14

我刚刚开始使用imgScalr图像缩放库。

null

BufferedImage fullImage = Scalr.resize((BufferedImage) ImageIO.read(imageStream), fullImageSize);
BufferedImage thumbImage = Scalr.resize(fullImage, thumbImageSize);

null

null

在调整/缩放图像之前,我所做的是获取输入流,并使用PreparedStatement将其保存到DB(Oracle11+)BLOB字段,如下所示:

PreparedStatement st = con.prepareStatement(SQL);
st.setBlob(1, imageStream);

这是工作良好的,因为我可以保存它没有问题,并检索它没有问题。

null

null

相反,我要做的是将BufferedImage转换为ByteArrayOutputStream,然后将其读取为InputStream,请参阅下面的代码:

BufferedImage fullImage = Scalr.resize((BufferedImage) ImageIO.read(imageStream), fullImageSize);
BufferedImage thumbImage = Scalr.resize(fullImage, thumbImageSize);

ByteArrayOutputStream fullImageArray = new ByteArrayOutputStream();
ByteArrayOutputStream thumbImageArray = new ByteArrayOutputStream();

ImageIO.write(fullImage, imageMimeType, fullImageArray);
ImageIO.write(thumbImage, imageMimeType, thumbImageArray);

InputStream fullImageStream = new ByteArrayInputStream(fullImageArray.toByteArray());
InputStream thumbImageStream = new ByteArrayInputStream(thumbImageArray.toByteArray());

// DB INITIALISATION STUFF

PreparedStatement st = con.prepareStatement(SQL);
st.setBlob(1, fullImageStream);
st.setBlob(2, thumbImageStream);

null

null

问题是,在转换或缩放过程中的某个时刻,image值丢失,我最终得到null

null

null

  1. 我做错了什么?
  2. 是否有更好的方法在java中缩放图像并将其保存到DB(Blob)字段?

共有1个答案

廉飞捷
2023-03-14

这个问题是由众所周知的Pebcak问题引起的,或者在本例中是“开发人员错误”!

作为将来的参考,我做错的是我为ImageIO.read方法使用了不正确的图像类型:

问题:
imageio.write(fullImage,imageMimeType,fullImageArray);

null

修正:
ImageIO.Write(fullImage,ImageMimetype.Replace(“image/”,“”),fullImageArray);

我知道replace在这种情况下是安全的,因为字符串将始终遵循该模式。

 类似资料:
  • 这是我的第一个问题。帮助我帮助你帮助我:这个问题需要澄清吗? 目标:一个脚本,使Instagram就绪的视频与音频,并一个logo覆盖。脚本接受一个音频和视频源,并将它们组合起来。重要:标志应该有一个一致的位置和大小为每个视频。这很可能意味着所有输出的视频应该具有相同的宽度x高度。 任何替代方法都是受欢迎的! 下面是我从python调用的ffmpeg命令。我试着将视频缩放到720:-2(所以自动高

  • 问题内容: 我的客户在php + mysql中创建了一个脚本,该脚本将图像直接保存在数据库中,并且每个图像都有这样的url:www.example.com/image.php?id=421 您认为这是一个非常错误的解决方案?我应该重建所有站点吗? 每天大约有1000次访问,数据库中大约有600张图像。 问题答案: 图像文件是文件,除非有充分的理由将它们存储在数据库中,否则它们应属于文件系统,在文件

  • 我创造了一个实体。我想写一个RestController来在MySQL中保存这个实体和一个图像。我使用了Java8、SpringBoot、Hibernate、Rest API、JSON。我该怎么做呢?我可以一起保存吗? 控制器

  • 问题内容: 您好,我在较早之前发布了此内容,并获得了一些帮助,但仍然没有有效的解决方案。由于最后的问与答,我确定我的“保存到数据库”代码以及“检索到图片”代码有问题。即使我手动将图片保存在数据库中,它也不会恢复。这是我从网络上的3或4个示例中修补而成的代码。理想情况下,如果有人拥有一些已知的良好代码,并且可以指导我这样做,那将是最好的。 ![在此处输入图片描述] [1] ‘*使用以下代码检索到图片

  • 我需要在数据库中按kb保存大小,以便在前端查看,这是我正在使用的控制器。我使用的是Laravel 5.8 所以我的问题是,拉雷维尔是否提供了处理这种情况的任何假象?或者任何其他框架都有更适合问题的功能是什么?

  • 我对图像进行了收缩缩放,但是当我第一次加载应用程序时,整个图像不可见,只有一部分。图像填充了屏幕的宽度,但其上下都有空白。此外,当缩放图像时,图像变得非常短。纵横比应保持不变。 我希望在应用程序加载时使整个图像可见,然后我希望能够用两根手指缩小图像,其中图像不会小于屏幕的大小,以便屏幕始终充满(图像是地图)。 为了放大,图像应该超出手机屏幕的宽度和高度。这样我就可以平移过去查看地图的细节。 任何帮