最近搜索

java旋转图片。

浏览:378
管理员 2022-10-19 09:25



//旋转小程序二维码。
// /webapp/static/temp/这个文件夹下面的图片。可以删除。定时删除。
String temp_file_path = "/static/temp/"+ DateUtil.formatDate(new Date(), "yyyyMMdd")+"/";
try {
   //从服务器中读取照片,用new URL(),读取本地磁盘中照片用new File()
   BufferedImage  bufferedimage = ImageIO.read(new File(webPath + uploadFile + fileName));
   int angle = 90;
   int w =0;
   int h= 0;
   if(angle!=0){//旋转角度不等于零
      //作者 这里没有判断 是不是  正方形这个步写不写都行。
      if(angle / 90%2 ==1){//旋转角度为90或270...时,图像的长款对换
         h = bufferedimage.getWidth();
         w = bufferedimage.getHeight();
      }else{
         w = bufferedimage.getWidth();
         h = bufferedimage.getHeight();
      }
   }else {//旋转角度为0时,不做操作
   }
   //将像素值转换为颜色分量和 alpha 分量的方法,返回此 ColorModel 的转换类型。
   int type = bufferedimage.getColorModel().getTransparency();
   BufferedImage img;
   img = new BufferedImage(w, h, type);
   //创建一个 Graphics2D,可以将它绘制到此 BufferedImage 中。
   Graphics2D graphics2d = img.createGraphics();
   //将当前 Graphics2D Transform 与平移转换连接。后续呈现相对于前一位置平移指定的距离。
   graphics2d.translate((w-bufferedimage.getWidth())/2, (h-bufferedimage.getHeight())/2);
   graphics2d.setRenderingHint(
         RenderingHints.KEY_INTERPOLATION,//插值提示键
         RenderingHints.VALUE_INTERPOLATION_BILINEAR);//插值提示值——图像中最接近整数坐标样本的 4 种颜色样本被线性地插入,以生成一个颜色样本
   //注意此处是员图片的宽和长,不是计算后的,用计算后的宽和长,保存后又黑边,因为此处错误找了三四个小时
   graphics2d.rotate(Math.toRadians(angle), bufferedimage.getWidth() / 2, bufferedimage.getHeight() / 2);
   graphics2d.drawImage(bufferedimage, null, null);
   graphics2d.dispose();
   FileUtil.makeDirs(webPath + temp_file_path);
   ImageIO.write(img, "jpg", new File(webPath+temp_file_path + fileName + ".jpg"));
   //保存旋转后的小程序 二维码,
}catch (Exception e){
   System.out.println("旋转图片出错了");
}
//旋转小程序二维码。


联系站长

站长微信:xiaomao0055

站长QQ:14496453