在做一个项目的时候,遇到存放上传图片的问题,一开始是存放到文件价的,后来发现管理起来不怎么方便,后来就想到存放到数据库;于是就开始实现,可是发现遇到了很多的问题;
好的,下面我就对我对问题的解决做一个记录:
开发环境:MyJSF, MySQL, Hibernate, 用MyEclipse开发;
要解决的问题:把上传的图片进行压缩,并存放到数据库;
相关知识的了解:
存放图片的数据库字段为: Blob(最大的长度为65k)
我的数据库表为:
CREATE TABLE PhotoInfo
(
PhotoInfoID int unsigned auto_increment,
name char(35),
type char(15),
width int,
height int,
image blob,
primary key(`PhotoInfoID`)
);
图片的压缩算法为(下面的可以放到工具类中,我是放在Util中):
/*
* 压缩图片,并返回一个byte数组
*/
public static byte[] ScaleImage(InputStream input, double maxHeight,
double maxWidth) throws IOException {
// 压缩图片
BufferedImage srcImage = ImageIO.read(input);
double Ratio = 1.0;
if (srcImage.getHeight() > maxHeight || srcImage.getWidth() > maxWidth) {
if (srcImage.getHeight() > srcImage.getWidth())
Ratio = maxWidth / srcImage.getWidth();
else
Ratio = maxHeight / srcImage.getHeight();
}
AffineTransformOp op = new AffineTransformOp(AffineTransform
.getScaleInstance(Ratio, Ratio), null);
BufferedImage image = op.filter(srcImage, null);
;
return bufferedImageToByteArray(image);
}
/*
* 把图片转换成byte类型,主要用于图片上传后存放到数据库中的
*/
public static byte[] bufferedImageToByteArray(BufferedImage img)
throws ImageFormatException, IOException {
ByteArrayOutputStream os =
把图片压缩并存放到数据库的实现(how to store image into database)
最新推荐文章于 2021-05-26 07:40:11 发布
本文记录了一个项目中将上传图片压缩并存储到MySQL数据库的过程,使用了MyJSF、MySQL、Hibernate和MyEclipse。通过压缩算法将图片调整大小,转换为byte数组,然后利用Hibernate的BinaryBlobType映射到数据库Blob字段。在上传和显示图片时,进行了相应处理。
摘要由CSDN通过智能技术生成