把图片压缩并存放到数据库的实现(how to store image into database)

本文记录了一个项目中将上传图片压缩并存储到MySQL数据库的过程,使用了MyJSF、MySQL、Hibernate和MyEclipse。通过压缩算法将图片调整大小,转换为byte数组,然后利用Hibernate的BinaryBlobType映射到数据库Blob字段。在上传和显示图片时,进行了相应处理。
摘要由CSDN通过智能技术生成

在做一个项目的时候,遇到存放上传图片的问题,一开始是存放到文件价的,后来发现管理起来不怎么方便,后来就想到存放到数据库;于是就开始实现,可是发现遇到了很多的问题;
好的,下面我就对我对问题的解决做一个记录:
开发环境: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 =

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值