Java对于Image转码和解码以及图片旋转的方法demo(搜集资料整合)

  public static String GetImageStr(String imgFilePath) {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
    byte[] data = null;
     
    // 读取图片字节数组
    try {
      InputStream in = new FileInputStream(imgFilePath);
      data = new byte[in.available()];
      in.read(data);
      in.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
     
    // 对字节数组Base64编码
    BASE64Encoder encoder = new BASE64Encoder();
    return encoder.encode(data);// 返回Base64编码过的字节数组字符串
  }
 
  public static boolean GenerateImage(String imgStr, String imgFilePath) {// 对字节数组字符串进行Base64解码并生成图片
    if (imgStr == null) // 图像数据为空
      return false;
    BASE64Decoder decoder = new BASE64Decoder();
    try {
      // Base64解码
      byte[] bytes = decoder.decodeBuffer(imgStr);
      for (int i = 0; i < bytes.length; ++i) {
        if (bytes[i] < 0) {// 调整异常数据
          bytes[i] += 256;
        }
      }
      // 生成jpeg图片
      OutputStream out = new FileOutputStream(imgFilePath);
      out.write(bytes);
      out.flush();
      out.close();
      return true;
    } catch (Exception e) {
      return false;
    }
  }
  
  @Test
  public  void test(){
String base=  GetImageStr("D:\\aa\\402881b45c86b87b015c9ac3d9b601fc.jpg");
xuanzhuanImage(base, "D:\\aa\\402881b45c86b87b015c9ac3d9b601fc.jpg");
  }
  public static String xuanzhuanImage(String base64,String filePath){//将base64位编码转成图片并旋转之后再转成base64位编码并返回
  //1.将base64位编码转成图片
  GenerateImage(base64, filePath);
  //2.将获取的图片旋转成水平
  Image img = Toolkit.getDefaultToolkit().getImage(filePath);
  BufferedImage bufferImage=toBufferedImage(img);
  
  BufferedImage rbuffer=rotateImage(bufferImage, 90);
  try {

ImageIO.write(rbuffer, "jpg",new File(filePath));

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
  //3.将旋转后的图片转成base64位编码并返回
  String ImageBase64=GetImageStr(filePath);
  return ImageBase64;
  }
  //将图片转成BufferedImage
  public static BufferedImage toBufferedImage(Image image) {
    if (image instanceof BufferedImage) {
        return (BufferedImage)image;
     }
     image = new ImageIcon(image).getImage();
     BufferedImage bimage = null;
     GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    try {
        int transparency = Transparency.TRANSLUCENT;//透明色  OPAQUE为不透明,黑色等
         GraphicsDevice gs = ge.getDefaultScreenDevice();
         GraphicsConfiguration gc = gs.getDefaultConfiguration();
         bimage = gc.createCompatibleImage(
         image.getWidth(null), image.getHeight(null), transparency);
     } catch (HeadlessException e) {
        
     }
 
    if (bimage == null) {
 
        int type = BufferedImage.TYPE_INT_RGB;
     
         bimage = new BufferedImage(image.getWidth(null), image.getHeight(null), type);
     }
 

     Graphics g = bimage.createGraphics();
 
     g.drawImage(image, 0, 0, null);
     g.dispose();
 
    return bimage;
}
  /**
     * 旋转图片为指定角度
     * 
     * @param bufferedimage
     *            目标图像
     * @param degree
     *            旋转角度
     * @return
     */
    public static BufferedImage rotateImage( BufferedImage bufferedimage,
            int degree) {
    int iw = bufferedimage.getWidth();//原始图象的宽度
    int ih = bufferedimage.getHeight();//原始图象的高度
    int w = 0;
    int h = 0;
    int x = 0;
    int y = 0;
    degree = degree % 360;
    if (degree < 0)
    degree = 360 + degree;//将角度转换到0-360度之间
    /**
    *确定旋转后的图象的高度和宽度
    */
    if (degree == 180 || degree == 0 || degree == 360) {
    w = iw;
    h = ih;
    } else if (degree == 90 || degree == 270) {
    w = ih;
    h = iw;
    }
    x = (w / 2) - (iw / 2);//确定原点坐标
    y = (h / 2) - (ih / 2);
        int type = bufferedimage.getColorModel().getTransparency();
        BufferedImage img;
        Graphics2D graphics2d;
        (graphics2d = (img = new BufferedImage(w,h, type))
                .createGraphics()).setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        graphics2d.rotate(Math.toRadians(degree), w/2, h/2);
        graphics2d.translate(x, y);
        graphics2d.drawImage(bufferedimage, 0, 0, null);
        graphics2d.dispose();
        return img;
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值