首页 > 编程 > Java > 正文

java 图像处理截圆形的图形

2019-11-06 09:52:48
字体:
来源:转载
供稿:网友

有网络时可以用这个测试

public static void main(String[] args) {		try {			//http://avatar.csdn.net/3/1/7/1_QQ_27292113.jpg?1488183229974  是头像地址			//获取图片的流//	        BufferedImage url = getUrlByBufferedImage("http://avatar.csdn.net/3/1/7/1_qq_27292113.jpg?1488183229974");				        Image src = ImageIO.read(new File("C:/Users/Administrator/Desktop/Imag.png"));	        BufferedImage url = (BufferedImage) src;	        //处理图片将其压缩成正方形的小图	        BufferedImage  convertImage= scaleByPercentage(url, 100,100);	        //裁剪成圆形 (传入的图像必须是正方形的 才会 圆形 如果是长方形的比例则会变成椭圆的)	        convertImage = convertCircular(url);	        //生成的图片位置	    	String imagePath= "C:/Users/Administrator/Desktop/Imag.png";	        ImageIO.write(convertImage, imagePath.substring(imagePath.lastIndexOf(".") + 1), new File(imagePath)); 	        System.out.PRintln("ok");		} catch (Exception e) {			e.printStackTrace();		}	}没有有联网用这个测试

	public static void main(String[] args) {		try {			//图片的本地地址	        Image src = ImageIO.read(new File("C:/Users/Administrator/Desktop/Imag.png"));	        BufferedImage url = (BufferedImage) src;	        //处理图片将其压缩成正方形的小图	        BufferedImage  convertImage= scaleByPercentage(url, 100,100);	        //裁剪成圆形 (传入的图像必须是正方形的 才会 圆形 如果是长方形的比例则会变成椭圆的)	        convertImage = convertCircular(url);	        //生成的图片位置	    	String imagePath= "C:/Users/Administrator/Desktop/Imag.png";	        ImageIO.write(convertImage, imagePath.substring(imagePath.lastIndexOf(".") + 1), new File(imagePath)); 	        System.out.println("ok");		} catch (Exception e) {			e.printStackTrace();		}	}

以下是调用的方法
	    /**     * 缩小Image,此方法返回源图像按给定宽度、高度限制下缩放后的图像     * @param inputImage     * @param maxWidth:压缩后宽度     * @param maxHeight:压缩后高度     * @throws java.io.IOException     * return      */    public static BufferedImage scaleByPercentage(BufferedImage inputImage, int newWidth, int newHeight) throws Exception {        //获取原始图像透明度类型        int type = inputImage.getColorModel().getTransparency();        int width = inputImage.getWidth();        int height = inputImage.getHeight();        //开启抗锯齿        RenderingHints renderingHints=new RenderingHints(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);        //使用高质量压缩        renderingHints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);        BufferedImage img = new BufferedImage(newWidth, newHeight, type);        Graphics2D graphics2d =img.createGraphics();        graphics2d.setRenderingHints(renderingHints);                graphics2d.drawImage(inputImage, 0, 0, newWidth, newHeight, 0, 0, width, height, null);        graphics2d.dispose();        return img;    }	        /**     * 通过网络获取图片     * @param url     * @return     */    public static BufferedImage getUrlByBufferedImage(String url){        try {			URL urlObj = new URL(url);  			HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();  			// 连接超时  			conn.setDoInput(true);  			conn.setDoOutput(true);  			conn.setConnectTimeout(25000);  			// 读取超时 --服务器响应比较慢,增大时间  			conn.setReadTimeout(25000);  			conn.setRequestMethod("GET");  			conn.addRequestProperty("Accept-Language", "zh-cn");  			conn.addRequestProperty("Content-type", "image/jpeg");  			conn.addRequestProperty( "User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727)");  			conn.connect();            BufferedImage bufImg = ImageIO.read(conn.getInputStream());              conn.disconnect();            return bufImg;		} catch (MalformedURLException e) {			e.printStackTrace();		} catch (ProtocolException e) {			e.printStackTrace();		} catch (IOException e) {			e.printStackTrace();		}         return null;    }        /**     * 传入的图像必须是正方形的 才会 圆形  如果是长方形的比例则会变成椭圆的     * @param url 用户头像地址       * @return     * @throws IOException     */    public static BufferedImage convertCircular(BufferedImage bi1) throws IOException{//    	BufferedImage bi1 = ImageIO.read(new File(url));    	//这种是黑色底的//    	BufferedImage bi2 = new BufferedImage(bi1.getWidth(),bi1.getHeight(),BufferedImage.TYPE_INT_RGB);     	    	//透明底的图片    	BufferedImage bi2 = new BufferedImage(bi1.getWidth(),bi1.getHeight(),BufferedImage.TYPE_4BYTE_ABGR);     	Ellipse2D.Double shape = new Ellipse2D.Double(0,0,bi1.getWidth(),bi1.getHeight());    	Graphics2D g2 = bi2.createGraphics();    	g2.setClip(shape);     	// 使用 setRenderingHint 设置抗锯齿    	g2.drawImage(bi1,0,0,null);     	//设置颜色    	g2.setBackground(Color.green);    	g2.dispose();    	return bi2;    }    	引入的类

import java.awt.Color;import java.awt.Graphics2D;import java.awt.Image;import java.awt.RenderingHints;import java.awt.geom.Ellipse2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.ProtocolException;import java.net.URL;

执行结果对比


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表