public class ImgCodeUtils { public static BufferedImage img_alpha(BufferedImage imgsrc,int alpha) { try { //创建一个包含透明度的图片,半透明效果必须要存储为png合适才行,存储为jpg,底色为黑色 BufferedImage back=new BufferedImage(imgsrc.getWidth(), imgsrc.getHeight(), BufferedImage.TYPE_INT_ARGB); int width = imgsrc.getWidth(); int height = imgsrc.getHeight(); for (int j = 0; j < height; j++) { for (int i = 0; i < width; i++) { int rgb = imgsrc.getRGB(i, j); Color color = new Color(rgb); Color newcolor = new Color(color.getRed(), color.getGreen(),color.getBlue(), alpha); back.setRGB(i,j,newcolor.getRGB()); } } return back; } catch (Exception e) { e.printStackTrace(); return null; } } public static BufferedImage file2img(String imgpath) { try { BufferedImage bufferedImage=ImageIO.read(new File(imgpath)); return bufferedImage; } catch (Exception e) { e.printStackTrace(); return null; } } //保存图片,extent为格式,"jpg"、"png"等 public static void img2file(BufferedImage img,String extent,String newfile) { try { ImageIO.write(img, extent, new File(newfile)); } catch (Exception e) { e.printStackTrace(); } } //压缩图片 public static BufferedImage getBufferedImage(Image src,int scale) { int width = ( int ) (src.getWidth( null ) * scale / 100.0 ); int height = ( int ) (src.getHeight( null ) * scale / 100.0 ); BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); bufferedImage.getGraphics().drawImage(src.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0 , 0 , null ); return bufferedImage; } 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; } 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 * * @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; } }
Java 图片处理工具类型utils
最新推荐文章于 2024-07-09 09:55:25 发布