java实现图片旋转保存到数据库

来源:互联网 发布:电脑软件设计师 编辑:程序博客网 时间:2024/05/21 10:21

/**  * 顺时针图片旋转的方法  *   * @param request  * @param response  * @return    * @author julong 2013-8-29 下午09:12:47  */ public void pictureRotationClockwise(HttpServletRequest request,HttpServletResponse response,PhotoTemp2 pt2){  response.setContentType("text/html; charset=GBK");  //获取smid  String smid = request.getParameter("smid");  //System.out.println(smid);  //获取原图片对象  PhotoTemp2 photoTemp2 = this.photoTemp2Service.getZp(smid);  //获取图片对象  byte[] imgBtye  = photoTemp2.getZp();  //获取输入字节流  ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(imgBtye);  //将byte数组转换为image对象  访问图像缓冲区的图像对象  BufferedImage bufferedImage;  PrintWriter out = null ;    ExcuteResult result;  try {   //获得图片对象   bufferedImage = ImageIO.read(byteArrayInputStream);   //获得当前的图片的高度和宽度   int thisHeight = bufferedImage.getHeight();   int thisWidth = bufferedImage.getWidth();   BufferedImage dstImage = null;   //创建图片矩阵向量旋转对象类表示    //2D 仿射变换,它执行从 2D 坐标到其他 2D 坐标的线性映射,保留了线的“直线性”和“平行性”。可以使用一系列平移、缩放、翻转、旋转和剪切来构造仿射变换。         AffineTransform affineTransform = new AffineTransform();         //设置图像平移的距离         //thisHeight - 坐标在 X 轴方向上平移的距离         //0 - 坐标在 Y 轴方向上平移的距离         affineTransform.translate(thisHeight, 0);         //创建一个新的画布              //旋转后  thisHeight图像的宽度  thisWidth 图像的高度            dstImage = new BufferedImage(thisHeight, thisWidth, bufferedImage.getType());            //设置图片旋转的角度  是X轴正半轴 向Y轴正半轴 旋转的角度            affineTransform.rotate(java.lang.Math.toRadians(90));            //执行源图像的线性2D映射            AffineTransformOp affineTransformOp = new AffineTransformOp(affineTransform,null);            //转换图片对象为bufferedImage对象            affineTransformOp.filter(bufferedImage, dstImage);            // 创建字节输入流   ByteArrayOutputStream byteArrayOutputStream =new ByteArrayOutputStream();   ImageIO.write(dstImage, "JPEG", byteArrayOutputStream);   //获取新图片的数组   byte[] newImg = byteArrayOutputStream.toByteArray();   photoTemp2.setZp(newImg);   //执行更新操作   result =  this.photoTemp2Service.updateDrvPhotoTempZP(photoTemp2);               out = response.getWriter();   //System.err.println(result.getReturnCode());   //判断数据库是否更新成功如果成功则执行刷新的方法   if(1==result.getReturnCode()){     out.println("<script style='javascript/text'>parent.rotationBack();</script>");   }        } catch (IOException e) {   // TODO Auto-generated catch block   e.printStackTrace();  } catch(Exception e){   e.printStackTrace();  }finally{    if(out!=null)out.close();   }  //return new ModelAndView("dagl/lsda_drv_imgList");     }  /**  * 图片逆时针旋转的方法  *   * @param request  * @param response  * @param pt2  * @author julong 2013-8-30 下午03:26:27  */ public void pictureRotationAntiClockwise(HttpServletRequest request,HttpServletResponse response,PhotoTemp2 pt2){  response.setContentType("text/html; charset=GBK");  //System.out.println("--------------------------------------------------------------------------");  //获取smid  String smid = request.getParameter("smid");  //System.out.println(smid);  //获取原图片对象  PhotoTemp2 photoTemp2 = this.photoTemp2Service.getZp(smid);  //获取图片对象  byte[] imgBtye  = photoTemp2.getZp();  //获取输入字节流  ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(imgBtye);  //将byte数组转换为image对象  访问图像缓冲区的图像对象  BufferedImage bufferedImage;  PrintWriter out = null ;    ExcuteResult result;  try {   //获得图片对象   bufferedImage = ImageIO.read(byteArrayInputStream);   //获得当前的图片的高度和宽度   int thisHeight = bufferedImage.getHeight();   int thisWidth = bufferedImage.getWidth();   BufferedImage dstImage = null;   //创建图片矩阵向量旋转对象类表示    //2D 仿射变换,它执行从 2D 坐标到其他 2D 坐标的线性映射,保留了线的“直线性”和“平行性”。可以使用一系列平移、缩放、翻转、旋转和剪切来构造仿射变换。         AffineTransform affineTransform = new AffineTransform();         //设置图像平移的距离         //0 - 坐标在 X 轴方向上平移的距离         //thisWidth - 坐标在 Y 轴方向上平移的距离         affineTransform.translate(0, thisWidth);         //创建一个新的画布              //旋转后  thisHeight图像的宽度  thisWidth 图像的高度            dstImage = new BufferedImage(thisHeight, thisWidth, bufferedImage.getType());            //设置图片旋转的角度  是X轴正半轴 向Y轴正半轴 旋转的角度            affineTransform.rotate(java.lang.Math.toRadians(270));            //执行源图像的线性2D映射            AffineTransformOp affineTransformOp = new AffineTransformOp(affineTransform,null);            //转换图片对象为bufferedImage对象            affineTransformOp.filter(bufferedImage, dstImage);            // 创建字节输入流   ByteArrayOutputStream byteArrayOutputStream =new ByteArrayOutputStream();   ImageIO.write(dstImage, "JPEG", byteArrayOutputStream);   //获取新图片的数组   byte[] newImg = byteArrayOutputStream.toByteArray();   photoTemp2.setZp(newImg);   //执行更新操作   result =  this.photoTemp2Service.updateDrvPhotoTempZP(photoTemp2);              out = response.getWriter();   //System.err.println(result.getReturnCode());   //判断数据库是否更新成功如果成功则执行刷新的方法   if(1==result.getReturnCode()){     out.println("<script style='javascript/text'>parent.rotationBack();</script>");   }  } catch (IOException e) {   // TODO Auto-generated catch block   e.printStackTrace();  } catch(Exception e){   e.printStackTrace();  }finally{    if(out!=null)out.close();   } }

这种方式是图片从数据库中读出来  在旋转  后存入数据库中  测试成功  希望对您有所帮助
0 0