`
shuai1234
  • 浏览: 933541 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

java 图片 旋转

    博客分类:
  • java
 
阅读更多
  1. import java.awt.Color; 
  2.     import java.awt.Graphics2D; 
  3.     import java.awt.Transparency; 
  4.     import java.awt.geom.AffineTransform; 
  5.     import java.awt.image.AffineTransformOp; 
  6.     import java.awt.image.BufferedImage; 
  7.     import java.io.ByteArrayInputStream; 
  8.     import java.io.ByteArrayOutputStream; 
  9.     import java.io.IOException; 
  10.     import java.io.InputStream; 
  11.       
  12.     import javax.imageio.ImageIO; 
  13.     import javax.imageio.stream.ImageOutputStream; 
  14.       
  15.     public class ImageChange { 
  16.       
  17.         public static InputStream rotateImg(BufferedImage image, int degree, Color bgcolor) throws IOException { 
  18.       
  19.             int iw = image.getWidth();//原始图象的宽度 
  20.             int ih = image.getHeight();//原始图象的高度 
  21.             int w = 0; 
  22.             int h = 0; 
  23.             int x = 0; 
  24.             int y = 0; 
  25.             degree = degree % 360; 
  26.             if (degree < 0) 
  27.                 degree = 360 + degree;//将角度转换到0-360度之间 
  28.             double ang = Math.toRadians(degree);//将角度转为弧度 
  29.       
  30.             /**
  31.              *确定旋转后的图象的高度和宽度
  32.              */ 
  33.       
  34.             if (degree == 180 || degree == 0 || degree == 360) { 
  35.                 w = iw; 
  36.                 h = ih; 
  37.             } else if (degree == 90 || degree == 270) { 
  38.                 w = ih; 
  39.                 h = iw; 
  40.             } else { 
  41.                 //int d = iw + ih; 
  42.                 //w = (int) (d * Math.abs(Math.cos(ang))); 
  43.                   //h = (int) (d * Math.abs(Math.sin(ang)));
  44.                 double cosVal = Math.abs(Math.cos(ang));
  45.                 double sinVal = Math.abs(Math.sin(ang));
  46.                 w = (int) (sinVal*ih) + (int) (cosVal*iw);
  47.                 h = (int) (sinVal*iw) + (int) (cosVal*ih);
  48.             } 
  49.       
  50.             x = (/ 2) - (iw / 2);//确定原点坐标 
  51.             y = (/ 2) - (ih / 2); 
  52.             BufferedImage rotatedImage = new BufferedImage(w, h, image.getType()); 
  53.             Graphics2D gs = (Graphics2D)rotatedImage.getGraphics(); 
  54.             if(bgcolor==null){ 
  55.                 rotatedImage = gs.getDeviceConfiguration().createCompatibleImage(w, h, Transparency.TRANSLUCENT); 
  56.             }else{ 
  57.                 gs.setColor(bgcolor); 
  58.                 gs.fillRect(0, 0, w, h);//以给定颜色绘制旋转后图片的背景 
  59.             } 
  60.               
  61.             AffineTransform at = new AffineTransform(); 
  62.             at.rotate(ang, w / 2, h / 2);//旋转图象 
  63.             at.translate(x, y); 
  64.             AffineTransformOp op = new AffineTransformOp(at, AffineTransformOp.TYPE_BICUBIC); 
  65.             op.filter(image, rotatedImage); 
  66.             image = rotatedImage; 
  67.               
  68.             ByteArrayOutputStream byteOut= new ByteArrayOutputStream(); 
  69.             ImageOutputStream iamgeOut = ImageIO.createImageOutputStream(byteOut); 
  70.               
  71.             ImageIO.write(image, "png", iamgeOut); 
  72.             InputStream inputStream = new ByteArrayInputStream(byteOut.toByteArray()); 
  73.               
  74.             return inputStream; 
  75.         } 
  76.           
  77.           
  78.     }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics