利用Thumbnails 根据坐标裁剪图片

问题描述:今天工作中需要用户上传个人头像,然后后台根据传来的坐标以及宽度高度来裁剪并存到mysql数据库。

用Thumbnails 来进行裁剪图片

一、建立数据库

CREATE TABLE `tb_sys_user_photo` (
  `user_no` varchar(20) NOT NULL COMMENT '用户名',
  `user_photo` longblob COMMENT '用户头像',
  PRIMARY KEY (`user_no`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='个人中心用户头像表';

二、前台通过ajaxFileUpload上传图片文件和坐标参数

三、后台接收到通过mybatis存到mysql

//action中定义文件、坐标信息以及裁剪宽度和高度

    private File file;
    private String fileFileName;
    private String fileContentType;
    //裁剪坐标以及宽度和高度
    private int x1;
    private int y1;
    private int x2;
    private int y2;
    private int w;
    private int h;

public String insertOrUpdate() throws Exception {

ActionContext.initialize(ServletActionContext.getRequest(),
ServletActionContext.getResponse());
dataMap = new HashMap(); 
tbSysUserPhoto = new TbSysUserPhoto();
try{
   tbSysUserPhoto.setUserNo(User.getRegNo(ServletActionContext.getRequest()));
       tbSysUserPhoto = tbSysUserPhotoBo.getById(tbSysUserPhoto);
            //byte输出流
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            //按坐标 高度和宽度裁剪
            Thumbnails.of(banner).sourceRegion(x1,y1,x2,y2).size(w,h).toOutputStream(out);//到输出流
            Thumbnails.of(banner).sourceRegion(x1,y1,x2,y2).size(w,h).toFile("D:\\test\\dd.jpg");//存到硬盘

       if(tbSysUserPhoto == null){//新增
           tbSysUserPhoto = new TbSysUserPhoto();
           tbSysUserPhoto.setUserPhoto(out.toByteArray());
           tbSysUserPhoto.setUserNo(User.getRegNo(ServletActionContext.getRequest()));
           tbSysUserPhotoBo.insert(tbSysUserPhoto);
       }else{
           tbSysUserPhoto.setUserPhoto(out.toByteArray());
           tbSysUserPhotoBo.update(tbSysUserPhoto);
       }
dataMap.put("flag", "success");
dataMap.put("msg", "保存成功!");
}catch(Exception e){
e.printStackTrace();
dataMap.put("flag", "error");
dataMap.put("msg", "保存失败!");
throw new Exception(e.getMessage());
}
return SUCCESS;

}

另外:Thumbnails 还有其他按比例 裁剪  水印  旋转等功能就不再赘述


你可能感兴趣的:(应用插件)