java 把頭像圖片剪切成圓圖 並在頭像後面加一個白圓圈

 public static void main(String[] args) throws IOException {
    	//從鏈接中獲取圖片,如OSS,服務器等。
//        String url = "https://mjmall.oss-cn-shanghai.aliyuncs.com/18/1/merchantIcon.png";
//        BufferedImage avatarImage = ImageIO.read(new URL(url));
    	BufferedImage avatarImage = ImageIO.read(new File("C:/head/mager.jpg"));
        int width = 120;//如果剪切出來的圖片畫質模糊,請將width 調大點.
        // 透明底的圖片
        BufferedImage formatAvatarImage = new BufferedImage(width, width, BufferedImage.TYPE_4BYTE_ABGR);
        Graphics2D graphics = formatAvatarImage.createGraphics();
        //把圖片切成一個圓
        
            graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            //留一個像素的空白區域,這個很重要,畫圓的時候把這個覆蓋
            int border = 1;
            //圖片是一個圓型
            Ellipse2D.Double shape = new Ellipse2D.Double(border, border, width - border * 2, width - border * 2);
            //需要保留的區域
            graphics.setClip(shape);
            graphics.drawImage(avatarImage, border, border, width - border * 2, width - border * 2, null);
            graphics.dispose();
        
        //在圓圖外面再畫一個圓
        
            //新創建一個graphics,這樣畫的圓不會有鋸齒
            graphics = formatAvatarImage.createGraphics();
            graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            int border1 = 3;
            //畫筆是4.5個像素,BasicStroke的使用可以查看下面的參考文檔
            //使畫筆時基本會像外延伸一定像素,具體可以自己使用的時候測試
            Stroke s = new BasicStroke(4.5F, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
            graphics.setStroke(s);
            graphics.setColor(Color.WHITE);
            graphics.drawOval(border1, border1, width - border1 * 2, width - border1 * 2);
            graphics.dispose();
        
            OutputStream os = new FileOutputStream("C:/head/oo.png");//發佈項目時,如:Tomcat 他會在服務器本地tomcat webapps文件下創建此文件名
            ImageIO.write(formatAvatarImage, "PNG", os);

    }

.改爲工具類使用截取頭像成圓形使用上傳到oss(或其他,請自己更改,我只提供簡單的方法)需要OSS架包或連接參數說明請跳轉點擊打開鏈接

 
public class CopeImageUtil {
   
	private static Logger LOGGER = LoggerFactory.getLogger(CopeImageUtil.class);
	//head參數圖片,其他參數都是連接OSS使用的參數。
	public static String headImages(String head, String ENDPOINT, String ACCESS_KEY_ID, String ACCESS_KEY_SECRET, String BUCKET_NAME) throws MalformedURLException{
     
	  //從鏈接中獲取圖片,如OSS,服務器等。如果不是從連接中獲取請使用File上傳。
      String url = head;
      BufferedImage avatarImage;
	try {
		
	  avatarImage = ImageIO.read(new URL(url));
      int width = 400;
      // 透明底的圖片
      BufferedImage formatAvatarImage = new BufferedImage(width, width, BufferedImage.TYPE_4BYTE_ABGR);
      Graphics2D graphics = formatAvatarImage.createGraphics();
      //把圖片切成一個圓
      
          graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
          //留一個像素的空白區域,這個很重要,畫圓的時候把這個覆蓋
          int border =1;
          //圖片是一個圓型
          Ellipse2D.Double shape = new Ellipse2D.Double(border, border, width - border * 2, width - border * 2);
          //需要保留的區域
          graphics.setClip(shape);
          graphics.drawImage(avatarImage, border, border, width - border * 2, width - border * 2, null);
          graphics.dispose();
      
      
          //在圓圖外面再畫一個圓
          
          //新創建一個graphics,這樣畫的圓不會有鋸齒
          graphics = formatAvatarImage.createGraphics();
          graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
          int border1 = 3;
          //畫筆是4.5個像素,BasicStroke的使用可以查看下面的參考文檔
          //使畫筆時基本會像外延伸一定像素,具體可以自己使用的時候測試
          Stroke s = new BasicStroke(4.5F, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
          graphics.setStroke(s);
          graphics.setColor(Color.WHITE);
          graphics.drawOval(border1, border1, width - border1 * 2, width - border1 * 2);
          graphics.dispose();
      
    
          // 創建OSSClient實例
          OSSClient ossClient = new OSSClient(ENDPOINT,
                  ACCESS_KEY_ID, ACCESS_KEY_SECRET);
          	//隨機生成圖片名
              String filePath = new DateTime().toString("yyyy/MM/dd/");
              String fileName = IdUtils.genImageName() + ".png";
              ImageIO.write(formatAvatarImage, "png", new FileOutputStream("copeImage.png"));
  		      ossClient.putObject(BUCKET_NAME, filePath + fileName, new File("copeImage.png"));
  			//返回上傳到OSS的圖片地址鏈接
  			return "https://" + BUCKET_NAME + "."+ENDPOINT+"/" + filePath + fileName;


		  }catch (Exception e) {
              LOGGER.error("調用小程序生成微信永久小程序碼URL接口異常", e);
        }
	return null;
     
	}

-----------------------------------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章