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

/** * 顺时针图片旋转的方法 * * @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(); } }

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

你可能感兴趣的:(java实现)